当前位置: 首页 > 知识库问答 >
问题:

基于二维瓷砖的游戏:每个瓷砖作为一个对象不切实际?

司徒焕
2023-03-14

几个月来,我一直在尝试各种方法来创建基于二维磁贴的游戏。我一直让每个磁贴都是“磁贴”类的一个单独对象。磁贴对象存储在一个二维对象数组中。这已被证明是非常不切实际的,主要是在同时渲染多个磁贴的性能方面。我只允许在玩家渲染的一定距离内绘制磁贴,但这也不太好。当我尝试在游戏中编辑磁贴的值时,我也遇到了对象返回空指针异常的问题。这与2D数组中的对象未正确初始化有关。

有没有其他更简单的方法可以做到这一点?我无法想象每个基于瓷砖的游戏都使用这种方式,我一定忽略了一些东西。

编辑:也许LWJGL不是正确的库?我在使用LWJGL实现字体系统时遇到了类似的问题…键入多个句子将使FPS降低100甚至更多。

共有2个答案

濮俊美
2023-03-14

二维平铺对象数组应该很好……这是大多数2D游戏使用的,您肯定能够从OpenGL/LWJGL中获得足够好的性能,以良好的速度(100FPS)渲染。

需要检查的事情:

  • 确保剪辑为仅对可见的磁贴集进行非显示(根据屏幕宽度和高度以及玩家的位置)
  • 确保绘制每个图块的代码快速...理想情况下,您应该为每个磁贴只绘制一个纹理正方形。特别是,不应在呈现代码中基于每个磁贴执行任何复杂操作。
  • 如果你很聪明,你可以在一次OpenGL调用中使用VBO绘制多个图块/巧妙地使用纹理坐标等。但对于基于图块的游戏来说,这可能是不必要的。
邰昀
2023-03-14

对于静态对象(不去任何地方,呆在原地)1 tile = 1个对象是可以的。Wolf3d就是这么做的。对于移动对象,您有多种选择。

如果您真的真的想要,可以将对象子部分存储在相邻的单元格/图块中,当对象未完全包含在其中一个单元格/图块中并且跨越一个或多个单元格/图块边界时。但这可能不是很方便,因为您需要动态地将对象拆分为多个部分。

一个更合理的方法是完全不将移动对象存储在单元格/磁贴中,并且或多或少独立于静态对象来处理它们。但是,您需要一些代码来确定对象的可见性。实际上,在图形中,最基础性能的问题来自不必要的计算和渲染。通常,您甚至不想尝试渲染不可见的内容。同样,如果一些计算(尤其是复杂的计算)可以移动到最内层循环之外,它们应该是。

除此之外,很难给出任何具体的建议,因为关于您正在做什么、如何做以及看到实际代码的细节很少。你真的应该把你的问题具体化。

 类似资料:
  • 我试图使用Struts 2 我在 glassfish 服务器上上传时遇到以下错误: 部署过程中发生错误:加载应用程序时出现异常:java.lang.IllegalState异常:ContainerBase.add子级:开始:org.apache.catalina.生命周期异常:java.lang.NoClassDefFoundError: org/spingframewor /core/io/su

  • 我正在开发一个基于2D图块的游戏,其中所有图块旋转45度。 我想这样做: 原因是为了在2D游戏中创建不同的视角。 有相当多的基于瓷砖的游戏教程,但我不知道有像这样的旋转瓷砖。 所以我的问题是:如何创建旋转45度的瓷砖?我会感谢任何代码或链接。 编辑:忘了说我用的是Java Graphics2D,不是OpenGL

  • 我在我的瓷砖碰撞方法中遇到了一个问题。由于某种原因,玩家可以在不应该通过的时候通过一些瓷砖。此外,我不完全确定为什么,但当它卡住时,它可以通过对象向左移动,但只能向左移动。我在下面发布了一些代码,如果有人能给我指出正确的方向就好了。(或者如果有人能找到一个快速的解决方案就更好了!)我的玩家移动方法和瓷砖碰撞方法都在更新方法中调用。

  • 我找不到struts-tiles2-1.4.0-SNAPSHOT的源代码。jar版本的平铺。jar文件位于http://people.apache.org/~pbenedict/struts-osgi/org/apache/struts/struts-tiles2/1.4.0-SNAPSHOT/location。

  • 我已经遵循了这里和这里的文档(非常直接),但是map视图没有加载任何瓷砖。 我使用HMS工具包,配置向导的结果是成功的。我还设置了api密钥,在我的应用程序类和活动类onCreate中都使用了这一行。 setapikey(HUAWEI_API_KEY); null 相关错误日志: E/hmsmapkit_mapview_151:createDelegate:creator==null E/hmsm

  • 我计划使用Spring Boot将MVC应用程序从Spring 3移植到Spring 4。 这个web应用程序使用Apache Tiles。 考虑到百里香叶似乎是Spring的新标准,我有点困惑,并且集成得很好。 在这个应用程序中配置Tiles是一件痛苦的事情。 我们在这个应用程序中有大约20个JSP页面。 问题: 胸腔和瓷砖是相似的概念吗?(模板引擎?) 我已经看到胸腔叶可以和瓷砖一起使用…我不