Aracılığıyla paylaş


Xamarin.iOS'ta SpriteKit

Apple'ın 2B grafik çerçevesi SpriteKit, iOS 8 ve OS X Yosemite'da bazı ilginç yeni özelliklere sahiptir. Bunlar Arasında SceneKit ile tümleştirme, gölgelendirici desteği, aydınlatma, gölgeler, kısıtlamalar, normal harita oluşturma ve fizik geliştirmeleri yer alır. Özellikle, yeni fizik özellikleri bir oyuna gerçekçi efektler eklemeyi çok kolaylaştırır.

Fizik Gövdeleri

SpriteKit, 2B, katı vücut fiziği API'sini içerir. Her sprite, kütle ve sürtünme gibi fizik özelliklerini ve fizik dünyasındaki vücudun geometrisini tanımlayan ilişkili bir fizik gövdesine (SKPhysicsBody) sahiptir.

Dokudan Fizik Gövdesi Oluşturma

SpriteKit artık bir spritenin fizik gövdesinin dokusundan türetilmesine destek oluyor. Bu, daha doğal görünen çakışmaları uygulamayı kolaylaştırır.

Örneğin, aşağıdaki çarpışmada muz ve maymunun neredeyse her görüntünün yüzeyinde nasıl çarpıştağına dikkat edin:

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

SpriteKit, tek bir kod satırıyla böyle bir fizik gövdesi oluşturmayı mümkün kılar. Doku ve boyut ile çağırmanız SKPhysicsBody.Create yeterlidir: sprite. PhysicsBody = SKPhysicsBody.Create (sprite. Doku, sprite. Boyut);

Alfa Eşiği

Özelliği doğrudan dokudan türetilen geometriye ayarlamaya PhysicsBody ek olarak, uygulamalar geometrinin nasıl türetilmiş olduğunu denetlemek için ve alfa eşiğini ayarlayabilir.

Alfa eşiği, bir pikselin sonuçta elde edilen fizik gövdesine dahil edilmesi gereken en düşük alfa değerini tanımlar. Örneğin, aşağıdaki kod biraz farklı bir fizik gövdesine neden olur:

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

Alfa eşiğini ayarlamanın etkisi, önceki çarpışmayı ince ayarlar, böylece maymun muzla çarpışırken devrilir:

The monkey falls over when colliding with the banana

Fizik Alanları

SpriteKit'e bir diğer harika ekleme de yeni fizik alanı desteğidir. Bunlar yalnızca birkaçını adlandırmak için girdap alanları, radyal yerçekimi alanları ve yay alanları gibi öğeleri eklemenize olanak sağlar.

Fizik alanları, aynı diğer SKNodegibi bir görünüme eklenen SKFieldNode sınıfı kullanılarak oluşturulur. Farklı fizik alanları oluşturmak için çeşitli SKFieldNode fabrika yöntemleri vardır. çağırarak SKFieldNode.CreateSpringField()bir yay alanı oluşturabilirsiniz, çağırarak SKFieldNode.CreateRadialGravityField()bir radyal yerçekimi alanı, vb.

SKFieldNode ayrıca alan gücü, alan bölgesi ve alan kuvvetlerinin hafifletilmesi gibi alan özniteliklerini denetlemek için özelliklere sahiptir.

Bahar Tarlası

Örneğin, aşağıdaki kod bir yay alanı oluşturur ve sahnesine ekler:

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);

Ardından sprite ekleyebilir ve özelliklerini, kullanıcı ekrana dokunduğunda aşağıdaki kodda olduğu gibi fizik alanının sprite'leri etkilemesi için ayarlayabilirsiniz PhysicsBody :

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);
}

Bu, muzların alan düğümü çevresinde bir yay gibi salınmalarına neden olur:

The bananas oscillate like a spring around the field node

Radyal Yerçekimi Alanı

Farklı bir alan eklemek benzerdir. Örneğin, aşağıdaki kod bir radyal yerçekimi alanı oluşturur:

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;

Bu, muzların alan hakkında radyal olarak çekildiği farklı bir kuvvet alanına neden olur:

The bananas are pulled radially around the field