2016-04-27 3 views
0

Я играл с SpriteKit, потому что я хочу создать игру через год, но в последнее время я обнаружил некоторые удары по скорости в странной форме.iOS SpriteKit Координирует проблемы с источником

Так что это проблема.

Я создал обычный проект SpriteKit, и я изменил код по умолчанию. Я добавил SKNode размером 20,20 (квадрат) в положение 0,0 или CGPointZero.

Дело в том, что мое отображаемое разрешение 1024x768, и если я запускаю свое приложение в ландшафте, я не вижу своего квадрата в 0,0-точке, я могу видеть его, только если я установил Y-позицию на 100, например

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

и если я бегу мое приложение в портретном режиме, ось Y, если фиксировано, то 0 будет на левом углу, но я не могу увидеть квадрат еще раз, если я не установить свою позицию X до 300, например

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

Почему я не могу просто увидеть узел в позиции 0,0 независимо от того, какую ориентацию экрана я облицовка.

Здесь идет мой полный класс

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

Где вы ожидаете, что ваш узел будет? По умолчанию происхождение вашей сцены находится в левом нижнем углу. Это отличается от UIKit, где происхождение будет левым верхним. Но размеры вашей сцены скорее всего больше, чем у устройства, на котором вы тестируете. – beyowulf

+0

Я бы ожидал увидеть его в левом нижнем углу. Как я могу установить размеры сцены в размере экрана, независимо от того, какое устройство я использую? Я тестировал на iPhone 6, iPhone 6 Plus e и проблема поддерживала –

ответ

2

Вы можете создать и установить размер сцены в viewWillLayoutSubviews() в контроллере представления.

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) 
} 

Надеюсь, это поможет.
Редактировать: Не устанавливайте размер сцены в viewDidLoad(), так как размер изображения будет неправильным, если телефон изменил ориентацию. Установите размер сцены в viewWillLayoutSubviews(), чтобы размер изображения был правильно настроен на основе ориентации телефона.

+0

Ooohhhh .... Вот именно. Я устанавливаю его размер в обычный viewDidLoad() вместо метода, который вы сказали. Я попробую так, как вы сказали, но я уверен, что это сработает. Я поставлю это как правильный ответ. Большое спасибо;) –

+0

@ user3636256 добро пожаловать. – TangZijian

Смежные вопросы