2016-08-03 38 views
0

Ich mache dieses grundlegende Weltraum-Shooter-Spiel, aber ich kann nicht die X-Koordinaten von Feinden richtig. Manchmal gehen sie aus dem Bildschirm - oder bleiben halb innen an den Rändern. Wie kann ich das dauerhaft beheben, unabhängig davon, auf welchem ​​iPhone die App läuft?Objekte positionieren in SpriteKitScene

hier ist der Code für meine Positionierung: (. Beachten Sie, dass Ei Name meines Feindes ist es Funktion, die ich für den Aufruf es jedes Mal gemacht)

func egg() { 
     var egg = SKSpriteNode(imageNamed: list[Int(arc4random_uniform(6))]) 
     var min = self.size.width/8 
     var max = self.size.width 
     var point = UInt32(max - min) 


     egg.position = CGPoint(x: CGFloat(arc4random_uniform(point)), y: self.size.height) 
     let action = SKAction.moveToY(-100, duration: 2) 
     let actionDone = SKAction.removeFromParent() 

     egg.runAction(SKAction.sequence([action, actionDone])) 

    } 

Antwort

0

Es gibt mehrere Orte, wo die Dinge gehen können seitwärts.

• Zunächst scheint es, als ob Sie annehmen, dass der Ankerpunkt Ihrer Szene bei (0,0) liegt. Wenn dies nicht der Fall ist (die Standarddatei .sks hat jetzt beispielsweise einen Ankerpunkt bei (0,5,0,5)), könnte dies erklären, warum Ihre Feinde niemals auftauchen. Als erstes würde ich den Ankerpunkt meiner Szene überprüfen.

• Wenn Sie diese Eier zu einem anderen Knoten außer der Szene selbst hinzufügen, "erben" diese Eier die Übersetzung, Drehung und Skalierung, die ihr übergeordneter Knoten hat. Mit anderen Worten, wenn Sie ein Ei bei (20,20) zu einem Knoten bei (30,30) hinzufügen, erscheint es bei (50,50). Stellen Sie sicher, dass der "Kontext" der Eier ist, was Sie erwarten.

• Ihre "Min" - und "Max" -Werte wirken etwas merkwürdig. Das "Min" sieht so aus, als ob es um 1/8 der Bildschirmgröße auf der linken Seite "eingerückt" werden soll, aber Sie werden es nicht auf der rechten Seite einrücken. Vielleicht ist es das, was du vorhast, aber wenn du vorhast, dass sie ein symmetrisches Verhalten haben, dann solltest du "max" um ein Achtel zurückstellen. Außerdem fügst du das Achtel nicht wieder in den x-Wert ein, wenn du die Position bestimmst, also könnte das ein Ei bei x = 0 halten. Dies würde erklären, warum deine Sprites manchmal "halb innen am Rand" sind.

• Die Größe Ihrer Szene entspricht nicht unbedingt der Bildschirmgröße. Dies hängt stark vom "scaleMode" Ihres SKScene ab. Weitere Informationen hierzu finden Sie in der Dokumentation. Der ScaleMode teilt SpriteKit jedoch kurz mit, wie eine Szene gerendert wird, die nicht der Größe oder dem Seitenverhältnis der Ansicht entspricht. Dehnt es sich aus? Schneidet es? Ist es Briefkasten? Wenn Sie eine quadratische 400x400-Szene auf einem 1024x768-Bildschirmgerät ausführen, müssen Sie wissen, was Sie meinen. Zeichnet es das 400x400 in der Mitte des Bildschirms und lässt Sachen "außerhalb" dieses Rect sehen? Oder skaliert es, um den Bildschirm zu füllen und oben und unten abzuschneiden? Oder skaliert es bis FIT auf den Bildschirm, so dass ober- und unterhalb dessen Platz ist, der technisch außerhalb der Szene liegt? Oder skaliert es und zerquetscht die Szene, um genau zu passen? Wenn Ihre Szene nicht genau mit dem Bildschirm Ihres Geräts übereinstimmt, könnte dies erklären, warum die Dinge nicht gut spielen und innerhalb der sichtbaren Grenzen bleiben.