2015-05-13 4 views
3

Я использую следующие методы, чтобы сделать мой характер прыжок:Увеличения на более прикосновении до максимальной высоты

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

    if onGround && !gameOver { 
     self.character.physicsBody?.applyImpulse(CGVectorMake(0, 75)) 
     self.onGround = false 
    } 

} 

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { 

} 

Это прекрасно работает, но я хочу, чтобы сделать персонаж прыгать определенную высоту, основанную на длина касания до максимума. Я пробовал что-то с продолжительностью кадров, но это не сработало.

Как я могу сделать прыжок персонажа на основе длины касания до максимальной высоты?

ответ

1

Вы можете отключить скорость тела на оси у, как вы поднимите палец, и если вы хотите, чтобы ограничить максимальную высоту прыжка использовать дополнительную переменную для хранения начального у позиции непосредственно перед прыжком и проверить дельту между текущим у poistion к исходному положению у:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    if onGround && !gameOver { 
     if self.initialJumpY == nil { 
      self.initialJumpY = self.character.position.y 
     } 

     if self.character.position.y - self.initialJumpY < <Your cap value> {    
      self.character.physicsBody?.applyImpulse(CGVectorMake(0, 75))    
     } else { 
      self.character.physicsBody?.velocity.dy = 0.0 
     } 

     self.onGround = false 
} 

и сбросить его, когда сделано:

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { 
     self.character.physicsBody?.velocity.dy = 0.0 
     self.initialJumpY = nil 
    } 

объявить initialJumpY в своем классе узле, где используются методы касания:

class MyNode: SKNode { 

    var initialJumpY: Float? 

} 
+0

Где (и как) объявить значение initialJumpY? –

+0

Мой игровой персонаж - это SKSpriteNode, а не класс. Это все еще применяется? –

+0

У меня появилось следующее сообщение об ошибке: [ссылка на сообщение об ошибке] (http://oi57.tinypic.com/1038leh.jpg) –

1

Запустите действие таймера, когда начнется ваше прикосновение и закончите его, когда закончится касание. Содержится внутри будет что-то вроде следующего,

var force = 0.0 

let timerAction = SKAction.waitForDuration(1.0) 
let update = SKAction.runBlock({ 
    if(force < 100.0){ 
     force += 1.0 
    } 
}) 
let sequence = SKAction.sequence([timerAction, update]) 
let repeat = SKAction.repeatActionForever(sequence) 
self.runAction(repeat, withKey:"repeatAction") 

Затем в touchesEnded, удалить действие и использовать значение силы, чтобы выполнить свой прыжок.

self.removeActionForKey("repeatAction") 
self.character.physicsBody?.applyImpulse(CGVectorMake(0, force))