【发布时间】:2017-09-06 02:08:33
【问题描述】:
我有一个玩家,他的物理身体被分成几部分(躯干、腿、头等),现在我在屏幕上有一个按钮来控制玩家的移动,如果按钮被向右按下,玩家就会移动到正确的,那部分工作正常。问题是每次运动发生变化时都会调用 walk() 方法,它所做的是让玩家的腿看起来像走路一样,但是如果运动没有停止,那么会在没有完成的情况下继续调用 walk()动画,所以它看起来像是来回卡住了。我想要实现的是让玩家能够不断地行走,但要调用一次 walk() (动画方法),完成,然后再次调用(只要仍然按下行走按钮)。这是我到目前为止所拥有的:
func walk(){
let leftFootWalk = SKAction.run {
let action = SKAction.moveBy(x: 1, y: 0.1, duration: 0.1)
let actionReversed = action.reversed()
let seq = SKAction.sequence([action, actionReversed])
self.leftUpperLeg.run(seq)
self.leftLowerLeg.run(seq)
}
let rightFootWalk = SKAction.run {
let action = SKAction.moveBy(x: 0.4, y: 0.1, duration: 0.1)
let actionReversed = action.reversed()
let seq = SKAction.sequence([action, actionReversed])
self.rightUpperLeg.run(seq)
self.rightLowerLeg.run(seq)
}
let group = SKAction.sequence([leftFootWalk, SKAction.wait(forDuration: 0.2), rightFootWalk])
run(group)
}
extension GameScene: InputControlProtocol {
func directionChangedWithMagnitude(position: CGPoint) {
if isPaused {
return
}
if let fighter = self.childNode(withName: "fighter") as? SKSpriteNode, let fighterPhysicsBody = fighter.physicsBody {
fighterPhysicsBody.velocity.dx = position.x * CGFloat(300)
walk()
if position.y > 0{
fighterPhysicsBody.applyImpulse(CGVector(dx: position.x * CGFloat(1200),dy: position.y * CGFloat(1200)))
}else{
print("DUCK") //TODO: duck animation
}
}
}
【问题讨论】:
标签: ios swift sprite-kit nodes skaction