首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在戈多3中实现任务指针指南?

如何在戈多3中实现任务指针指南?
EN

Stack Overflow用户
提问于 2022-01-08 19:24:53
回答 1查看 55关注 0票数 -3

我正在做一个2d的平台。(使用gdscript)我一直在尝试做一个向导箭头,指示你去哪里,并且一直在失败。据我所见,目前还没有戈多教程。然而,我设法找到了一个统一教程,但一直有一个困难的时间转换指令为戈多。https://youtu.be/dHzeHh-3bp4预先感谢:)

EN

回答 1

Stack Overflow用户

发布于 2022-01-08 22:26:20

我假设指示器是一个Sprite,有任何你想要显示的图标。

顺便说一句,您需要一个对Camera2D的引用。在3D中,您可以向戈多请求当前的Camera__,与之不同的是,您必须自己处理对当前Camera2D的引用。

我假设您已经有了对Camera2D的引用(可能在Camera2D脚本中有代码)和对指示符Sprite的引用(这是另一个可能有代码的地方)。

我还假设您没有旋转的Camera2D

首先,我们需要屏幕的中心:

代码语言:javascript
复制
var center := camera.get_camera_screen_center()

然后,我们就可以得到向量到我们想要的位置:

代码语言:javascript
复制
var vec := target - center

其中target是您要指向的全局坐标中的位置。顺便说一下,如果vecVector2.ZERO__,那么屏幕中心的目标。

让我们按照clampViewport大小来确定它。我们将使用一半的大小,因为我们是从屏幕的中心测量。我还将添加一个margin,我将回到这个问题,现在,假设是margin = Vector2.ZERO

代码语言:javascript
复制
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)
    )

如果它们相等,就意味着目标在屏幕上(不需要夹紧):

代码语言:javascript
复制
if clamped_vec == vec:
    # target on screen
    pass
else:
    # target out of screen
    pass

现在,要放置指示器,我们需要两样东西:旋转和位置,对吗?

旋转很容易。这是我们vec的角度

代码语言:javascript
复制
sprite.global_rotation = vec.angle()

对于这个位置,好吧,这将是我们的clamped_vec,除了我们需要放置指示器。所以我们需要加一个..。空白处!啊哈!因此,将margin调整到您所拥有的指示器的大小,clampled_vec将给我们提供位置,我们只需将center添加回:

代码语言:javascript
复制
sprite.global_position = clamped_vec + center

这样就行了。

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

https://stackoverflow.com/questions/70635671

复制
相关文章

相似问题

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