Cocos2d iphone 我怎样才能使一个精灵离开屏幕,重新出现在另一边?(100%的精灵始终可见)

Cocos2d iphone 我怎样才能使一个精灵离开屏幕,重新出现在另一边?(100%的精灵始终可见),cocos2d-iphone,sprite,Cocos2d Iphone,Sprite,我对Cocos2d有一点经验,但我已经有一段时间没有使用它了。也就是说,我不一定需要交给我的代码——只是指向我应该采取的正确方法的指针,以实现我的需求 我的项目是一个简单的方块游戏,玩家通过滑动来移动方块(方块以准确的滑动速度移动,没有加速度)。我想实现的是,当玩家从屏幕上刷下一个方块时,我希望隐藏在屏幕外的精灵部分出现在屏幕的另一个边缘,并一直移动直到拖动运动停止(有点像旧的手机游戏,Snake II)。当精灵完全离开屏幕时,它现在应该在屏幕对面的某处完全可见。(因此,屏幕就像一个无限循环,精

我对Cocos2d有一点经验,但我已经有一段时间没有使用它了。也就是说,我不一定需要交给我的代码——只是指向我应该采取的正确方法的指针,以实现我的需求

我的项目是一个简单的方块游戏,玩家通过滑动来移动方块(方块以准确的滑动速度移动,没有加速度)。我想实现的是,当玩家从屏幕上刷下一个方块时,我希望隐藏在屏幕外的精灵部分出现在屏幕的另一个边缘,并一直移动直到拖动运动停止(有点像旧的手机游戏,Snake II)。当精灵完全离开屏幕时,它现在应该在屏幕对面的某处完全可见。(因此,屏幕就像一个无限循环,精灵可以继续移动)。例如,精灵在屏幕左侧可见40%,在屏幕右侧可见60%(在屏幕边界处减半,0.x)。当精灵向左移动时,它将在左侧显示35%,在右侧显示65%

解决这一问题的最佳方法是什么?我是否应该复制精灵,然后以相反的方式将新副本移动到屏幕上?或者一个精灵和某种面具就可以做到这一点

任何帮助都将不胜感激。(我现在不在家,但如果解释不清楚,我可以稍后添加示例代码和图像)


我使用的是Cocos2d的objective-c版本。

我以前做过几次,非常简单。假设您的精灵可以在屏幕外的所有方向上移动,您总共需要4个相同的精灵。一个精灵是“主”精灵,即当精灵不靠近任何屏幕边框时始终可见的一个精灵。让我们把另外三个叫做“奴隶”

检查主精灵是否完全包含在屏幕中的每一帧。一个简单的CGRect包含了一个重复测试

如果未包含,则使三个从属精灵可见,并分别按屏幕宽度、屏幕高度以及屏幕宽度和高度对其进行偏移。假设主精灵离开屏幕左下角。如果它位于右上角,则需要减去屏幕宽度/高度

现在,一旦主精灵完全离开屏幕,您需要偏移其位置一次,并再次隐藏从属精灵。例如,如果主机将屏幕向左移到右侧,则必须从其x位置减去screen.width一次

因此,基本上,您只需要确定主精灵是否靠近任何边界,然后根据主精灵打开的象限(即左下角、右上角等)偏移从属精灵,然后在完全离开屏幕后偏移主精灵并禁用从属精灵


根据您的需要,您可能还需要将碰撞检查扩展到所有四个精灵,或者您可能决定不在主精灵完全离开屏幕时偏移主精灵,而是在其位置不再位于屏幕内时偏移主精灵。

2个精灵就足够了。不是吗?如果精灵只能离开左/右或上/下,否则如果精灵可以离开屏幕的任何一侧,您总共需要4个精灵-假设您有一个像小行星一样的完整环绕。假设精灵从右上角离开。你需要一个从左下角进来的精灵。不,因为你需要在其他角落再放两个精灵。如果精灵离开了一个角落的操场(屏幕),它将“环绕”不仅仅是对方的角落,而是所有四个角落。想象一个精灵离开屏幕顶部中间的一半。它也会出现在底部中心的一半。不考虑如果精灵移动到右边,部分地离开屏幕的右边,精灵的上下部分都需要在屏幕左侧镜像。玩一些,你就会明白为什么它需要4个,而不仅仅是2个精灵。很难解释。我发现我的假设和你的有点不同。你说得对。谢谢你的解释。