使用SpriteKit滚动游戏场景

时间:2015-05-29 09:01:55

标签: ios sprite-kit

简而言之:我如何制作一个不是无限的滚动游戏?

我试着通过一个例子来解释我想要达到的目标:希尔攀登赛

在这个游戏中你驾驶一辆汽车(或任何类型的疯狂车辆,实际上;))上山 现在有一个关于游戏的特别之处,我无法理解:第
很明显,每个阶段的曲目都不是随机排列的。即每次演奏时,曲目的路线始终相同。

我想学的是:

  • 你如何创建这样的滚动游戏场景?它是一个巨大的背景节点,滚动还是有某种奇特的平铺?

我的游戏需要滚动两个轴(x,y)。玩家节点在游戏区域的中心开始并且可以移动。这个区域周围有一些障碍,其中一些最初是不可见的,因为它们位于游戏世界的边缘。·



我认为最简单的解决方案是使用大背景节点,但这会如何影响游戏的内存消耗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

我们在SKATiledMap中构建了类似的内容。诀窍是将要关注的对象添加到要滚动的背景中。这也将使背景保持在屏幕上。

-(void)update
{
    if (self.autoFollowNode)
    {
        self.position = CGPointMake(-self.autoFollowNode.position.x+self.scene.size.width/2, -self.autoFollowNode.position.y+self.scene.size.height/2);

        //keep map from going off screen
        CGPoint position = self.position;

        if (position.x > 0)
            position.x = 0;


        if (position.y > 0)
            position.y = 0;

        //self.mapHeight*self.tileWidth gives you the size of the map in points
        if (position.y < -self.mapHeight*self.tileWidth+self.scene.size.height)
            position.y = -self.mapHeight*self.tileWidth+self.scene.size.height;
        if (position.x < -self.mapWidth*self.tileWidth+self.scene.size.width)
            position.x = -self.mapWidth*self.tileWidth+self.scene.size.width;

        self.position = CGPointMake((int)(position.x), (int)(position.y));
    }
}
在这种情况下,

self是背景,autoFollowNode是玩家。你可以使用self.size.width而不是self.mapHeight*self.tileWidth希望这有意义并且有用。