Cocos2D - 模拟无限滚动

时间:2013-12-24 03:32:50

标签: ios cocos2d-iphone game-engine

我有一个大问题!我想制作像“小行星”这样的旧太空射击游戏,当飞出屏幕时,船在另一侧重新出现。例如,当船在屏幕顶部出现时,它会从底部返回。但是在我的游戏中,有一个跟随播放器的摄像头,仅显示世界的四分之一,我希望以这种方式模拟无限世界!这是一张显示我的意思的图片:

Infinite scrolling explanation

我的想法是仅通过移动存储在数组中的游戏对象来模拟滚动,而不是播放器,并且如果对象超出世界边界并在另一端重新添加它们,则在每一帧计算世界(即从左边出去会把它添加到右边)。

但我真的不喜欢那样做...我想要更直接的东西......?

你们有什么想法吗?比如,网上的任何教程或恰到好处的单词来解释我的意思所以我可以对谷歌做一个明亮的研究(我是法国人,所以我很难写这个问题)!

提前谢谢!

1 个答案:

答案 0 :(得分:0)

了解球员位置,x,y检查球员是否在区域范围内。如果玩家离开了这些边界,则将玩家的位置设置为相反的边界,可能会增加宽度/高度。我这里只为Y坐标做这件事:

const float minWarpAreaY( 0 );
const float maxWarpAreaY( 400 );

//if (player.y < minWarpAreaY) { player.y = maxWarpAreaY - player.height; }
//if (player.y > maxWarpAreaY) { player.y = minWarpAreaY + player.height; }

if (player.y < minWarpAreaY) { WarpPlayer(0.0f, (maxWarpAreaY - minWarpAreaY)); }
if (player.y > maxWarpAreaY) { WarpPlayer(0.0f, -(maxWarpAreaY - minWarpAreaY)); }

void WarpPlayer(float amountX, float amountY)
{
    player.x += amountX;
    player.y += amountY;

    for (eachObject in World)
    {
        eachObject.x += amountX;
        eachObject.y += amountY;
    }
}

这些方面应该有所帮助。