如何使SKSpriteNode重新出现在其SKScene的另一侧?

我一直在试验SpriteKit已经有一段时间了,我很欣赏一些关于我的SKSpriteNode在其SKScene范围内运动的“最佳实践”输入。

使用加速度计,我在SKSpriteNode的PhysicsBody属性上施加力,以便以类似大理石的方式在屏幕周围移动节点。 目前,我使用self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]设置我的场景的PhysicsBody,以便大理石简单地从场景的边缘反弹。

我不希望从我的场景边缘反弹,而是希望一旦大理石移动到我的场景边界(1),它将以相同的速度重新出现在场景的另一侧(2)。 我还希望这个边界包裹立即发生,并且当大理石的任何部分移动到我的场景边界(3)之外时,该部分将在场景的相对侧(4)变得可见。

是否可以在使用单个SKSpriteNode并保留该节点的PhysicsBody时实现此目的?

提前致谢!

理想的大理石运动

不。 如果精灵可以在任何方向离开屏幕,你需要4个精灵节点,以避免精灵在切换边时只是“弹出”进出。 您必须通过选择4个精灵中的一个作为“主”精灵来同步它们的位置和速度。

其他三个仅用于在屏幕边缘可视地表示精灵以及拾取物理接触(这可能是棘手的,因为每个节点可以接触,并且所有4个可以同时进行相同的接触)。 Otoh甚至可能没有必要根据其他身体要碰撞的其他三个物理机构。 仅仅因为如果主人也会碰撞,“奴隶”可能总是碰撞,但只有当其他人使用相同的机制或在屏幕边界附近不发生碰撞时才会这样。

您可以将3个副本偏移+场景大小的+宽度,+高度和+宽度+高度,并根据主精灵位置每帧重新计算此偏移量。 当实际离开屏幕的一侧时,您将不得不更改主精灵位置。 例如,当主精灵离开屏幕的右侧时,您将从x位置减去(未设置!)场景大小的宽度。