我有一个奇怪的问题,我的SKReferenceNode在放大后没有正确碰撞。它在中心很好地碰撞,但它忽略了边缘上的碰撞和接触。
Here is the first photo of the scene。 SKReferenceNode显着放大,如this照片所示,不会在边缘上正确碰撞。 PhysicsBody似乎是正确的(打开showPhysics),但球拒绝碰撞。
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
}
非常感谢!
答案 0 :(得分:0)
当你缩放精灵时,你只是改变了它的视觉表现。物理机构保持不变。这就是为什么你得到这个"奇怪的"在碰撞期间。
您可以看到在场景中显示物理用途,只需打开GameViewController
并添加此行
skView.showsPhysics = true
在viewDidLoad
内,就在这一行之后
skView.showsNodeCount = true
然后再次运行您的游戏,现在将突出显示物理边界。