对不起,如果这是一个愚蠢的问题,但我正在开始像ikaruga等空间射击......并注意到子弹,玩家,敌人不会随着滚动而移动。这类游戏是否代表了屏幕空间中的所有内容?
我的意思是,你可以在后台拥有一个滚动/旋转环境,但是碰撞等等......只是在屏幕空间??
基于此,您如何看待这个游戏流程:
1)玩家处于屏幕坐标 2)敌人是世界坐标,直到它们被唤醒,此时它们被转换为屏幕坐标(仅使用当前的世界卷轴位置)。 3)敌人和玩家子弹是屏幕坐标。 4)如果我们在世界上有障碍(例如在2D游戏中我们有一些代表障碍物的瓷砖)我们必须将子弹,敌人,玩家转换为世界以检查与地图的碰撞。
优点: - 移动的一切都是屏幕空间,易于检查恐龙实体之间的碰撞等......
缺点: - 我们必须将每个实体转换为世界坐标以检查障碍物。
另一种方法是让世界上的一切,并移动玩家(星舰),子弹等......通过相同数量的滚动移动并应用自己的速度。
优点: - 所有内容都是屏幕空间映射/实体,因此无需转换。
缺点: - 我们必须遍历每个实体,根据滚动速度对其位置应用修复,以模拟屏幕空间中的内容。
您认为这是最佳解决方案吗?我现在正在实施第一个。
提前致谢, 进制打印。
答案 0 :(得分:0)
我会远离使用两种不同的跟踪系统。如果你想要拦截子弹/敌人的障碍,那将很快成为头痛。
当我设置我的滚动条时,我有一个单独的子弹阵列,我与标准游戏对象分开,以便我可以用必要的信息更新每个阵列。我把我的子弹放在世界空间但是我想要出现在屏幕空间中我根本不会将世界玩家运动变换为他们的更新。
我会建议这样的方法,保持类似的对象分组,然后告诉他们对不同的刺激做出反应,而不是将它们保存在两个不同的世界中,并留下你的子系统(碰撞,渲染)来处理这些问题。因为你最终会在子系统中编写每个函数的2个版本。