2017-12-30 38 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ブールをtrue/falseに設定することによって意味しているものですtouchesBeganおよびtouchesEnded。非常にシンプルなコンセプトですが、アプリロジックに実装する方法はあなた次第です。

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

関連する問題