신체 부위가 몸통 (몸통, 다리, 머리, 요법)으로 분할 된 플레이어가 있습니다. 이제 플레이어의 움직임을 제어하는 스크린에 버튼이 있습니다. 오른쪽으로 누르면 플레이어가 오른쪽으로 이동하고 해당 부분은 올바르게 작동합니다. 문제는 운동이 바뀔 때마다입니다. walk() 메서드가 호출되고 플레이어의 다리가 움직이는 것처럼 보이도록 애니메이션이 움직입니다. 그러나 움직임이 멈추지 않으면 walk()를 호출하지 않고 계속 호출합니다. 애니메이션이므로 앞뒤로 붙어있는 것처럼 보입니다. 내가 뭘 하려는지 플레이어가 끊임없이 걸을 수 있지만 산책() (애니메이션 메서드) 한 번 호출 할 완료, 다시 호출 할 수 있습니다. (걷는 단추가 여전히 눌러져있는 한). 여기에 내가 지금까지 무엇을 :터치를 사용하지 않고 SpriteNode에서 실행되는 액션 완료
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
}
}
}