gpt4 book ai didi

swift - 为什么这不会检测到碰撞和接触?

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

我已经在这方面工作了大约一个星期了,我需要帮助。请弄清楚为什么这行不通!

(附:我的 GameScene 中有 SKPhysicsContactDelegate。此外,我的 didMoveToView 中有 self.physicsWorld.contactDelegate = self。)

这是我的代码:

这在 didMoveToView 之外:

let squareGroup: UInt32 = 1
let obstacleGroup: UInt32 = 2

这是在我的 didMoveToView 里面:

square.position = CGPointMake(self.size.width/2, self.size.height/1.5)
square.zPosition = 35
square.size = CGSize(width: 40, height: 40)
square.physicsBody = SKPhysicsBody(rectangleOfSize: square.size)
square.physicsBody?.affectedByGravity = false
square.physicsBody?.dynamic = true
square.physicsBody?.allowsRotation = false
square.physicsBody?.categoryBitMask = squareGroup
square.physicsBody?.collisionBitMask = obstacleGroup
square.physicsBody?.contactTestBitMask = obstacleGroup
square.name = "Square"
self.addChild(square)

这也在我的 didMoveToView 中: *AND:当正方形和障碍物接触时没有任何反应。它不打印联系人或任何内容。

func didBeginContact(contact: SKPhysicsContact) {

print("contact")

let newScene = GameplayScene(size: self.size)
_ = SKTransition.fadeWithDuration(1)
self.view?.presentScene(newScene)

}

最后,这是我的障碍代码,在 didMoveToView 之外:请注意:目前我只是在尝试 Obstacle 2 以使其正常工作。

func addObstacles() {

let obstacle1 = SKSpriteNode(imageNamed: "Obstacle")
let obstacle2 = SKSpriteNode(imageNamed: "Obstacle")
obstacle1.xScale = 2
obstacle2.xScale = 2


func randInRange(range: Range<Int>) -> Int {
return Int(arc4random_uniform(UInt32(range.endIndex - range.startIndex))) + range.startIndex
}

let random = randInRange(205...470)
let moveDown1 = SKAction.moveByX(0, y: -self.size.width, duration: 2.5)
let repeatAction1 = SKAction.repeatActionForever(moveDown1)
let removeObstacle1 = SKAction.removeFromParent()
let moveAndRemove1 = SKAction.sequence([repeatAction1, removeObstacle1])


obstacle1.position = CGPointMake(CGFloat(random), self.frame.size.height * 2)
obstacle1.zPosition = 40
obstacle1.physicsBody = SKPhysicsBody(rectangleOfSize: obstacle1.size)
obstacle1.physicsBody?.affectedByGravity = false
obstacle1.physicsBody?.dynamic = false
obstacle1.runAction(moveAndRemove1)
self.addChild(obstacle1)

let moveDown2 = SKAction.moveByX(0, y: -self.size.width, duration: 2.5)
let repeatAction2 = SKAction.repeatActionForever(moveDown2)
let removeObstacle2 = SKAction.removeFromParent()
let moveAndRemove2 = SKAction.sequence([repeatAction2, removeObstacle2])


obstacle2.position = CGPointMake(CGFloat(random) + 460, self.frame.size.height * 2)
obstacle2.zPosition = 40
obstacle2.physicsBody = SKPhysicsBody(rectangleOfSize: obstacle2.size)
obstacle2.physicsBody?.affectedByGravity = false
obstacle2.physicsBody?.dynamic = false
obstacle2.physicsBody?.categoryBitMask = obstacleGroup


obstacle2.name = "Obstacle2"


obstacle2.runAction(moveAndRemove2)
self.addChild(obstacle2)

}


func repeatObstacles() {
let generateObstacles = SKAction.sequence([SKAction.runBlock(self.addObstacles), SKAction.waitForDuration(1.3)])
let endlessAction = SKAction.repeatActionForever(generateObstacles)
runAction(endlessAction)

}

我已经坚持了一段时间了。如果您需要更多信息,请问我!我需要帮助。

最佳答案

categoryBitMask 应该这样定义:

let squareGroup: UInt32 = 0x1 << 1
let obstacleGroup: UInt32 = 0x1 << 2

同时定义障碍物collisionBitMask

obstacle2.physicsBody?.collisionBitMask = obstacleGroup

还有你的障碍contactTestBitMask

obstacle2.physicsBody?.contactTestBitMask = squareGroup

检查联系人:

func didBeginContact(contact: SKPhysicsContact) {
if ((contact.bodyA.categoryBitMask == squareGroup && contact.bodyB.categoryBitMask == obstacleGroup) ||
(contact.bodyA.categoryBitMask == obstacleGroup && contact.bodyB.categoryBitMask == squareGroup)) {

// Handle Contact
}
}

关于swift - 为什么这不会检测到碰撞和接触?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426001/

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