我已经对 SpriteKit 进行了一段时间的试验,如果我的 SKSpriteNode 在其 SKScene 的范围内移动,我将不胜感激。
使用加速度计,我在 SKSpriteNode 的 PhysicsBody 属性上施加力,以便以类似大理石的方式在屏幕上移动节点。目前,我使用 self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame] 设置场景的 PhysicsBody,以便大理石从场景边缘反弹。
我希望大理石一旦超出我的场景边界 (1),它会以相同的速度重新出现在场景的另一侧 (2),而不是从场景的边缘反弹。我还希望这种边界环绕立即发生,并且当大理石的任何部分移出我的场景边界 (3) 时,该部分将在场景的另一侧变得可见 (4)。
是否可以在使用单个 SKSpriteNode 并保留该节点的 PhysicsBody 时完成此操作?
提前致谢!
Best Answer-推荐答案 strong>
不。如果 Sprite 可以在任何方向离开屏幕,您需要 4 个 Sprite 节点,以避免 Sprite 在切换侧面时仅仅“弹出”进出。您必须通过选择 4 个 Sprite 之一作为“主” Sprite 来同步它们的位置和速度。
其他三个只是用来在屏幕边缘视觉上表示 Sprite 以及拾取物理接触(这可能很棘手,因为每个节点都可以接触,并且所有 4 个节点可能同时进行相同的接触) . Otoh 甚至可能没有必要给出其他三个物理体,这取决于要与哪些其他物体发生碰撞。仅仅是因为如果主设备也发生碰撞,“从设备”可能总是会发生碰撞,但这只有在其他物体使用相同的机制或在屏幕边框附近永远不会发生碰撞时才会发生。
您将通过场景大小的 +width、+height 和 +width+height 偏移 3 个副本,并根据主 Sprite 位置在每帧重新计算此偏移量。当主 Sprite 实际离开屏幕的一侧时,您将不得不更改它的位置。例如,当主 Sprite 离开屏幕右侧时,您将从其 x 位置减去(未设置!)场景大小的宽度。
关于ios - 如何让 SKSpriteNode 重新出现在其 SKScene 的对面?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/24111042/
|