【发布时间】:2013-01-21 08:32:52
【问题描述】:
说明:
EDIT3:MASSIVE CLEAN UP,因为没有明确解释。
我正在尝试用图块和实体构建一个 2D 关卡。实体是例如可以切割的树。我需要为每个实体存储数据(例如,剩下多少个印章)。我希望它们具有更动态的位置(双打)和更动态的精灵宽度和高度。我的图块是 32x32 像素,而我的树不会是一个图块,而是一个高度大于宽度的精灵。
我希望在其他对象之前绘制更接近关卡顶部的对象。在这种情况下,树后面的角色将无法在树中或树前渲染。这种情况也适用于其他同类对象(如树)。 我认为遍历实体并计算每个实体的位置可能效率太低,因为关卡中可能有很多实体。
我做了一些研究,发现某些库允许存储对象及其在 MAP 中的位置(谷歌 Guava 中的 BiMap)。
问题:
- 这是一种低效的方式吗.. 但是有一些改变可以
应用于使渲染更有效(如果是这样,可能是什么 优化)? - 或者这是呈现实体的低效方式吗? 有更好的方法(如果有,Java 中还有哪些其他方法)?
- 或者还有什么我没有列出的?
EDIT2:我浏览了我在下面的编辑中发布的链接。 似乎 Google 的 Guava(我认为这是正确的)有 BiMaps。在常规 Java 中是否有与此等价的功能?否则谷歌的图书馆可能会为我解决这个问题。但是我宁愿不为这个界面安装这么大的库。
最后:
很有可能答案就在我眼前,在 StackOverflow 或互联网上的其他地方。我已经尽力寻找,但一无所获。 如果您对搜索查询或任何可能对我有用的相关链接有任何建议,如果您将它们发布在 cmets 中,我将不胜感激。
感谢您花时间阅读/帮助我;)
编辑:
我看过; Efficient mapping of game entity positions in Java 。 我认为它与这个问题密切相关。但我认为这不是我想要的。我将非常仔细地查看第二个答案,因为这可能会为我解决这个问题.. 但我不确定。
解决方案
解决方案是使用数组、数组列表或其他方式来跟踪您的实体。每次滴答/更新,您将获取所有对象的 Y 坐标并将它们存储在另一个数组/arraylist/map/other 中,其大小与存储实体的位置相同。在实体的每个等效位置上,您将存储它是 Y . 然后你会用另一个循环或使用http://www.leepoint.net/notes-java/data/arrays/70sorting.html 来订购它。
然后在渲染的时候:
for(int i = 0; i < entityArray.length; i++)
entityArray[i].render();
当然,您可以通过仅渲染屏幕上或屏幕附近的内容来更有效地渲染它。 但这基本上是在 2D 顶视图/前视图中执行此操作的方式。
【问题讨论】:
-
哦,是的;对于以后阅读本文时遇到相同问题的每个人:查看主要帖子。解决方案应该在那里!
标签: java