我正在做一个2d的平台。(使用gdscript)我一直在尝试做一个向导箭头,指示你去哪里,并且一直在失败。据我所见,目前还没有戈多教程。然而,我设法找到了一个统一教程,但一直有一个困难的时间转换指令为戈多。https://youtu.be/dHzeHh-3bp4预先感谢:)
发布于 2022-01-08 22:26:20
我假设指示器是一个Sprite,有任何你想要显示的图标。
顺便说一句,您需要一个对Camera2D的引用。在3D中,您可以向戈多请求当前的Camera__,与之不同的是,您必须自己处理对当前Camera2D的引用。
我假设您已经有了对Camera2D的引用(可能在Camera2D脚本中有代码)和对指示符Sprite的引用(这是另一个可能有代码的地方)。
我还假设您没有旋转的Camera2D。
首先,我们需要屏幕的中心:
var center := camera.get_camera_screen_center()然后,我们就可以得到向量到我们想要的位置:
var vec := target - center其中target是您要指向的全局坐标中的位置。顺便说一下,如果vec是Vector2.ZERO__,那么屏幕中心的目标。
让我们按照clamp的Viewport大小来确定它。我们将使用一半的大小,因为我们是从屏幕的中心测量。我还将添加一个margin,我将回到这个问题,现在,假设是margin = Vector2.ZERO。
var helf_size := (get_viewport().size - margin) * 0.5
var clamped_vec := Vector2 (
clamp(vec.x, -half_size.x, half_size.x),
clamp(vec.y, -half_size.y, half_size.x)
)如果它们相等,就意味着目标在屏幕上(不需要夹紧):
if clamped_vec == vec:
# target on screen
pass
else:
# target out of screen
pass现在,要放置指示器,我们需要两样东西:旋转和位置,对吗?
旋转很容易。这是我们vec的角度
sprite.global_rotation = vec.angle()对于这个位置,好吧,这将是我们的clamped_vec,除了我们需要放置指示器。所以我们需要加一个..。空白处!啊哈!因此,将margin调整到您所拥有的指示器的大小,clampled_vec将给我们提供位置,我们只需将center添加回:
sprite.global_position = clamped_vec + center这样就行了。
https://stackoverflow.com/questions/70635671
复制相似问题