【问题标题】:How can I make a sprite that goes off screen and reappears on the opposing side? (100% of sprite always visible)如何制作一个离开屏幕并重新出现在对面的精灵? (100% 的精灵始终可见)
【发布时间】:2015-01-09 10:22:12
【问题描述】:

我对 Cocos2d 有一些经验,但我也有一段时间没有使用它了。话虽如此,我不一定需要交给我的代码 - 只是一个指向我应该采取的正确方法来实现我的要求的指针。

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

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

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

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

【问题讨论】:

    标签: cocos2d-iphone sprite


    【解决方案1】:

    我以前做过几次,很简单。假设您的精灵可以在屏幕外的各个方向移动,您总共需要 4 个相同的精灵。一个精灵是“主”精灵,即当精灵不在任何屏幕边框附近时始终可见的那个精灵。让我们称其他三个为“奴隶”。

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

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

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

    所以基本上你只需要确定主精灵是否靠近任何边界,然后根据主精灵在哪个象限(即左下,右上等)偏移从精灵,然后偏移主精灵并禁用一旦它完全离开了屏幕,奴隶们。

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

    【讨论】:

    • 2 个精灵就足够了。不是吗?
    • 如果精灵只能离开左/右或上/下,否则如果精灵可以离开屏幕的任何一侧,则总共需要 4 个精灵 - 假设你有一个完整的环绕,如小行星。
    • 假设精灵从右上角出去。你需要一个从左下角进来的精灵。
    • 不,因为您需要在其他角落再添加两个精灵。如果精灵在一个角落离开游戏场(屏幕),它不仅会“环绕”到对面的角落,还会“环绕”到所有四个角落。图像一个精灵离开屏幕顶部中心的一半。它也会出现在底部中心的一半。不考虑如果精灵向右移动并部分离开屏幕右侧,则精灵的上下部分也需要在屏幕左侧镜像。玩一下,你就会明白为什么它需要 4 个,而不仅仅是 2 个精灵。很难解释。
    • 我发现我的假设和你的有点不同。你是对的。谢谢你的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多