我有一个奇怪的问题,我的SKReferenceNode在扩容后不能正常碰撞。它在中心碰撞良好,但会忽略边缘上的碰撞和接触。
Here is the first photo of the scene。SKReferenceNode被显著放大,正如在this照片中看到的那样,在边缘上不能正确碰撞。在启用showPhysics的情况下,PhysicsBody看起来是正确的,但是球拒绝碰撞。
SKReferenceNode使用的是alpha碰撞遮罩,因为我需要在将来将其更改为更大的精灵来制作动画等。此外,未缩放的对象完全可以正常工作。最后,在球与中心发生碰撞后,块被重置,碰撞又开始按预期进行。修复它的代码可能在重置函数中,但我在加载关卡之前重置了所有内容,所以这没有意义。以下是我的重置代码的一部分:
func reset() {
physicsWorld.gravity = CGVectorMake(0, -9.8)
for grav in gravityBlock {
grav.reset()
}
gravity = -9.8
//Resets blocks
for blocks in destroyedBlocks { //the blocks are stored in destroyedBlocks when collided with
blocks.reset()
}
destroyedBlocks = []
/*Irrelevant code removed*/
}下面是我的blocks.reset()函数:
override func reset() {
super.reset()
self.physicsBody?.categoryBitMask = 1
removeAllActions()
self.texture = self.text
shadow.hidden = false
self.alpha = 0
shadow.alpha = 0
let appear = SKAction(named: "Appear")!
self.runAction(appear)
shadow.runAction(SKAction.fadeInWithDuration(0.25))
}下面是super.reset()
func reset() {
self.hidden = false
state = .NotBroken
}非常感谢!
发布于 2016-08-03 08:18:12
当你缩放精灵的时候,你只是改变了它的视觉表现。物理体保持不变。这就是为什么在碰撞过程中你会变得“奇怪”。
您可以看到显示场景中的物理用途,只需打开GameViewController并添加以下行
skView.showsPhysics = true在viewDidLoad内部,紧跟在这一行之后
skView.showsNodeCount = true然后再次运行您的游戏,物理边界现在将突出显示。
https://stackoverflow.com/questions/38732249
复制相似问题