【发布时间】:2019-06-17 04:41:10
【问题描述】:
您好,请放轻松,因为我对 Swift 还是很陌生。我正在创建一个游戏,您的角色(在屏幕左侧)必须向上或向下滑动以改变车道(4 车道)或通过点击屏幕右侧跳跃,以躲避来自右侧的障碍物屏幕的一侧。这带来了一个问题,当角色精灵在一个车道上时,它的一些像素在上面的车道上,所以在不同的车道上并不能保护角色免受碰撞。 (角色跳跃时也会出现这个问题)有没有办法编程让角色和障碍物只有在同一条车道上才会发生碰撞?
我已尝试使 .collisionBitMask 和 .categoryBitMask 根据障碍物或角色的位置而变化,但我不知道如何正确编码。老实说,我很迷茫。这是一些代码:
runningDoggo.physicsBody = SKPhysicsBody(texture: doggoTexture, size: runningDoggo.size)
runningDoggo.physicsBody?.affectedByGravity = false
runningDoggo.physicsBody?.isDynamic = true
runningDoggo.physicsBody?.collisionBitMask = 0x1 << 2
bush.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "8-bit bush"), size: bush.size)
bush.physicsBody?.isDynamic = true
bush.physicsBody?.affectedByGravity = false
bush.physicsBody?.categoryBitMask = 0x1 << 1
然后我在一个函数中有一组开关盒,用于随机选择灌木进入的车道
switch randomLane{
case 1:
bush.position = CGPoint(x: 0.4*UIScreen.main.bounds.width, y:-0.07*UIScreen.main.bounds.height)
if(bush.position.y < runningDoggo.position.y) {
bush.zPosition = 6
}
self.addChild(bush)
case 2:
bush.position = CGPoint(x: 0.4*UIScreen.main.bounds.width, y:-0.18*UIScreen.main.bounds.height)
if(bush.position.y < runningDoggo.position.y) {
bush.zPosition = 6
}
self.addChild(bush)
case 3:
bush.position = CGPoint(x: 0.4*UIScreen.main.bounds.width, y:-0.29*UIScreen.main.bounds.height)
if(bush.position.y < runningDoggo.position.y) {
bush.zPosition = 6
}
self.addChild(bush)
case 4:
bush.position = CGPoint(x: 0.4*UIScreen.main.bounds.width, y:-0.4*UIScreen.main.bounds.height)
if(bush.position.y < runningDoggo.position.y) {
bush.zPosition = 6
}
self.addChild(bush)
default:
print("How is this not 1,2,3, or 4?")
}
bush.run(moveAndRemoveBush)
我希望它只碰撞(编辑:不要碰撞而是接触)runningDoggo 精灵与灌木精灵如果它们在同一条车道上,并且如果角色不在障碍物的车道上则通过而不发生碰撞。
【问题讨论】:
标签: ios swift xcode sprite-kit collision-detection