Udostępnij za pośrednictwem


SpriteKit w środowisku Xamarin.iOS

SpriteKit, struktura grafiki 2D firmy Apple, ma kilka ciekawych nowych funkcji w systemach iOS 8 i OS X Yosemite. Obejmują one integrację z zestawem SceneKit, obsługą cieniowania, oświetleniem, cieniami, ograniczeniami, normalnym generowaniem map i ulepszeniami fizyki. W szczególności nowe funkcje fizyki sprawiają, że bardzo łatwo jest dodać realistyczne efekty do gry.

Ciała fizyki

Zestaw SpriteKit zawiera interfejs API fizyki ciała 2D. Każdy sprite ma skojarzone ciało fizyki (SKPhysicsBody), które definiuje właściwości fizyki, takie jak masa i tarcie, a także geometrię ciała w świecie fizyki.

Tworzenie ciała fizyki na podstawie tekstury

SpriteKit obsługuje teraz wyprowadzanie ciała fizyki sprite z jego tekstury. Ułatwia to implementowanie kolizji, które wyglądają bardziej naturalnie.

Zwróć na przykład uwagę na następującą kolizję, w jaki sposób banan i małpa zderzają się niemal na powierzchni każdego obrazu:

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

SpriteKit sprawia, że tworzenie takiego ciała fizyki jest możliwe za pomocą jednego wiersza kodu. Wystarczy wywołać SKPhysicsBody.Create teksturę i rozmiar: sprite. PhysicsBody = SKPhysicsBody.Create (sprite). Tekstura, sprite. Rozmiar);

Próg alfa

Oprócz prostego PhysicsBody ustawiania właściwości bezpośrednio na geometrię pochodzącą z tekstury, aplikacje mogą ustawiać i progi alfa w celu kontrolowania sposobu uzyskiwania geometrii.

Próg alfa definiuje minimalną wartość alfa, która musi zostać uwzględniona w wynikowym ciele fizyki. Na przykład poniższy kod powoduje nieco inną fizykę:

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

Efekt podkręcania progu alfa jak ten grzywny melodie poprzedniej kolizji, tak że małpa przewada się podczas kolizji z bananem:

The monkey falls over when colliding with the banana

Pola fizyki

Innym doskonałym dodatkiem do SpriteKit jest obsługa nowego pola fizyki. Umożliwiają one dodawanie elementów, takich jak pola wirowe, pola grawitacji promieniowej i pola sprężyny, aby wymienić tylko kilka.

Pola fizyki są tworzone przy użyciu klasy SKFieldNode, która jest dodawana do sceny tak samo jak w przypadku innych SKNode. Istnieje wiele metod fabrycznych, aby SKFieldNode tworzyć różne pola fizyki. Pole sprężynowe można utworzyć, wywołując pole promieniowej grawitacji, wywołując SKFieldNode.CreateSpringField()SKFieldNode.CreateRadialGravityField()metodę i tak dalej.

SKFieldNode Ma również właściwości do kontrolowania atrybutów pól, takich jak siła pola, region pola i tłumienie sił pól.

Pole spring

Na przykład poniższy kod tworzy pole spring i dodaje je do sceny:

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

Następnie można dodać sprites i ustawić ich PhysicsBody właściwości, aby pole fizyki miało wpływ na sprites, ponieważ poniższy kod wykonuje, gdy użytkownik dotyka ekranu:

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

Powoduje to, że banany oscylują jak sprężyna wokół węzła pola:

The bananas oscillate like a spring around the field node

Pole grawitacji promieniowej

Dodawanie innego pola jest podobne. Na przykład poniższy kod tworzy pole grawitacji promieniowej:

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;

Skutkuje to innym polem siłowym, gdzie banany są ściągane promieniowo o polu:

The bananas are pulled radially around the field