2016-10-09 1 views
1

Ich erstelle eine Anwendung in SpriteKit mit C# auf Xamarin, und ich versuche, "Tiles" korrekt auf einer 1024x768-Szene zu positionieren. Hier ist mein Code für die Fliesen.Fixing Sizing in Spritekit

 public class GameScene : SKScene 
{ 
    Tile tile1 = new Tile(320, 320, UIColor.Blue); 
    Tile tile2 = new Tile(320, 320, UIColor.Blue); 
    Tile tile3 = new Tile(320, 320, UIColor.Blue); 
    Tile tile4 = new Tile(320, 320, UIColor.Blue); 
    public GameScene(IntPtr handle) : base(handle) 
    { 
    } 

    public override void DidMoveToView(SKView view) 
    { 




     tile1.numberOfTiles = 4; 
     tile1.tileNumber = 1; 
     tile1.setTilePosition(); 

     tile2.numberOfTiles = 4; 
     tile2.tileNumber = 2; 
     tile2.setTilePosition(); 

     tile3.numberOfTiles = 4; 
     tile3.tileNumber = 3; 
     tile3.setTilePosition(); 

     tile4.numberOfTiles = 4; 
     tile4.tileNumber = 4; 
     tile4.setTilePosition(); 

     this.AddChild(tile1.tile); 
     this.AddChild(tile2.tile); 
     this.AddChild(tile3.tile); 
     this.AddChild(tile4.tile); 

     Console.WriteLine(this.Frame.Size); 
    } 

    public override void TouchesBegan(NSSet touches, UIEvent evt) 
    { 

    } 

    public override void Update(double currentTime) 
    { 
     // Called before each frame is rendered 
    } 
} 

Wie Sie sehen können, sind die Kacheln 320, 320 groß. Die Positionen werden ebenfalls im gleichen Verhältnis eingestellt, was korrekt sein sollte. Dies ist jedoch der Ausgang im Simulator

enter image description here

Wie Sie sehen können, sind die Fliesen viel zu groß auf dem Bildschirm zu passen, und die Positionen sind falsch. Wie würde ich das lösen? Wenn Code benötigt wird, um dies zu lösen, sind swift oder C# beide in Ordnung. Jede Hilfe wäre willkommen.

Antwort

1

Das macht genau das, was Sie programmieren.

  • 1.

    Sie über Aspekt Modus zu lernen, Sie machen eine 3: 4-Szene, aber versuchen, es in einem 9.16-Gerät zu machen, Sie haben vier Möglichkeiten:

.AspectFill: Dies ist standardmäßig in XCodes Vorlage und skaliert die Szene zu den am weitesten Grenzen, während Seitenverhältnis beibehalten wird. Diese führt über die engere Grenzen des Gerätes an Stelle von schwarze Ränder an den äußersten Grenzen in Beschneiden

.AspectFit: Dies wird die Szene bis zu den engsten Grenzen skalieren, während Seitenverhältnis beibehalten wird. Dies wird in schwarze Ränder an den am weitesten Grenzen des Gerätes anstatt Zuschneiden auf die näher Grenzen führen

.Fill: Dies wird die Szene auf beiden Seiten skalieren, wird aber Seitenverhältnis nicht beibehalten, was Sie wird nicht beschnitten oder schwarze Ränder, sondern wird über eine fett- oder schlank

.ResizeFill in Verzerrung der Bilder ergeben. Dies wird die Größe der Szene-Koordinaten zu der der Ansicht es in ist das heißt, es ist keine Skalierung und bei größeren Geräten t Die Sprites werden kleiner angezeigt, mit mehr Sichtbarkeit für den gesamten Inhalt der Szenen .

  • 2.:

    Sie müssen verstehen, dass der Standard-Ursprung für die Szene die linke untere Ecke ist, während alle Kinder in der Szene in der Mitte haben. Beim Plotten Ihrer Punkte müssen Sie dies in die Tat umsetzen.

nun von dem, was ich hier sehe, haben Sie .ResizeFill los, und Sie gehen davon aus Ursprung der Szene unten links ist.Was passiert, ist, dass deine Szene auf die Größe des IPhone 5 angepasst wird, und aufgrund dieser Größenänderung sind deine Kacheln jetzt von der Position entfernt, da sich der Mittelpunkt der Szene von dem Punkt (512,384) zum Punkt (160,284) geändert hat zu ass/subtrahieren weniger als Sie am Telefon würden, als würden Sie das iPad.

ist Mein Vorschlag .AspectFill für ein ScaleMode zu verwenden, und die Szenen zu setzen AnchorPoint bis (0.5,0.5)

+0

scheint tatsächlich wie das, was Sie mir gesagt, vor kurzem ist Apple nun standardmäßig tun, die Szene Anker setzt 0.5 0.5. Ich fange tatsächlich an, Anker 0,5 zu mögen, bevor ich 0, 0 bevorzugte. Sie änderten aber auch die Standardgröße der Szene zu iPhone 6/7 Entschließung, die keinen Sinn für ein Universalspiel macht. – crashoverride777

+0

@ crashoverride777 Warum würde es keinen Sinn ergeben? Das sind jetzt Ihre Gerätegrößen, iphone 5 ist alt – Knight0fDragon

+0

Die Standardeinstellung davor war 768 * 1024. Die neuen Einstellungen sind 750 * 1334, was keinen Sinn macht, wenn Sie versuchen, ein universelles Spiel zu machen, das auch auf iPads läuft. – crashoverride777