我一直在试验SpriteKit已经有一段时间了,我很欣赏关于我的SKSpriteNode在SKScene范围内移动的一些“最佳实践”输入。
使用加速度计,我在SKSpriteNode的PhysicsBody属性上施加力,以便以类似大理石的方式在屏幕上移动节点。目前,我使用self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]
设置了我的场景的PhysicsBody,这样大理石就会从我的场景边缘弹回来。
我不希望从我的场景边缘反弹,而是希望一旦大理石移动到我的场景边界(1),它就会以相同的速度重新出现在场景的另一侧(2)。我也希望这个边界包裹立即发生,并且当大理石的任何部分移动到我的场景边界(3)之外时,该部分将在场景的另一侧(4)变得可见。 / p>
使用单个SKSpriteNode并保留该节点的PhysicsBody是否可以实现此目的?
提前致谢!
答案 0 :(得分:4)
不。如果精灵可以在任何方向离开屏幕,你需要4个精灵节点,以避免精灵仅仅是#34;弹出"切换边时进出。您必须通过选择4个精灵中的一个作为" master"来同步它们的位置和速度。子画面。
其他三个仅用于在屏幕边缘可视地表示精灵以及拾取物理接触(这可能很棘手,因为每个节点都可以联系,并且所有4个可以同时进行相同的接触) 。 Otoh甚至可能根本不需要根据其他身体发生碰撞来给其他三个物理机构。仅仅因为"奴隶"如果主人也会发生碰撞,也可能总是发生碰撞,但只有当其他机构使用相同的机制或在屏幕边界附近不发生碰撞时才会发生这种情况。
您可以将3个副本偏移+场景大小的+宽度,+高度和+宽度+高度,并根据主精灵位置每帧重新计算此偏移量。当实际离开屏幕的一侧时,您将不得不更改主精灵位置。例如,当主精灵离开屏幕的右侧时,您将从x位置减去(未设置!)场景大小的宽度。