2016-04-27 10 views
0

Ich habe mit SpriteKit herum gespielt, weil ich ein Spiel in einem Jahr erstellen will, aber ich habe in letzter Zeit einige Geschwindigkeitsbumps in einer seltsamen Form gefangen.iOS SpriteKit Koordinaten Probleme mit Ursprung

Das ist also das Problem.

Ich habe ein reguläres SpriteKit-Projekt erstellt und einige Standardcodes geändert. Ich habe einen SKNode mit der Größe 20,20 (Quadrat) zur Position 0,0 oder CGPointZero hinzugefügt.

Das Ding ist, meine angezeigte Entschließung ist 1024x768 und wenn ich meine APP in der Landschaft laufen lasse, kann ich mein Quadrat im 0,0 Punkt nicht sehen, ich kann es nur sehen, wenn ich die Y-Position auf 100 setze

myNode.position = CGPoint(x: 0, y: 100) 

und wenn ich meine app im Portrait-Modus laufen, die Y-Achse, wenn festgelegt, wird die 0 auf der linken Ecke, aber ich kann den Platz wieder einmal nicht sehen, es sei denn, ich meine X-Position gesetzt bis 300 wie

myNode.position = CGPoint(x: 300, y: 0) 

Warum nicht einfach kann ich den Knoten auf der 0,0-Position sehen, egal welche Bildschirmausrichtung ich bin zugewandt.

geht hier meine volle Klasse

import SpriteKit 

class GameScene: SKScene { 

    let myNode = SKSpriteNode() 

    override func didMoveToView(view: SKView) { 

     myNode.size = CGSize(width: 20, height: 20) 
     myNode.position = CGPoint(x: 0, y: 0) 
     myNode.color = UIColor.blackColor() 
     myNode.anchorPoint = CGPointZero 
     myNode.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 20.0, height: 20.0)) 
     myNode.physicsBody?.affectedByGravity = false 
     myNode.physicsBody?.categoryBitMask = 1 
     myNode.physicsBody?.collisionBitMask = 0 
     myNode.zPosition = 1 
     addChild(myNode) 



    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     for touch in touches { 
      let moveToY = touch.locationInNode(self).y 
      myNode.runAction(SKAction.moveToY(moveToY, duration: 5)) 
     } 


    } 

    override func update(currentTime: CFTimeInterval) { 
     //print("Position Y: \(self.myNode.position.y)") 
    } 


} 
+1

Wo erwartet Sie Ihr Knoten? Standardmäßig befindet sich der Ursprung Ihrer Szene in der unteren linken Ecke. Dies unterscheidet sich von UIKit, wo der Ursprung die obere linke Ecke wäre. Aber auch die Dimensionen Ihrer Szene sind wahrscheinlich größer als das Gerät, auf dem Sie testen. – beyowulf

+0

Ich würde erwarten, so sehen Sie es in der unteren linken Ecke. Wie kann ich die Szenenmaße auf die Größe des Bildschirms einstellen, egal welches Gerät ich verwende? Ich habe auf iPhone 6 getestet, iPhone 6 Plus e und das Problem erhalten –

Antwort

2

Sie können die Szenengröße in viewWillLayoutSubviews() in Ihrem View-Controller erstellen und festzulegen.

override func viewWillLayoutSubviews() {  
    super.viewWillLayoutSubviews() 
    let skView = self.view as! SKView 
    let scene = YourGameScene(size: self.view.bounds.size) 
    scene.scaleMode = .AspectFill 
    skView.presentScene(scene) 
} 

Hoffe das hilft.
Bearbeiten: Legen Sie die Szenengröße nicht in viewDidLoad() fest, weil die Ansichtsgröße nicht korrekt ist, wenn das Telefon die Ausrichtung geändert hat. Stellen Sie die Szenengröße in viewWillLayoutSubviews() sicher, dass die Ansichtsgröße basierend auf der Ausrichtung des Telefons korrekt angepasst wird.

+0

Ooohhhh .... Das ist es. Ich setze seine Größe in der regulären viewDidLoad() statt der Methode, die Sie gesagt haben. Ich werde es so versuchen, wie du es gesagt hast, aber ich bin sicher, es wird funktionieren. Ich werde dies als die richtige Antwort festlegen. Vielen Dank;) –

+0

@ user3636256 Sie sind herzlich willkommen. – TangZijian

Verwandte Themen