我正在用 java 制作一个游戏,其中涉及角色在地图上移动并通过从文本文件中读取某些数据在地图周围放置一些固体碰撞对象(即建筑物)。将有多个地图,这些对象的位置会发生变化。我的问题是用某种颜色绘制一个矩形,以指示此类结构后面的碰撞,或者读取鼠标坐标并搜索这些结构的数组以查看该点是否位于建筑物上,从而拒绝移动或更改,更加机智和/ 或更快。如果绘制一个矩形是最好的,将其留在结构后面或在检测到碰撞后将其删除会更好。谢谢你的时间!
2 回答
在我大学三年级的时候,我研究了 Windows Phone 的碰撞检测系统算法。它几乎不是完美的,但它非常高效,可以适应大多数游戏。
它的工作方式非常简单。有两种类型的对象;可碰撞对象(例如敌人或建筑物)以及您希望检查与这些可碰撞对象的碰撞的对象。
当我学习数据结构课程并谈到链接列表时,我就有了这个想法。我想如果每个链接都是一个可碰撞的对象,你可以粘贴已经在其中创建的游戏对象。然后当游戏对象四处移动时,您将有一种轻量级的方法来检查它们的位置是否有碰撞。于是我的系统诞生了。
它实际上是一个在每个游戏周期或您选择检查碰撞时触发的类。你给它你的玩家位置,或子弹位置或任何你想查看的物体是否与某物发生碰撞,它会搜索所有可碰撞的物体位置并进行测试以查看它们是否重叠。
当您添加第二个元素(位置和象限)时,它的真正效率就会发挥作用
例如,如果我将手机屏幕分成几部分,并且我知道我的玩家或子弹在哪个象限,我可以选择只扫描该象限内的可碰撞对象列表。从而将您的搜索算法缩减到其原始大小的四分之一。
检测碰撞有许多不同的方法。这是我在课堂上使用的一个简单示例,用于展示如何检测两个实际上是正方形的圆相撞。正如您所看到的,只需获取圆的中心点坐标和半径,您就可以计算斜边并确定它们在哪里或是否接触。
祝你好运!如果您有任何问题随时问!
这篇文章中的最后一个回复可能会对您有所帮助。这是一个简单的迷宫。迷宫的结构由一个数据文件控制,该文件仅包含 0、1 来表示路径或墙壁。您使用箭头键在迷宫中导航。当按下箭头键时,代码会检查以确保下一个方格不是墙。