SpriteKit v Xamarin.iOS

SpriteKit, 2D grafický rámec od společnosti Apple, má několik zajímavých nových funkcí v iOSu 8 a OS X Yosemite. Patří mezi ně integrace s SceneKitem, podpora shaderu, osvětlení, stíny, omezení, normální generování map a vylepšení fyziky. Konkrétně nové fyzikální funkce velmi usnadňuje přidání realistických efektů do hry.

Fyzikální těla

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

Vytvoření fyzického těla 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 v následující kolizi, jak banány a šátky koliduje téměř na povrchu každého obrázku:

Banán a opici se srazí téměř na povrchu každého obrázku.

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

Prahová hodnota alfa

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

Prahová hodnota alfa definuje minimální alfa hodnotu, která musí pixel obsahovat ve výsledném fyzickém těle. Například následující kód má za výsledek trochu odlišné fyzikální tělo:

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

Účinek úpravy prahové hodnoty alfa, jako je tato, vyladění předchozí kolizí tak, aby při kolizích s banánem spadla zkameně:

Při kolize s banánem přepadne opici

Physics Fields

Dalším skvělým doplněním sady SpriteKit je nová podpora fyzikálního pole. Ty vám umožňují přidat například pár věcí, jako jsou například řídká pole, pole paprskové závažnosti a pole spring.

Fyzikální pole se vytvářejí pomocí třídy SKFieldNode, která se přidává do scény stejně jako jakákoli jiná SKNode . Existují různé metody továrny pro SKFieldNode vytváření různých fyzikálních polí. Pole spring můžete vytvořit voláním , radiálního pole SKFieldNode.CreateSpringField() těžiště voláním SKFieldNode.CreateRadialGravityField() atd.

SKFieldNode má také vlastnosti pro řízení atributů polí, jako je síla pole, oblast pole a přerušování vynutí 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 vlastnosti tak, aby fyzikální pole ovlivnilo sprites, jak to dělá následující kód, když se uživatel dotýká PhysicsBody 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 spring kolem uzlu pole:

Banány oscilují jako spring kolem uzlu pole.

Radiální pole závažnosti

Přidání jiného pole je podobné. Například následující kód vytvoří paprskové 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é pole síly, kde jsou banány vytaženy radiálně kolem pole:

Banány se vytahuje radiálně kolem pole.