gpt4 book ai didi

Swift/SpriteKit 碰撞检测

转载 作者:行者123 更新时间:2023-11-30 10:09:35 30 4
gpt4 key购买 nike

我创建了两个对象,一堵墙和一个可以碰撞的玩家。如果它们发生碰撞,玩家应该无法进入或越过墙。如果我设置了massWall>>massPlayer,玩家有时可以越过墙移动。如果我没有设置质量,玩家和墙壁就会朝一个方向移动。我想要实现墙壁静止不动并且玩家无法越过/穿过墙壁。我的代码:

    func addWall(xPos: CGFloat, yPos: CGFloat){
let wallNode = SKSpriteNode(imageNamed: "wall")

wallNode.physicsBody = SKPhysicsBody(circleOfRadius: width/2)
wallNode.physicsBody!.affectedByGravity = false
wallNode.physicsBody!.categoryBitMask = ColliderType.Wall.rawValue
wallNode.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue
wallNode.physicsBody!.collisionBitMask = ColliderType.Player.rawValue
wallNode.physicsBody!.mass = 1000000

let wall = Wall(node: wallNode)
Walls.append(wall)
wallNode.position.x = xPos
wallNode.position.y = yPos
wallNode.size = CGSize(width: width, height: width)
addChild(wallNode)
}

func addPlayer(xPos: CGFloat, yPos: CGFloat){
playerNode = SKSpriteNode(imageNamed: "player")

playerNode.physicsBody = SKPhysicsBody(circleOfRadius: width/2)
playerNode.physicsBody!.affectedByGravity = false
playerNode.physicsBody!.categoryBitMask = ColliderType.Player.rawValue
playerNode.physicsBody!.contactTestBitMask = ColliderType.Wall.rawValue
playerNode.physicsBody!.collisionBitMask = ColliderType.Wall.rawValue
playerNode.physicsBody!.mass = 1


let player = Player(node: playerNode, healthPoints: 100, attack: 10)
playerNode.position.x = xPos
playerNode.position.y = yPos
playerNode.size = CGSize(width: width, height: width)
addChild(playerNode)
}

func didBeginContact(){} 中,我没有任何代码,因为我现在不知道如何处理它。我无法撤消该移动,因为我没有跟踪最后的移动。

最佳答案

有两件事您需要更改。第一个是解决玩家穿墙的问题。这是通过在 playerNode 上启用精确碰撞检测来解决的(只需将其与 physicalsBody 配置的其余部分放在一起):

playerNode.physicsBody!.usesPreciseCollisionDetection = true

接下来你需要让你的墙不具有动态物理,这将阻止它在你的 playerNode 碰撞到它时使用react。您不需要设置 wallNodemass,您不需要它。因此应该添加类似的内容(只需将其与 physicalsBody 配置的其余部分放在一起):

wallNode.physicsBody!.dynamic = false

关于Swift/SpriteKit 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33709126/

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