터치 할 때 게임에 대한 컨트롤을 만들었습니다. 캐릭터가 왼쪽으로 날아갔습니다. 두 번째로 터치하면 오른쪽으로 날아가지만 캐릭터가 내가 여러 번 눌러 비행하고, 문자는 서로 다른 방향으로 던져, 그는 내가 플레이어가 비행수많은 터치로 임펄스를 제거하는 방법 (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
}
}
1) 코드를 공유하기 위해 이미지를 사용하지 마십시오. SO는 사람들이 사용할 수 있도록 코드를 형식화하도록 설계되었습니다. 2) 당신은 두 가지 행동과 물리학을하고 있습니다. 그것은 두 엔진을 정말로 망치고 있습니다. 하나 또는 다른 하나를 선택하십시오 – Knight0fDragon