Was ist mit dem Koordinatensystem in diesem SpriteKit Setup falsch?

8

Ich habe ein SKView erstellt, das eine SKScene-Unterklasse wie folgt darstellt:

%Vor%

Um den Ursprung des Koordinatensystems zu sehen, füge ich der Szene ein kleines 10x10-Quadrat hinzu.

%Vor%

Sie können das grüne Quadrat in der unteren linken Ecke sehen:

Nach dem, was ich dachte, ist das SpriteKit-Koordinatensystem so beschaffen, dass der Ursprung immer im Zentrum liegt. Aber in der Szene ist der Ursprung in der unteren linken Ecke. Wenn ich einen untergeordneten Knoten zu {0,0} hinzufüge, erscheint er auch in der unteren linken Ecke.

Wenn ich einen SKSpriteNode hinzufüge und ihn {0,0} in der Szene positioniere, erscheint er in der unteren linken Ecke. Aber es ist zentriert um den Szenenursprung in der unteren linken Ecke (abgeschnitten von der Hälfte nach links und halb nach unten).

Aber jetzt wird es noch verwirrender. Wenn ich einen SKSpriteNode zu einem anderen SKSpriteNode hinzufüge, wird das Sub-Sprite im Elternteil zentriert.

Bedeutet das, dass das Szenen-Koordinatensystem anders arbeitet als das Sprite-Koordinatensystem?

Wiederholung:

  • Wenn ich ein Sprite in der Szene auf {0,0} positioniere, erscheint es unten links, abgeschnitten 50% (um den Ursprung zentriert).
  • Wenn ich ein Sprite in einem Sprite auf {0,0} positioniere, erscheint es im Sprite zentriert.

Ist meine Szene falsch konfiguriert oder funktioniert das so?

    
openfrog 31.12.2013, 14:05
quelle

3 Antworten

15

So funktioniert es. Alle OpenGL-Ansichten (zumindest die 2D-Ansichten) haben ihren Ursprung in der unteren linken Ecke.

Die Position deiner Sprites ist auch korrekt. Beide liegen standardmäßig bei 0,0. Die Textur der Sprites wird basierend auf dem AnchorPoint-Faktor relativ zur Knotenposition gezeichnet. Der Standardwert ist 0,5, 0,5 platziert die Textur an der Position des Knotens.

Sie können den AnchorPoint der Szene in 0.5.0.5 ändern, wodurch die Sprites in die Mitte der Szene verschoben werden. Sie können auch den AnchorPoint des Sprites ändern, obwohl dies nicht empfohlen wird, da dies Auswirkungen auf die Rotation, die Skalierung, die Kollisionserkennung und die Position des untergeordneten Knotens hat.

    
LearnCocos2D 31.12.2013, 14:15
quelle
3

Sie können diesen Code zu GameViewController.swift hinzufügen:

%Vor%     
nmokkary 13.06.2015 11:12
quelle
0

Was ich getan habe, war, die Größe der SKScene, die angezeigt werden soll, auf bounds.size des Viewcontrollers festzulegen, aus dem die Szene angezeigt werden soll. Etwas wie das:

%Vor%

Ich hoffe, das hat auch für dich funktioniert, wenn ich hier Fehler gemacht habe, lass es mich auch wissen :)

    
Septronic 19.10.2015 11:46
quelle