首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >痛打他们的游戏空间管理?

痛打他们的游戏空间管理?
EN

Stack Overflow用户
提问于 2009-11-02 07:27:45
回答 3查看 1.2K关注 0票数 2

我正在制作我的2D引擎,用于打架游戏(Castle Crashers是我所说的打架游戏或类似于Brawler的游戏)。

我将支持2D精灵和2D粒子发射器。现在这一切都在引擎中完成了。但我遇到一个问题,我想请教一下:

这是关于“空间”的管理,我认为是要做一些事情,如下图所示:

alt text http://img337.imageshack.us/img337/9162/spacingprototype1.png

我的想法是创建一个网格(空间散列或网格),我的粒子发射器/ 2D精灵将居住的地面。在我的图片中,我已经从1到N枚举了这个插槽(不一定要是35,它只是为了显示)。我的想法是按照从0到N的顺序绘制"GameElements“(精灵/发射器)(从0到N),这样我就可以让它们正确地重叠显示在屏幕上(从后到前)。

我知道这可以通过比较每个元素的较低Y轴并执行“快速排序”来完成,但拥有Grid可以让我以更好的方式执行碰撞检测,如果我执行类似A*的操作来实现某种AI,它也可以帮助我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-02 19:55:13

如果您希望对需要相互测试的对象数量进行某种优化,则可能需要考虑使用四叉树http://en.wikipedia.org/wiki/Quadtree

其想法是将屏幕划分为4个节点,将所有项目放在它们所属的节点中,如果其中有需要测试的精灵/项目/任何内容,则将您刚刚创建的节点划分到另外4个节点中。继续执行此操作,直到达到节点中的特定大小或数量的项目。

然后,您可以询问top-node是否包含您要测试的项目。然后,该节点将询问子节点是否包含该项,而子节点又将询问其子节点。这样就可以跳过屏幕的很大一部分(如果它位于孩子00中,你可以跳过孩子01,10和11)。然后,当需要执行更具体的碰撞检测时,您会得到一个项目列表。

如果你想让它可视化,它看起来有点像这样:

alt text http://geodata.ethz.ch/geovite/tutorials/L2GeodataStructuresAndDataModels/en/images/quadtree.gif

票数 5
EN

Stack Overflow用户

发布于 2009-11-02 19:58:54

将它们发送到Z缓冲区,让它来操心吧。

如果你在将来发现它太慢了(显然是通过分析),那么考虑优化它。

选择最简单的解决方案,然后继续前进。

票数 1
EN

Stack Overflow用户

发布于 2009-11-02 20:17:51

如果有两个精灵占据网格中的同一个框,你的方法就会失败。假设你有两个敌人都站在同一个盒子里。一个人站在另一个人的前面。你先画哪一个?您将需要两种算法-一种算法将精灵划分为网格,另一种算法查看给定网格框中所有精灵的z坐标,并根据该值绘制它们。

一种简单得多的方法是拥有所有sprites的单个集合。它应该存储所有按z坐标排序的精灵(从列表开头的屏幕后端到后端的屏幕前端)。循环遍历集合,并在每个子画面出现时绘制它。当精灵移入或移出屏幕时(即,它z坐标变化),您可以执行一个非常简单的排序来在集合中移动单个子画面。继续与列表中的下一个精灵进行交换,直到下一个精灵的z坐标大于/小于更改后的精灵的坐标(如果合适)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1658776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档