我一直在寻找一种强大的寻路方法,我正在开发基于平台游戏的游戏,A*看起来像是最好的方法.我注意到有一个关于Godot中AStar实现的演示.然而,它是为基于网格/磁贴的游戏编写的,我无法适应平台,其中Y轴受到重力的限制.
我找到了一个非常好的答案,描述了A*如何应用于Unity中的平台游戏.我的问题是......是否可以在Godot中使用AStar来实现上述答案中描述的相同内容?如果不使用内置的AStar框架,可以做得更好吗?在GDscript中它是如何工作(有或没有AStar)的一个非常简单的例子是什么?
虽然我已经发布了100点奖金(它已经过期),但我仍然愿意发布另外100点赏金并奖励它,等待回答这个问题.
PS:如果你在这个问题的正文中看到一些你觉得不合适的东西,需要注意或澄清......不要贬低我的投票!展示一些诚信并发表评论.你所做的一切都在伤害那些投票给我的其他人,并且实际上对这个问题的答案感兴趣.
在我的 2D 游戏中,玩家能够摧毁箱子、具有两种碰撞形状的物体。当被摧毁时,板条箱会产生也具有碰撞形状的物品。但是当调用以下函数时,Godot控制台中会显示许多类似的错误
代码:
func _on_Crate_item_dropped(collectible, pos):
collectible.init(pos, Vector2(rand_range(30, 100), rand_range(-10, 10)))
$CollectibleContainer.add_child(collectible) # error occurs here
Run Code Online (Sandbox Code Playgroud)
错误:
ERROR: Can't change this state while flushing queries. Use call_deferred() or set_deferred() to change monitoring state instead.
Run Code Online (Sandbox Code Playgroud) 我试图确定哪个控制节点刚刚改变了焦点。通过将节点上的焦点模式更改为 ,已设置另一个控制节点以使用焦点All。从该节点的脚本中,我可以通过检查来判断它是否具有焦点has_focus。但是,我想从另一个脚本中判断它是否改变了焦点。
我知道有focused_entered一些focus_exited信号可以监听,但是这些组件在组件树上彼此相距很远,我不想通过一堆不相关的组件连接或冒泡信号。
控制文档说:
只有一个
Control节点可以成为键盘焦点。
由于只有一个节点处于焦点,是否有一个全局函数可以确定单个节点当前具有焦点的内容?我如何知道全球焦点何时发生变化?
GDScript 中是否有等效的 C# 结构/类?例如
struct Player
{
string Name;
int Level;
}
Run Code Online (Sandbox Code Playgroud) 我在 Godot 中创建了一个简单的网络聊天程序,我用它来向高中生教授基本加密。我想添加一个自定义的加密类,以允许学生创建自己的密码。这是我创建的一个简单的实现来测试该类:
class Security:
extends Resource
func _init():
print("Started.")
func encrypt():
print("Encrypting.")
Run Code Online (Sandbox Code Playgroud)
在我的主脚本中,我有这段代码来初始化类(我在顶部的变量空间中,在任何函数定义之前):
const Security = preload("res://scripts/security.gd")
var sec = Security.new()
Run Code Online (Sandbox Code Playgroud)
然后这是我在脚本中的函数之一:
func send_message():
sec.encrypt()
Run Code Online (Sandbox Code Playgroud)
任何时候控制台中都不会出现任何打印消息。当我触发 send_message 函数时,出现以下错误:
无效调用。基础“Rederence (security.gd)”中不存在函数“加密”。
我在创建类时做错了什么,或者我如何将它添加到我的脚本中?或者我正在尝试的操作实际上并不可行(例如,我应该添加一个节点,向其添加脚本并在场景中使用该节点)吗?
谢谢。
我正在尝试制作一款约会模拟游戏,作为编程方面简单的第一个游戏。我不知道如何更改脚本中的角色精灵。
角色精灵.gd
extends Sprite
var char_tex = load("res://Sprites/Lu2.png")
func _ready():
set_texture(char_tex)
func _input(event):
if event is InputEventMouseButton:
char_tex = load("res://Sprites/Lu1.png")
update()
Run Code Online (Sandbox Code Playgroud) 这有什么技术原因呢?我觉得奇怪的是他们不能都只使用位置。是遗留物吗?
我在下面有一个基本代码。我正在尝试让玩家不要在斜坡上滑下来。我现在的坡度是 45°。如果玩家在斜坡上停止移动,它会滑下(可能是因为velocity.y += delta * gravity.y)。我可以通过法线获得角度并velocity.y = 0在玩家在斜坡上时设置并且不会滑下。但我不确定这是否是最好的方法。您对我如何实现这一目标有任何想法吗?顺便说一句,有没有办法在 gdscript(即 d efault_gravity)上获取 project_settings 值?
extends KinematicBody2D
var gravity = Vector2(0,700)
var velocity = Vector2()
var hSpeed = 150
var onSlope = false
func _ready():
set_fixed_process(true)
pass
func _fixed_process(delta):
var left = Input.is_action_pressed("ui_left")
var right = Input.is_action_pressed("ui_right")
if left:
velocity.x = -hSpeed
if right:
velocity.x = hSpeed
if !left && ! right:
velocity.x = 0
velocity.y += delta * gravity.y
# if onSlope && !left && !right: …Run Code Online (Sandbox Code Playgroud) 我对GDScript 语言的 Godot Docs 的一部分感到困惑。在页面中间的“引用函数”部分,它说您不能将函数存储在变量中,然后似乎立即自相矛盾。
Godot 函数可以存储在变量中吗?
引用函数
与 Python 不同,函数不是 GDScript 中的第一类对象。这意味着它们不能存储在变量中,不能作为参数传递给另一个函数或从其他函数返回。这是出于性能原因。
要在运行时按名称引用函数(例如,将其存储在变量中,或将其作为参数传递给另一个函数),必须使用 call 或 funcref 助手:
考虑以下场景:给定 n 个像“阴影”(具有减半 alpha 值的黑色)的 Polygon2D 节点,如何使用 merge_polygons_2d() 方法将所有这些节点组合成单个 Polygon2D 节点?
使用以下硬编码代码,我成功地将所有三个多边形合并为一个。但我无法弄清楚如何通过迭代来自动化该过程,以避免在有超过 10.. 20.. 多边形需要合并的情况下采用我的方法。
func Merge_Map_Shadows() -> void:
# Get all "shadow" polygons and store them in an array,
# then apply xform transform in order to retain it's position and rotation.
# After that, delete the original shadow.
if Map_Shadows.get_child_count() > 0:
var _detected_shadows: Array = []
for _shadow in Map_Shadows.get_children():
var _transformed_polygon: PoolVector2Array = []
for _vector in _shadow.polygon: _transformed_polygon.append(_shadow.transform.xform(_vector))
_detected_shadows.append(_transformed_polygon)
_shadow.call_deferred("queue_free")
# Create the …Run Code Online (Sandbox Code Playgroud) gdscript ×10
godot ×10
a-star ×1
function ×1
game-ai ×1
game-physics ×1
geometry ×1
path-finding ×1
polygon ×1
scripting ×1