2015-08-03 2 views
2

Я работаю с быстрым и SpriteKit, и у меня проблема с тем, что, по моему мнению, мой GameScene шире, чем размер экрана моего устройства. Мне нужно сделать перемещение изображения, а затем не позволять ему перемещаться по краям экрана.Размер GameScene шире размера экрана моего устройства

В настоящее время я нахожусь в том, что мое изображение столкнется с верхней и нижней частью экрана, но оно сдвинется влево или вправо и столкнется с краем где-то вне экрана.

Я наткнулся на этот вопрос в моих поисках, чтобы попытаться решить эту проблему: Screen's real size is bigger than what I see

Просто делать то, что они пытались и закомментировать строку, которая говорит scene.scaleMode = .AspectFill вызовет столкновения с краем экрана, чтобы работать должным образом , однако, как они заявили, изображение теперь не масштабируется должным образом, и в моем случае оно занимает только середину, оставляя серые края с каждой стороны.

В их другом средстве было добавлено scene = GameScene(size: self.view.frame.size) после того, как вы выбрали созданную по умолчанию сцену, я предполагаю, GameViewController.swift, но я не был уверен, что удалить, чтобы попробовать это сделать.

Мои viewDidLoad в настоящее время выглядит следующим образом:

override func viewDidLoad() { 
     super.viewDidLoad() 


     if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { 

      // Configure the view. 
      let skView = self.view as! SKView 
      skView.showsFPS = true 
      //skView.showsNodeCount = true 

      /* Sprite Kit applies additional optimizations to improve rendering performance */ 
      skView.ignoresSiblingOrder = true 

      /* Set the scale mode to scale to fit the window */ 
      scene.scaleMode = .AspectFill 

      skView.presentScene(scene) 

     } 

    } 

Если кто-то может помочь, указывая мне в правильном направлении, для чего снять или, что еще попробовать, что может исправить это, я бы очень признателен.

Заранее благодарен!

+1

сцена, вы можете дать размер вы хотите, например, вес: 2, ч: 3. О иногда вес: 100 ч: 50, это может привести к путанице для резолюций устройство и создать точку отсчета – eliasRuizHz

ответ

1

Попробуйте использовать viewWillLayoutSubviews вместо viewDidLoad и инициализировать сцену с skView.bounds.size:

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 

    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { 
     // Configure the view. 
     let skView = self.view as SKView 
     skView.showsFPS = true 
     skView.showsNodeCount = true 
     skView.showsPhysics = true 
     skView.showsDrawCount = true 

     /* Sprite Kit applies additional optimizations to improve rendering performance */ 
     skView.ignoresSiblingOrder = true 

     /* Set the scale mode to scale to fit the window */ 

     if(skView.scene == nil){ 

      scene.scaleMode = .AspectFill 
      scene.size = skView.bounds.size 
      skView.presentScene(scene) 
     } 


    } 
} 

В viewDidLoad окончательный размер зрения может быть еще не известно, и viewWillLayoutSubviews иногда лучше места для инициализации сцены.

Когда сцена загружается из файла .sks, размер по умолчанию составляет 1024x768. Вот почему ваша сцена иногда шире, чем ожидалось, и это можно изменить, как из кода, который я опубликовал.

Если у вас возникли проблемы с неправильным размером представления (но я сомневаюсь, что), проверьте ваши изображения запуска ... Если они ошибочно выбраны, представление может иметь неправильный размер.

0

Try:

var scene = GameScene(size: UIScreen.mainScreen().bounds) 

или:

var dev_w = UIScreen.mainScreen().bounds.width*2 
var dev_h = UIScreen.mainScreen().bounds.height*2 
var new_frame = CGRectMake(0 , 0, dev_w, dev_h) 
var scene = GameScene(size: new_frame) 
0

У меня была аналогичная проблема с Objective-C iOS 7 и 8 в SpriteKit. При замене SKScene на другой, установка следующего SKScene размера с self.size приведет к этой точной ошибке. Мое решение было так просто, как:

//ObjectiveC 
MyScene *newScene = [[MyScene alloc] initWithSize:CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height * 2)]; 
newScene.scaleMode = SKSceneScaleModeAspectFill; 

//Swift 
var newScene : MyScene = MyScene(size:CGSize(width: self.view.frame.size.width * 2, height: self.view.frame.size.height)) 
newScene.scaleMode = .AspectFill 
Смежные вопросы