SpriteKit di Xamarin.iOS

SpriteKit, kerangka kerja grafis 2D dari Apple, memiliki beberapa fitur baru yang menarik di iOS 8 dan OS X Yosemite. Ini termasuk integrasi dengan SceneKit, dukungan shader, pencahayaan, bayangan, batasan, pembuatan peta normal, dan peningkatan fisika. Secara khusus, fitur fisika baru membuatnya sangat mudah untuk menambahkan efek realistis pada permainan.

Tubuh Fisika

SpriteKit mencakup API fisika tubuh kaku 2D. Setiap sprite memiliki tubuh fisika terkait (SKPhysicsBody) yang mendefinisikan sifat fisika seperti massa dan gesekan, serta geometri tubuh di dunia fisika.

Membuat Tubuh Fisika dari Tekstur

SpriteKit sekarang mendukung turunan tubuh fisika sprite dari teksturnya. Ini membuatnya mudah untuk menerapkan tabrakan yang terlihat lebih alami.

Misalnya, perhatikan dalam tabrakan berikut bagaimana pisang dan monyet bertabrakan hampir di permukaan setiap gambar:

The banana and monkey collide nearly at the surface of each image

SpriteKit memungkinkan pembuatan tubuh fisika seperti itu dengan satu baris kode. Cukup panggil SKPhysicsBody.Create dengan tekstur dan ukuran: sprite. PhysicsBody = SKPhysicsBody.Create (sprite. Tekstur, sprite. Ukuran);

Ambang Batas Alfa

Selain hanya mengatur PhysicsBody properti langsung ke geometri yang berasal dari tekstur, aplikasi dapat mengatur dan ambang alfa untuk mengontrol bagaimana geometri diturunkan.

Ambang alfa mendefinisikan nilai alfa minimum piksel harus disertakan dalam isi fisika yang dihasilkan. Misalnya, kode berikut menghasilkan isi fisika yang sedikit berbeda:

sprite.PhysicsBody = SKPhysicsBody.Create (sprite.Texture, 0.7f, sprite.Size);

Efek mengubah ambang alfa seperti ini menyempurnakan tabrakan sebelumnya, sehingga monyet jatuh ketika bertabrakan dengan pisang:

The monkey falls over when colliding with the banana

Bidang Fisika

Tambahan bagus lainnya untuk SpriteKit adalah dukungan bidang fisika baru. Ini memungkinkan Anda untuk menambahkan hal-hal seperti bidang pusaran, bidang gravitasi radial, dan bidang musim semi untuk nama hanya beberapa.

Bidang fisika dibuat menggunakan kelas SKFieldNode, yang ditambahkan ke adegan seperti yang lain SKNode. Ada berbagai metode pabrik untuk SKFieldNode membuat bidang fisika yang berbeda. Anda dapat membuat bidang spring dengan memanggil SKFieldNode.CreateSpringField(), bidang gravitasi radial dengan memanggil SKFieldNode.CreateRadialGravityField(), dan sebagainya.

SKFieldNode juga memiliki properti untuk mengontrol atribut bidang seperti kekuatan bidang, wilayah bidang, dan redaman kekuatan bidang.

Bidang Spring

Misalnya, kode berikut membuat bidang spring dan menambahkannya ke adegan:

SKFieldNode fieldNode = SKFieldNode.CreateSpringField ();
fieldNode.Enabled = true;
fieldNode.Position = new PointF (Size.Width / 2, Size.Height / 2);
fieldNode.Strength = 0.5f;
fieldNode.Region = new SKRegion(Frame.Size);
AddChild (fieldNode);

Anda kemudian dapat menambahkan sprite dan mengatur propertinya PhysicsBody sehingga bidang fisika akan memengaruhi sprite, seperti yang dilakukan kode berikut saat pengguna menyentuh layar:

public override void TouchesBegan (NSSet touches, UIEvent evt)
{
    var touch = touches.AnyObject as UITouch;
    var pt = touch.LocationInNode (this);
    var node = SKSpriteNode.FromImageNamed ("TinyBanana");
    node.PhysicsBody = SKPhysicsBody.Create (node.Texture, node.Size);
    node.PhysicsBody.AffectedByGravity = false;
    node.PhysicsBody.AllowsRotation = true;
    node.PhysicsBody.Mass = 0.03f;
    node.Position = pt;
    AddChild (node);
}

Ini menyebabkan pisang berosilasi seperti musim semi di sekitar simpul lapangan:

The bananas oscillate like a spring around the field node

Bidang Gravitasi Radial

Menambahkan bidang yang berbeda serupa. Misalnya, kode berikut membuat bidang gravitasi radial:

SKFieldNode fieldNode = SKFieldNode.CreateRadialGravityField ();
fieldNode.Enabled = true;
fieldNode.Position = new PointF (Size.Width / 2, Size.Height / 2);
fieldNode.Strength = 10.0f;
fieldNode.Falloff = 1.0f;

Ini menghasilkan bidang gaya yang berbeda, di mana pisang ditarik secara radial tentang bidang :

The bananas are pulled radially around the field