如何解决Godot 3.3.2 - 从父变量更改子变量而不重置它们
我是 Godot 的新手,我正在尝试制作一个 asteriods 类型的游戏。但是我在让我的太空船射击时遇到了麻烦。 问题是我无法让子弹朝船的方向开火。我在船上设置了一个“角度”变量,并在它被实例化后将其分配给子弹,但我不确定如何在子弹中使用它。无论船的角度如何,子弹都会向右移动。
船舶发射代码:
func _process(_delta):
if Input.is_action_just_pressed("action_fire"):
var Bullet_Instance = Bullet.instance()
Bullet_Instance.angle = angle
owner.add_child(Bullet_Instance)
项目符号代码:
extends KinematicBody2D
var angle = 0
var direction = Vector2(cos(angle),sin(angle))
func _physics_process(_delta):
move_and_slide(direction*500)
我很确定在船舶代码中设置角度变量后,它在项目符号代码中被重置为 0,但我不确定如何解决这个问题。谢谢。
解决方法
angle
变量没有被重置。设置 direction
时未更新 angle
变量。
当场景被实例化时,这里:
var Bullet_Instance = Bullet.instance()
这些变量得到它们的值:
var angle = 0
var direction = Vector2(cos(angle),sin(angle))
然后在此处设置 angle
:
Bullet_Instance.angle = angle
但是您不再使用 angle
,而是使用 direction
:
func _physics_process(_delta):
move_and_slide(direction*500)
我将提供几种方法来解决这个问题:
-
如果您希望每次设置
direction
时angle
都更新,您可以使用setget
创建一个 setter。像这样:var angle = 0 setget set_angle func set_angle(new_value) -> void: angle = new_value direction = Vector2(cos(angle),sin(angle))
-
您可以直接从其他脚本编写
direction
,而根本没有angle
变量。 事实上,您可以设置一个velocity
,并保存每次乘以500
。 -
您可以在
_physics_process
上计算向量(无论如何您已经在进行向量缩放操作):func _physics_process(_delta): move_and_slide(Vector2(cos(angle)*500,sin(angle)*500))
可能有更多方法可以解决。这取决于你。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。