SpriteKit v Xamarin.iOS

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

Fyzikální tělesa

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

Vytvoření fyzikálního těla z textury

SpriteKit teď podporuje odvození fyzikálního tělapritu z jeho textury. Díky tomu je snadné implementovat kolize, které vypadají přirozeněji.

Všimněte si například v následující kolizi, 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 s jedním řádkem kódu. Jednoduše volejte SKPhysicsBody.Create texturu a velikost: sprite. PhysicsBody = SKPhysicsBody.Create (sprite. Textura, sprite. 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í být pixel zahrnut do výsledného fyzikálního těla. Například následující kód má za následek mírně odlišné tělo fyziky:

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

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

The monkey falls over when colliding with the banana

Fyzika – pole

Dalším skvělým doplňkem SpriteKit je nová podpora fyziky. To vám umožní přidat věci, jako jsou pole vortex, radiální závažnost polí 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 všechny ostatní 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 útlum 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);

Potom můžete přidat sprites a nastavit jejich PhysicsBody vlastnosti tak, aby fyzikální pole ovlivnilo sprites, protože následující kód dělá, 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 osciluje 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ří paprskové pole s závažností:

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é pole síly, kde se banány vytahují radiálně o poli:

The bananas are pulled radially around the field