问题标签 [gdscript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
180 浏览

signals - 在 Godot 的类内使用信号发射更改控制属性

我有包含多个项目的选项按钮。更改当前项目与执行逻辑的功能相关联。当我用鼠标进行操作时,它按预期工作。但是当我尝试在代码中执行此操作时(例如,在_ready()函数中,则不会调用信号并且不会调用逻辑函数:

我可以手动发出我的逻辑函数:

但是有没有更方便的方法来改变控制属性并在类内发射信号?

0 投票
1 回答
95 浏览

gdscript - 我的向量 3 速度上限公式有什么问题?

3D运动。如果玩家向左向后移动,他们将以任何其他方向的两倍速度前进。MoveDirection.x 和 z 等于各自的模拟摇杆方向,范围从 1 到 -1。

我认为如果沿对角线移动,结果将类似于 0.5、0、0.5,但事实并非如此。

0 投票
1 回答
141 浏览

gdscript - 如何“绝对”取一个数字?(如何抵消一个数字?)

基本上我需要做的是a - b,但我不知道两者都会是什么,如果a是积极的,那么我怎样才能以“绝对”的方式从a中获取b?

我的意思是例如 A = 10 和 B = 5。答案显然是 5。如果 A 现在是 -10,那么现在答案是 -5。无论数字是多少,答案都倾向于 0。如果可以的话,我非常想避免使用 if 语句。

我最初的想法是 a - (b * (b / abs(b)))。但是b可以为0,然后div by 0就会出错。

编辑:更好的说法是我想用一个数量而不是数学来抵消结果。

0 投票
0 回答
4217 浏览

game-engine - get_tree().get_current_scene() 在 godot/gdscript 中返回 null

我试图通过使用get_tree().get_current_scene().get_name()获取当前场景的名称,但出现错误:

尝试在空实例的基础“空实例”中调用函数“get_name”。

我发现那get_current_scene()是给我null的。这是在功能按预期工作的更改场景之后。即 get_tree().get_current_scene().get_name()menu.gd中返回菜单 get_tree().get_current_scene().get_name()game.gd中返回错误,因为get_tree().get_current_scene()null

levelManager.gd(自动加载的单例)[完整脚本]

--[缩短的脚本: ]--

菜单.gd

游戏.gd

我想知道为什么会这样。我从levelManager.gd更改场景的方式有问题吗?

我通过以下方式解决了这个问题:在 levelManager.gd 中设置var current_scene_name—— menu.gdgame.gdcurrent_scene_name——通过调用重新设置self.get_name()

levelManager.gd

-- menu.gdgame.gd --

^ 这显然是一种解决方法。它有效,但我仍然想知道为什么我在调用后得到不同的输出,get_tree()而它们实际上位于节点中的同一个远程位置。

截屏 treeScreenshotBeforeAndAfterChangeingScenes

0 投票
2 回答
1032 浏览

godot - Godot 3.1 告诉我 lock() 和 get_pixel() 是不存在的函数

我正在尝试从噪声纹理生成高度图。据我了解,为了get_pixel()在这种情况下调用图像,必须首先锁定图像。但是,当我尝试运行该程序时,它退出并出现错误:Invalid call. Nonexistent function 'lock' in base 'StreamTexture'.

如果我尝试在不锁定图像的情况下运行它,我会收到错误:Invalid call. Nonexistent function 'get_pixel' in base 'StreamTexture'.

我确定我所遵循的说明是针对我正在运行的同一版本的 Godot(3.1),那么为什么引擎会告诉我这些lock()并且get_pixel()是不存在的功能呢?

我的代码在这里:

任何帮助是极大的赞赏。

编辑 - 我已经(尝试)实施评论中建议的更改(但我仍然不知道如何处理颜色变量)并附上了我生成的代码的屏幕截图以及我的一些评论试图向自己解释为什么这个过程应该有效(我认为)。它还显示了我的节点结构,这就是我选择将其显示为图像的原因。但是,当我尝试运行它时,程序崩溃并显示错误。

高度图失败

0 投票
0 回答
174 浏览

debugging - 我在我的游戏中添加了声音,但由于声音没有通过它关闭我的游戏我的缩进有什么问题吗?

我在游戏中添加了声音,但是在我玩了几下游戏后,它会关闭并说(尝试在空实例上的基本“空实例”中调用函数“播放”),然后我去堆栈交换,他们说我的前两个函数的缩进有问题,来这里寻求缩进帮助。

我尝试缩进前两个,但它仍然不起作用,我会收到更多错误说“意外缩进”或解析器错误:Unndent 与任何其他缩进级别不匹配。

我希望我的游戏声音可以播放,但点击几下后它会关闭并显示(尝试在空实例上的基本“空实例”中调用函数“播放”)

0 投票
0 回答
160 浏览

godot - 如何从实例化场景中的另一个场景初始化节点?

所以,我有一个带有 kinematicBody2D Soldier 的实例场景。我之前写了一个脚本,它获取“敌人”精灵的位置并围绕它“画”一个圆圈。如果士兵进入这个区域,他会旋转到精灵并开始射击。
这是旧代码:

问题是,士兵不再是主要场景的一部分,他被实例化了。
如何将敌人精灵节点放入实例化对象脚本中?

0 投票
0 回答
1044 浏览

godot - 如何在 Godot 退出时保存游戏数据

当用户退出应用程序时,我正在尝试将字典作为 JSON 保存在文件中。我需要做什么才能使我的代码在程序运行时结束时运行?

我在 Windows 上使用 Godot 3.1。我已经尝试接收 _exiting_tree 信号,并尝试了 MainLoop.NOTIFICATION_WM_QUIT_REQUEST 通知,但在这两种情况下,代码块都不会运行。奇怪的是,如果我没有点击窗口内的任何东西(边框除外),它似乎有时会起作用

这是控制台的输出:

而我希望看到:

0 投票
1 回答
205 浏览

godot - 需要帮助理解 Godot Docs 中的代码示例

我正在尝试学习 Godot 3D 中的碰撞,但我在理解 Godot Docs 中的此代码示例时遇到了一些困难: Godot Docs - Advanced Vectors

我怎样才能理解这段代码?具体来说,在读取的部分中if (min_A > max_B or min_B > max_A):,具体发生了什么让引擎确定两个网格没有重叠或碰撞?

我提供链接的网站的代码示例如下:

0 投票
1 回答
424 浏览

godot - 使用 test_move() 并在 Godot 3.1 中找到 Transform2D

我一直在尝试使用 KinematicBody2D 的 test_move() 来查看我的角色是否靠近墙壁,但没有触摸它,但我遇到了一些麻烦,因为实际文档只是

然后尝试沿着向量 rel_vec 移动身体。如果发生碰撞,则返回 true。

我能找到的所有教程都只显示了该函数的旧版本,其中唯一的参数是 Vector2,它更简单一些。

据我了解,Transform2D 是要测试的对象初始位置,Vector2 给出它应该移动的方向,无限惯性处理对象是否在撞击时旋转。

我现在的问题是 Transform2D,到目前为止,我在文档中找到的唯一一个似乎应该以该格式返回对象变换的函数是 CollisionObject2D

但无论我尝试什么,我似乎总是从中得到一个单位矩阵,我最终试图弄清楚这一点的代码看起来像

我不确定我误解了哪个函数,无论是我用来获取 owner_id 的 test_move()、shape_owner_get_transform() 还是 get_shape_owners(),但我们将不胜感激。