SpriteKit v Xamarin.iOS

SpriteKit, 2D grafická architektura od Společnosti Apple, má některé zajímavé nové funkce v iOSu 8 a OS X Yosemite. Patří mezi ně integrace s SceneKit, podpora shaderu, osvětlení, stíny, omezení, normální generování map a vylepšení fyziky. Zejména nové fyzikální funkce usnadňují přidání realistických efektů do hry.

Fyzikální tělesa

SpriteKit obsahuje rozhraní API pro 2D, pevnou fyziku těla. Každý sprit má přidružené fyzikální tělo (SKPhysicsBody), které definuje fyzikální vlastnosti, jako je hmotnost a tření, stejně jako geometrie těla ve fyzikálním světě.

Vytvoření těla fyziky z textury

SpriteKit teď podporuje odvození fyzikálního těla spritu z jeho textury. To usnadňuje implementaci kolizí, které vypadají přirozeněji.

Všimněte si například následující kolize, jak banán a opice kolidují téměř na povrchu každého obrázku:

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

SpriteKit umožňuje vytvoření takového fyzikálního těla pomocí jednoho řádku kódu. Jednoduše zavolejte SKPhysicsBody.Create s texturou a velikostí: sprit. PhysicsBody = SKPhysicsBody.Create (sprite. Textura, sprit. Velikost);

Alfa prahová hodnota

Kromě jednoduchého PhysicsBody nastavení vlastnosti přímo na geometrii odvozenou z textury mohou aplikace nastavit a alfa prahovou hodnotu pro řízení způsobu odvození geometrie.

Prahová hodnota alfa definuje minimální alfa hodnotu, kterou musí pixel zahrnout do výsledného fyzikálního těla. Například následující kód má za následek trochu jiné tělo fyziky:

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

Účinek úprav alfa prahové hodnoty jako tato jemně naladí předchozí kolize, aby opice při kolidování s banánem:

The monkey falls over when colliding with the banana

Fyzika polí

Dalším skvělým doplňkem SpriteKit je nová podpora fyziky. Díky tomu můžete přidat například pole vortex, radiální závažnost a pole pružiny, abyste mohli pojmenovat jen pár.

Fyzika pole jsou vytvořena pomocí SKFieldNode třídy, která je přidána do scény stejně jako jakékoli jiné SKNode. Existují různé metody SKFieldNode výroby pro vytváření různých fyzikálních polí. Jarní pole můžete vytvořit voláním SKFieldNode.CreateSpringField(), radiální závažnost pole voláním SKFieldNode.CreateRadialGravityField()atd.

SKFieldNode má také vlastnosti pro řízení atributů pole, jako je síla pole, oblast pole a ztlumení sil pole.

Spring Field

Například následující kód vytvoří pole spring a přidá ho do scény:

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

Pak můžete přidat sprity a nastavit jejich PhysicsBody vlastnosti tak, aby fyzikální pole ovlivnilo sprity, jak to dělá následující kód, když se uživatel dotkne obrazovky:

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

To způsobí, že banány oscilují jako pružina kolem uzlu pole:

The bananas oscillate like a spring around the field node

Paprskové tísní pole

Přidání jiného pole je podobné. Například následující kód vytvoří radiální pole závažnosti:

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;

Výsledkem je jiné silové pole, kde se banány vytáhnou radiálně o poli:

The bananas are pulled radially around the field