2017-12-30 8 views
0

터치 할 때 게임에 대한 컨트롤을 만들었습니다. 캐릭터가 왼쪽으로 날아갔습니다. 두 번째로 터치하면 오른쪽으로 날아가지만 캐릭터가 내가 여러 번 눌러 비행하고, 문자는 서로 다른 방향으로 던져, 그는 내가 플레이어가 비행수많은 터치로 임펄스를 제거하는 방법 (SpriteKit)

enum BodyType: UInt32 { 
    case playerr = 1 
    case walll = 2 
} 

var direction: Direction? 
var isInFlight = true  






override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent? { 

if isInFlight == true { 
     return 

    } else { 


    player?.removeAllActions() 

    switch direction { 
    case .left: 
     player?.run(SKAction.moveBy(x: 700, y: 0, duration: 1)) 
     player?.physicsBody?.applyImpulse(CGVector(dx: 700, dy: 500)) 

     direction = .right 
    case .right: 
     player?.run(SKAction.moveBy(x: -700, y: 0, duration: 1)) 
     player?.physicsBody?.applyImpulse(CGVector(dx: -700, dy: 
500)) 

     direction  

} 

} 



func didBegin(_ contact: SKPhysicsContact) { 

    let firstBody: SKPhysicsBody 
    let secondBody: SKPhysicsBody 

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { 
     firstBody = contact.bodyA 
     secondBody = contact.bodyB 
    } else { 
     firstBody = contact.bodyB 
     secondBody = contact.bodyA 
    } 

    if (firstBody.categoryBitMask == BodyType.playerr.rawValue && secondBody.categoryBitMask == BodyType.walll.rawValue) { 

     print("Add") 
     isInFlight = false 

    } 

} 


func didEnd(_ contact: SKPhysicsContact) { 

    let firstBody: SKPhysicsBody 
    let secondBody: SKPhysicsBody 

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { 
     firstBody = contact.bodyA 
     secondBody = contact.bodyB 
    } else { 
     firstBody = contact.bodyB 
     secondBody = contact.bodyA 
    } 

    if (firstBody.categoryBitMask == BodyType.playerr.rawValue && secondBody.categoryBitMask == BodyType.walll.rawValue) { 
     print("End") 
     isInFlight = true 

    } 
} 
+0

1) 코드를 공유하기 위해 이미지를 사용하지 마십시오. SO는 사람들이 사용할 수 있도록 코드를 형식화하도록 설계되었습니다. 2) 당신은 두 가지 행동과 물리학을하고 있습니다. 그것은 두 엔진을 정말로 망치고 있습니다. 하나 또는 다른 하나를 선택하십시오 – Knight0fDragon

답변

0

확실하지 때 작동하지 충동을 원하는 그것을

를 해결하는 방법 날아 정확히 당신이 귀하의 애플 리케이션과 함께 달성하려고하지만 이것은 isInFlight bool을 true/false로 설정하여 의미하는 것입니다 touchesBegantouchesEnded. 매우 간단한 개념이지만 앱 논리에서 구현하는 방식은 귀하에게 달려 있습니다.

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     isInFlight = false 
    } 

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
     isInFlight = true 
    } 
+0

나는 충동을 플레이어에 추가했지만 문제가 해결되지 않았습니다 – Mospy

+1

이 경우 문제는 코드의 다른 부분에 있어야합니다. Github 계정이 있다면 샘플 프로젝트에서이 문제를 복제하고 Github에서 전체 코드를 공유 할 수 있습니다. 그러면 사람들이 문제를 쉽게 찾을 수 있습니다. – peacetype

+0

이 질문이 업데이트되었습니다. 올려다 보면, 내가하고 싶은 것을 더 분명하게 할 수있다. – Mospy

관련 문제