ios - 如何让SKSpriteNode重新出现在它的SKScene的对面?

标签 ios objective-c sprite-kit

我已经尝试使用 SpriteKit 一段时间了,对于我的 SKSpriteNode 在其 SKScene 范围内移动的一些“最佳实践”输入,我将不胜感激。

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

我希望一旦弹珠移出我的场景边界 (1),它就会以相同的速度重新出现在我场景的另一侧 (2),而不是从场景的边缘弹起。我还希望这种边界环绕立即发生,并且以这样一种方式发生,即当大理石的任何部分移出我的场景边界 (3) 时,该部分将在场景的另一侧变得可见 (4)。

是否可以在使用单个 SKSpriteNode 并保留该节点的 PhysicsBody 的同时完成此操作?

提前致谢!

Desired Marble Movement

最佳答案

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

其他三个只是沿着屏幕边缘在视觉上表示 Sprite 以及拾取物理接触(这可能很棘手,因为每个节点都可以接触,并且所有 4 个节点可能同时进行相同的接触) . Otoh 甚至可能没有必要提供其他三个物理体,具体取决于要与之碰撞的其他物体。很简单,因为如果主人也发生碰撞,“奴隶”可能总是会发生碰撞,但这只有在其他物体使用相同的机制或屏幕边界附近永远不会发生碰撞的情况下才会发生。

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

关于ios - 如何让SKSpriteNode重新出现在它的SKScene的对面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24111042/

相关文章:

ios - 无法导入 AVFoundation.framework,所以应用无法播放音乐?

objective-c - plist或NSUserDefaults是否更有效地存储少量数据?

ios - 我小时候在我的玩家类中为我的玩家制作了一个碰撞箱 Sprite 。如何在 gamescene 的 didBegin 方法中访问 hitbox Sprite ?

ios - 在与 PhysicsBody 碰撞时停止 SKAction

ios - 错误: database is locked in sqlite

ios - UICollectionViewController 调用另一个 UICollectionViewController 的 DataSource 方法

ios - 在iOS中@synchronized一次有2种方法吗?

ios - 椭圆曲线加密的填充类型是什么

iphone - AdMob 崩溃并显示 [GADObjectPrivate changeState :]: unrecognized selector

ios - 指数收缩 SKNode