简而言之:我如何制作一个不是无限的滚动游戏?
我试着通过一个例子来解释我想要达到的目标:希尔攀登赛
在这个游戏中你驾驶一辆汽车(或任何类型的疯狂车辆,实际上;))上山
现在有一个关于游戏的特别之处,我无法理解:第
很明显,每个阶段的曲目都不是随机排列的。即每次演奏时,曲目的路线始终相同。
我想学的是:
我的游戏需要滚动两个轴(x,y)。玩家节点在游戏区域的中心开始并且可以移动。这个区域周围有一些障碍,其中一些最初是不可见的,因为它们位于游戏世界的边缘。·
我认为最简单的解决方案是使用大背景节点,但这会如何影响游戏的内存消耗?
感谢您的帮助!
答案 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
希望这有意义并且有用。