我应该移动世界还是移动玩家?


11

我将要开始开发一款侧向滚动游戏,该游戏的目标是在着陆之前在水平轴上尽可能移动。请注意,我不需要再沿水平轴返回。

我正在使用使用OpenGL和Box2d的Android版AndEngine进行开发。

在开始之前,我需要确定一些重要的事情:我应该使用玩家周围的世界来模拟运动还是实际移动玩家并跟随他使用游戏引擎的摄像头功能?

两种方法似乎都有不同的长处和后备,所以我不知道哪种方法最好。例如,什么将使在途中增加电源并具有良好的动画背景变得更容易?

谢谢!


2
移动相机。
乔纳森·迪金森

1
除非有特定原因不想使用相机(已经为您编写过),否则应该移动播放器和相机。添加“加电”不应受到任何影响。
克里斯托弗·霍伦斯坦

Answers:


9

移动相机(连接到播放器)。我可以想象您的世界有多个物体,例如敌人。如果要移动世界,则每次世界移动时都必须遍历所有这些对象以更新其位置。

如果移动播放器,然后将相机连接到播放器,则资源使用最少。游戏将进入渲染阶段,像遍历每一帧一样循环遍历所有内容,然后将其绘制在位置-camera.position。在这种情况下,摄影机位置将始终等于您的玩家位置。


当然,如果对象是敌人,则不必遍历它们,只需在其update方法中向其添加世界运动即可。
SirYakalot

1
+1。使用camera.setChaseEntity(player);来实现这一目标。
MartinTeeVarga 2013年

6

我总是移动相机并推荐它-有很多原因使我更喜欢此相机,但最重要的原因可能归结为:

  1. 如果您移动摄像机和播放器,则只需更新两个实体即可滚动屏幕。

  2. 如果您需要在屏幕上滚动时移动整个世界,则其中包含未知的实体,并且可能有大量的实体需要更新。


我的确同意,但是我要补充一点,简单地在敌军阶层上加上一条线“ +”将世界的运动微不足道。
SirYakalot

@AsherEinhorn我想您正在谈论一种场景,例如场景图,其中每个节点共享父级的变换,而仅移动根节点(即“世界”)是否会自动转换其他所有内容?因为在任何其他情况下,移动世界都意味着移动世界上的所有事物 -这就是我的帖子的重点。
David Gouveia 2012年

如果世界的运动与玩家成反比,那就好了。即-向前移动,世界向后移动,然后您可以-=玩家向所有游戏对象移动。我同意你的意思,我只是说有两种简单的方法可以使两者都起作用。
SirYakalot

4

确实,这很琐碎,与您描述的内容并没有什么不同。

您可以将背景移到相机和播放器的旁边,或者将播放器和相机与他一起移动。我想如果您仅移动背景,那么要做的事就少了。

尽管我想如果您移动背景,则必须将任何拾音器和敌人作为父项,尽管这虽然微不足道,但仍需要考虑。

我个人会移动播放器,因为我只是喜欢以更现实的方式完成事情。


0

其他答案也不错,但是我想补充一点更好的方法,希望对尝试为另一个项目做出相同决定的人有所帮助。

移动播放器:

  • 很简单,其他所有内容都是静态的,因此,简单起见,移动播放器唯一要做的就是player.x += 5;(伪代码)。
  • 对于大多数人来说,它“点击效果更好”。玩游戏时,您总是认为玩家在移动,而不是相反。因此,将其更容易地理解为“玩家应该移动,而不是世界”,这反过来可能会使某人更容易地将其组织起来。
  • 易于跟踪玩家的位置(位置也是其在地图上的坐标)

感动世界:

  • 如果您的游戏足够大,则不必担心上溢/下溢,因为玩家的位置始终非常靠近,所以不必远离世界中心0
  • 与上述类似,如果您搞砸了3D计算,则不必担心浮点数的结果不准确,因为您在屏幕上看到的所有内容都应该非常接近0
  • 如果做得正确,您可以创造一个“无限”的世界。
  • 必须手动跟踪播放器,播放器的位置始终是一个很小的值,表示播放器在屏幕上的位置(种类),以了解播放器是在地图的左上角还是右下角,您必须以某种方式跟踪它。

归根结底,这取决于项目。如果有人在制作原始的Mario副本,移动世界可能会很复杂,而移动玩家并不会真正造成很多问题。但是,要制作一个大型的开放世界游戏,最好改为移动世界。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.