gpt4 book ai didi

ios - spriteKit 碰撞不起作用

转载 作者:行者123 更新时间:2023-11-30 11:59:49 31 4
gpt4 key购买 nike

不确定哪个部分有问题。我正在做一个 spriteKit 射击游戏,但碰撞不起作用。宇宙飞船没有被摧毁。

这一定与某处的碰撞有关......

射弹只是稍微移动敌人,但并没有摧毁他们。

    struct physicsCategory {
static let player : UInt32 = 1
static let enemy : UInt32 = 2
static let projectile : UInt32 = 3


}


func didBeginContact(contact: SKPhysicsContact) {
let firstBody : SKPhysicsBody = contact.bodyA
let secondBody : SKPhysicsBody = contact.bodyB

if ((firstBody.categoryBitMask == physicsCategory.projectile) && (secondBody.categoryBitMask == physicsCategory.enemy) || (firstBody.categoryBitMask == physicsCategory.enemy) && (secondBody.categoryBitMask == physicsCategory.projectile)) {


projectileCollision(enemyTemp: firstBody.node as! SKSpriteNode, projectileTemp: secondBody.node as! SKSpriteNode)

}
if ((firstBody.categoryBitMask == physicsCategory.enemy) && (secondBody.categoryBitMask == physicsCategory.player) || (firstBody.categoryBitMask == physicsCategory.player) && (secondBody.categoryBitMask == physicsCategory.enemy)) {


enemyPlayerCollision(enemyTemp: firstBody.node as! SKSpriteNode, playerTemp: secondBody.node as! SKSpriteNode)

}
}
///////////
func projectileCollision(enemyTemp: SKSpriteNode, projectileTemp: SKSpriteNode){
enemy.removeFromParent()
projectile.removeFromParent()

score = score + 1

updateScore()




}


////////////
func enemyPlayerCollision(enemyTemp: SKSpriteNode, playerTemp: SKSpriteNode) {

mainLabel.fontSize = 50
mainLabel.alpha = 1.0
mainLabel.text = "Game Over"

player.removeFromParent()

isAlive = false

waitThenMoveToTiltleScreen()
}

最佳答案

您的第一个问题是static letprojectile : UInt32 = 3

如果你想声明一个唯一的位掩码,它需要是2的幂(2^0,2^1,2^2,..etc)

3的真正含义是,你的射弹既是玩家又是敌人(1 = 2^0, 2 = 2^1)

你的第二个问题是你的逻辑

let f = firstBody.categoryBitMask
let s = secondbody.categoryBitmask
let p = physicsCategory.projectile
let x = physicsCategory.player
let e = physicsCategory.enemy

这是你的转换物 if 语句:

if ((f == p) && (s == e) || (f == e) && (s == p)) {
projectileCollision(enemyTemp: firstBody.node as! SKSpriteNode, projectileTemp: secondBody.node as! SKSpriteNode)
}

在您的 if 语句中,您说第一个或第二个可能是敌人,但在您的射弹碰撞方法中,您声称第一个物体始终是敌人,第二个物体始终是射弹。

你需要处理你的第一个 body 是转换物,而你的第二个 body 是敌人的情况,因为很可能你的转换物会移动到敌人身上,所以它会是第一个 body 。

关于ios - spriteKit 碰撞不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47381677/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com