首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SpriteKit滚动游戏场景

用SpriteKit滚动游戏场景
EN

Stack Overflow用户
提问于 2015-05-29 09:01:54
回答 1查看 738关注 0票数 3

简而言之:如何使滚动的gameScene不是无限的?

我将尝试用一个例子来解释我想要达到的目标:爬山比赛

在这个游戏中,你驾驶一辆汽车(实际上是任何一种疯狂的汽车;)爬山。

现在游戏中有一件特别的事情让我无法理解:

很明显,每个阶段的轨迹都不是随机排列的。也就是说,每次演奏时,曲目的过程总是相同的。

我想学的是:

  • 如何创建这样的滚动游戏场景?是一个巨大的背景节点被滚动,还是有某种花哨的瓷砖?

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

我想最简单的解决方案是使用一个大的背景节点,但是这将如何影响游戏的内存消耗呢?

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-29 12:21:44

我们在我们的SKATiledMap中构建了这样的东西。诀窍是将要跟踪的对象添加到要滚动的背景中。这也将保持背景在屏幕上。

代码语言:javascript
复制
-(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,希望这是有意义的,也是他的帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30525452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档