【发布时间】:2011-10-14 19:24:46
【问题描述】:
我在弄清楚一些事情时遇到了一点问题(显然)。
我正在创建一个 2D 自上而下的 mmorpg,在这个游戏中,如果有人玩过的话,我希望玩家能够在类似于 Pokemon 游戏工作方式的平铺地图上移动。
如果还没有,请想象一下:我需要加载各种区域,从包含图像和位置(x,y)和对象(玩家,物品)的图块构建它们,但玩家只能看到一部分一次,即 20 x 15 瓷砖宽的区域,可以是 100 多块瓷砖高/宽。我希望“相机”跟随玩家,让他保持在中心,除非玩家到达加载区域的边缘。
我不一定需要代码,只需要一个设计计划。我不知道如何去做这种事情。
我正在考虑可能将整个加载区域分成 10x10 块,称为“块”并加载它们,但我仍然不确定如何将块加载到屏幕外并仅在玩家在范围内时显示它们.
图片应该描述它:
有什么想法吗?
我的解决方案: 我解决这个问题的方法是通过 JScrollPanes 和 JPanels 的奇妙世界。
我在 JScrollPane 中添加了一个 3x3 的 JPanel 块,添加了几个滚动和“goto”方法来使 JScrollPane 居中/移动,瞧,我有了我的相机。
虽然我选择的答案对于想要做 2D 相机的人来说更通用一些,但我这样做的方式实际上帮助我更好地想象我正在做的事情,因为我实际上有一个物理“相机” (JScrollPane) 在我的“世界”中移动(JPanels 的 3x3 网格)
只是想我会在这里发布这个,以防有人在谷歌上搜索答案并且这个出现了。 :)
【问题讨论】:
-
这个问题对您来说可能看起来很复杂,因为您正在处理二维; x 和 y。您应该获得一些游戏开发经验来解决更简单的问题,例如一个横向滚动平台游戏,只需要您考虑 x 的问题,而忽略 y。当我以业余爱好开始游戏开发时,我制作了一些静态视图游戏,例如乒乓球和太空入侵者,并通过平台游戏转向了 2D 横向滚动。我的下一个项目将类似于您在水平和垂直运动中所做的事情,我希望在那之后我可以将头绕在 3D 周围。祝你好运!
-
要考虑的另一件事:您说黑色是“加载区域”。在 Pokemon、Zelda 和所有其他使用这种相机风格的游戏中,您无法将角色移动到屏幕上尚未出现的位置。这意味着您没有“加载”整个区域,只有玩家可以看到的部分。做出这个决定会产生后果,如果你只加载你正在绘制的区域,玩家可以走开然后走回来,也许一些以前不存在的随机项目会出现,然后如果他们再次走开并返回,就会消失.思考问题的两种方式..
-
我发现了我的问题。我决定收集一组图块,并将从服务器传递的字符串数组和当前图块集合中的每个地图拼凑在一起。摄像头始终以播放器为中心,效果非常好。