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:
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:
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:
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: