gpt4 book ai didi

ios - 使用 SKPhysics body 检测碰撞

转载 作者:行者123 更新时间:2023-11-28 14:04:29 26 4
gpt4 key购买 nike

所以我正在创建一个游戏,我只想检测玩家节点和敌人发射的子弹之间的碰撞。所以我已经为每个玩家和子弹设置了正确的参数和 categoryBitMask 和 contactTestBitMask。

通过实现 didBegin 和 didEnd 函数,我想在碰撞开始和结束时执行一些代码。问题是,当我构建并运行项目时,物理子系统将子弹绕着玩家移动,而不是穿过玩家。这是因为 isDynamic 属性对于玩家、子弹或两者都设置得太正确。显然,首先要尝试的是将 isDynamic 属性设置为 false;但是,当我这样做时,发生碰撞时没有回调,并且没有执行 didBegin/didEnd 函数。

有没有人知道如何解决这个问题?

设置玩家和子弹物理体的代码;以及下面的didBegin函数供大家引用

    playerNode!.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: playerNode!.size.width/2, height: playerNode!.size.height/2))  //sets the physics body for the player
playerNode!.physicsBody!.isDynamic = false //we dont want the physics to be simulated by the subsystem
playerNode!.physicsBody!.affectedByGravity = false
playerNode!.physicsBody!.pinned = false
playerNode!.physicsBody!.allowsRotation = false
playerNode!.physicsBody!.categoryBitMask = PhysicsCategory.Player
playerNode!.physicsBody!.contactTestBitMask = PhysicsCategory.Bullet

self.bullet?.physicsBody = SKPhysicsBody(circleOfRadius: bullet!.size.width * 0.5)
self.bullet?.physicsBody?.isDynamic = true
self.bullet?.physicsBody?.pinned = false
self.bullet?.physicsBody?.allowsRotation = false
self.bullet?.physicsBody?.affectedByGravity = false
self.bullet?.physicsBody?.categoryBitMask = PhysicsCategory.Bullet
self.bullet?.physicsBody?.contactTestBitMask = PhysicsCategory.Player

func didBegin(_ contact: SKPhysicsContact) {
let collision = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask

if collision == PhysicsCategory.Player | PhysicsCategory.Bullet {
print("There was a collision with the player and a bullet")
}
}

//Defines the physics category for the game
struct PhysicsCategory {
static let None: UInt32 = 0
static let Player: UInt32 = 0b1
static let Bullet: UInt32 = 0b10
}

最佳答案

子弹在玩家周围“移动”而不是穿过玩家,因为您已启用碰撞。默认情况下,所有物理体都与所有其他物理体发生碰撞,而默认情况下,物理体之间没有注册接触。

首先要做的是关闭玩家和子弹之间的碰撞,反之亦然,同时不影响所有其他碰撞:

playerNode.physicsBody?.collisionBitMask &= ~physicsCategory.bullet
bullet.physicsBody?.collisionBitMask &= ~physicsCategory.player

编辑:我的碰撞和接触分步指南: https://stackoverflow.com/a/51041474/1430420

碰撞和接触测试位掩码指南: https://stackoverflow.com/a/40596890/1430420

操纵位掩码以关闭和打开单个碰撞和接触。 https://stackoverflow.com/a/46495864/1430420

关于ios - 使用 SKPhysics body 检测碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139094/

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