2016-09-21 3 views
1

Ich verwende programmgesteuert SKTileMapNode. Der Code ist C# (Xamarin.iOS), sollte aber für jeden Swift/ObjC-Entwickler lesbar sein.Sortierung des isometrischen SKTileMapNode falsch?

Das Problem ist, dass die Sortierung der Fliesen in isometrischer Projektion falsch zu sein scheint und ich kann nicht sehen warum. Um zu testen, hat die Karte 1 Zeile und 5 Spalten.

siehe Screenshot:

Sorting

Die Fliesen bei 0 | 0 und 2 | 0 sind vor den anderen. Die Pyramidenstil-Kachel bei 4 | 0 wird jedoch korrekt vor der bei 3 | 0 gezeichnet.

Ich bin mit zwei einfachen Fliesen:

Tile1 Tile2

Die erste hat eine Auflösung von 133x83px und das zweite ist 132x131px

Dies ist, wie es in mit Ziegeln aussieht und was ich zu reproduzieren versuchen:

Tiled

Die Fliese Karte ist Setup und zu der Szene hinzugefügt, um den folgenden Code:

var tileDef1 = new SKTileDefinition (SKTexture.FromImageNamed ("landscapeTiles_014")); 
var tileDef2 = new SKTileDefinition (SKTexture.FromImageNamed ("landscapeTiles_036")); 

var tileGroup1 = new SKTileGroup (tileDef1); 
var tileGroup2 = new SKTileGroup (tileDef2); 

var tileSet = new SKTileSet (new [] { tileGroup1, tileGroup2 }, SKTileSetType.Isometric); 

var tileMap = SKTileMapNode.Create(tileSet, 5, 2, new CGSize (128, 64)); 

tileMap.Position = new CGPoint (0, 0); 

tileMap.SetTileGroup (tileGroup1, 0, 0); 
tileMap.SetTileGroup (tileGroup2, 1, 0); 
tileMap.SetTileGroup (tileGroup1, 2, 0); 
tileMap.SetTileGroup (tileGroup2, 3, 0); 
tileMap.SetTileGroup (tileGroup2, 4, 0); 

tileMap.AnchorPoint = new CGPoint (0, 0); 
Add (tileMap); 

Wenn die erste Verdacht auf eine falsche Kachelgröße. Die zum Initialisieren der Kachelkarte (128 | 64) verwendete Kachelgröße ist die Größe der rautenförmigen Basis der Kachel. Wenn Sie eine flache Kachel verwenden, ist dies identisch mit der Texturgröße. Für Fliesen mit einer Höhe unterscheidet es sich. Das Ändern der Kachelgröße wirkt sich jedoch auf die Ausrichtung der Kacheln aus, und die Größe, die ich verwende, ist dieselbe wie in Tiled und liefert das korrekte Ergebnis, so dass dies nicht der Täter sein kann.

Was mache ich falsch oder wo denke ich falsch?

+0

"Was mache ich falsch oder wo bin ich falsch?" Vermutlich hat Apple die erste Version einer neuen API getestet. – Confused

+0

Leider scheint Apple sehr wenig interne Tests von Sprite Kit und SceneKit durchzuführen. Jede Version bringt neue Funktionen und neue Fehler. Und das ist so lange so, dass nur wenige Anwendungen ihre API-Betas testen. Sie nehmen nur an, dass sie kaputt gemacht werden und warten und sich mit älteren Sachen fortbewegen. Und ..: Sie sind schrecklich auf Bug-Berichte zu reagieren ... und ihre Fehlerbericht System ist ein Albtraum zu verwenden. Es macht Web 1.0-Sites auf dem neuesten Stand. – Confused

+0

Nur neugierig, was ist Ihr 'ignoresSiblingOrder' gesetzt? –

Antwort

1

Ich habe keine Antwort auf das Hauptproblem, aber die Kachelgröße, die Sie zum Initialisieren der Karte verwenden (128 | 64), ist die Größe der Basiskachel, die zur Konvertierung isometrischer Koordinaten in den tatsächlichen orthogonalen Raum verwendet wird .

Wenn Sie diese Größe in Tiled ändern, wirkt sich dies auf die Größe des Positionierungsgitters aus. Sie können einen ähnlichen Effekt im integrierten Kachelkarteneditor von Xcode sehen (oder in jedem anderen isometrischen Kachelkarteneditor, den ich vermute).

+0

Wahr. Das trägt einfach zu meinem Verdacht bei, dass wir hier einen Fehler haben. – Krumelur

Verwandte Themen