gpt4 book ai didi

java - LibGDX 鼠标悬停在场景对象上

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:24:39 24 4
gpt4 key购买 nike

我目前正在使用 Java 开发一个 LibGDX 项目,我想知道如何检测鼠标悬停在不是矩形或圆形的形状上。比方说我有一艘宇宙飞船。在渲染它时,您将拥有一个正方形的 Sprite ,在该正方形内您拥有宇宙飞船。问题是宇宙飞船不是正方形,因此您将在该 Sprite 的边缘周围留有空白空间(很可能空白空间是透明的,因此不会对背景或其他场景对象造成任何麻烦)。你如何检测到鼠标悬停在宇宙飞船上而不是整个广场上?有什么方法吗?

最佳答案

制作hit detection的方法有多种更确切。

矩形

首先,我建议您忽略这个问题并使用比实际对象稍小或稍大的矩形(取决于您是希望“命中”更容易还是更难)。如果存在游戏性问题,则可以使其更精确。

+----+
| |
| |
+----+

多个矩形

一旦您获得了对与用于绘制 Sprite 的矩形不同的矩形的支持,您就可以更精确地分解空间。作为下一级近似,您可以将空间分割为更小的部分(例如,使用几个矩形或一个矩形和一个三角形)。

+-+
| |++
| |++
+-+

非矩形

三角点测试非常快(参见 Intersector.pointInTriangle ,实际上还有很多其他有用的方法)。因此,您可以用一个矩形代表您的 spaceship 底部,一个三角形代表它的尖端。

+-+
| |\
| |/
+-+

“嵌套”更复杂的命中检测通常是有意义的(因此您在对象周围有一个粗大的框,并且只有在“命中”时才检查更精确的约束以查看位置是否在这些范围内).

像素

在视频内存可读的系统(不是 OpenGL!)中,您的游戏对屏幕上的像素有更直接的了解,您可以测试对象的 alpha channel (甚至构建特殊的 1 位纹理表示透明或不透明)来检测特定的点击点是否在对象“内部”。这在 OpenGL 中非常困难,因为屏幕上的像素相当抽象。 (当然,这并非不可能,但我认为这是一个不同的问题,而且我不知道答案。)

因此,大多数基于 OpenGL 的游戏(我猜)使用抽象几何体(矩形、三角形、圆形等)来表示对象,并基于此计算命中或未命中,而不是通过纹理像素。

另见 https://gamedev.stackexchange.com/questions/30866/collision-detection-with-non-rectangular-images

关于java - LibGDX 鼠标悬停在场景对象上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23405431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com