2015-07-09 1 views
0

У меня есть игра, где я наклоняюсь влево и вправо, чтобы переместить мой узел. Но когда я держу устройство прямо, я хотел бы, чтобы он остановил узел, а также добавил изображение моего узла, чтобы не было серой и белой шахматной доски. Как мне это сделать? Как вы можете видеть в моем коде, я использую SKTexture для изменения изображения узлов и скорости перемещения моего узла. Как изменить изображение, когда устройство прямое, а не наклонное, и чтобы узел не двигался? Спасибо!Как я могу заставить мой акселерометр не перемещать мой узел, когда устройство прямое и не наклоняется?

 func addTilt() { 

     if (motionManager.accelerometerAvailable) { 
    motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue()) { 
     (data, error) in 

     if(data.acceleration.x < -0.05) { // tilting the device to the right 
      self.heroNode.accelerometerActive == true 
      self.heroNode.physicsBody?.velocity = CGVector(dx: -250, dy: 0) 
      self.heroNode.texture = SKTexture(imageNamed: "heroNode1") 

     } else if (data.acceleration.x > 0.05) { // tilting the device to the left 
      self.heroNode.accelerometerActive == true 
      self.heroNode.physicsBody?.velocity = CGVector(dx: 250, dy: 0) 
      self.heroNode.texture = SKTexture(imageNamed: "heroNode2") 
     } 
    } 


} 

}

ответ

1

Похоже, что вы могли бы добавить else в текущей логики, которая обрабатывает, когда X ускорение больше, чем -0.05 и меньше, чем 0,05, что в основном в вертикальном положении только с небольшим наклоном в в любом направлении.

Кроме того, вы должны использовать = для назначения вместо ==, который проверяет равенство и не влияет на значение вашего accelerometerActive.

И, если бы это был я, я бы сохранил код чище, отбросив лишнюю скобку, так как в Swift вам не нужны.

if motionManager.accelerometerAvailable { // No parenthesis 
    motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue()) { (data, error) in 

     if data.acceleration.x < -0.05 { // tilting the device to the right 
      self.heroNode.accelerometerActive = true 
      self.heroNode.physicsBody?.velocity = CGVector(dx: -250, dy: 0) 
      self.heroNode.texture = SKTexture(imageNamed: "heroNode1") 

     } else if data.acceleration.x > 0.05 { // tilting the device to the left 
      self.heroNode.accelerometerActive = true 
      self.heroNode.physicsBody?.velocity = CGVector(dx: 250, dy: 0) 
      self.heroNode.texture = SKTexture(imageNamed: "heroNode2") 

     } else { // straight 
      self.heroNode.accelerometerActive = false 
      self.heroNode.physicsBody?.velocity = CGVector(dx: 0, dy: 0) // No velocity 
      self.heroNode.texture = SKTexture(imageNamed: "heroNode3") // Image when straight 
     } 
    } 
} 
+0

Я пробовал то, что вы сказали, но когда мое устройство прямое, оно не останавливается или не меняет изображение. – coding22

+0

Также, когда я использую «=» вместо «==», я получаю сообщение об ошибке, которое не может назначить результат этого выражения. – coding22

+0

Тогда вы не можете назначить его, потому что он доступен только для чтения. Можете ли вы разместить больше кода, возможно, репо на GitHub? –

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