gpt4 book ai didi

swift - swift 4中两个节点之间的碰撞检测

转载 作者:搜寻专家 更新时间:2023-11-01 05:32:58 25 4
gpt4 key购买 nike

我想在化身和障碍物之间进行碰撞检测,所以每当发生碰撞时,它应该打印“collision”,但即使那样也不起作用,所以问题是,它没有检测到任何碰撞.如果它会发生碰撞,它应该区分玩家和障碍物。

class GameScene: SKScene, SKPhysicsContactDelegate {
let avatar = SKShapeNode(circleOfRadius: 20)

let avatarCategory: UInt32 = 0*1 << 0
let obstacleCategory: UInt32 = 0*1 << 1

override func didMove(to view: SKView) {
physicsWorld.contactDelegate = self

createAvatar()
spawnObstacles()
}

func createAvatar() {
avatar.name = "avatarNode"
avatar.physicsBody = SKPhysicsBody()
avatar.physicsBody?.categoryBitMask = avatarCategory
avatar.physicsBody?.contactTestBitMask = avatarCategory
avatar.physicsBody?.collisionBitMask = 0
avatar.physicsBody?.usesPreciseCollisionDetection = true
avatar.physicsBody?.affectedByGravity = false
avatar.zPosition = 2

addChild(avatar)
}

func createRandomObstacle() {
let obstacle = SKShapeNode()

obstacle.name = "obstacleNode"
obstacle.physicsBody = SKPhysicsBody()
obstacle.physicsBody?.categoryBitMask = obstacleCategory
obstacle.physicsBody?.contactTestBitMask = obstacleCategory
obstacle.physicsBody?.collisionBitMask = 0
obstacle.physicsBody?.usesPreciseCollisionDetection = true
obstacle.physicsBody?.affectedByGravity = false
obstacle.zPosition = 2

addChild(obstacle)
}

func didBegin(_ contact: SKPhysicsContact) {
print("collision")
}

最佳答案

首先,avatarCategory 和 obstacleCategory 都是 0,因为:UInt32 = 0*1 << 1 = 0,所以让我们解决这个问题:

let avatarCategory: UInt32 = 1 << 0
let obstacleCategory: UInt32 = 1 << 1

现在 contactTestBitMask 表示您希望收到有关联系人通知的对象,因此您需要更改它:

avatar.physicsBody?.contactTestBitMask = obstacleCategory

obstacle.physicsBody?.contactTestBitMask = avatarCategor

现在试试吧😀

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

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

关于swift - swift 4中两个节点之间的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51325897/

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