Godot 3.3.2 - 在不重置父变量的情况下更改父变量
Godot 3.3.2 - Changing child variables from the parent without them being reset
我是 godot 的新手,我正在尝试制作一个小行星类型的游戏。但是我无法让我的 space 飞船开火。
问题是我无法让子弹朝船的方向开火。我在 ship 中设置了一个 'angle' 变量,并在实例化后将其分配给 bullet,但我不确定如何在 bullet 中使用它。无论船的角度如何,子弹都会向右移动。
船舶点火代码:
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
变量没有被重置。当您设置 angle
.
时,direction
变量未更新
场景实例化时,这里:
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))
可能有更多方法可以解决这个问题。由你决定。
我是 godot 的新手,我正在尝试制作一个小行星类型的游戏。但是我无法让我的 space 飞船开火。 问题是我无法让子弹朝船的方向开火。我在 ship 中设置了一个 'angle' 变量,并在实例化后将其分配给 bullet,但我不确定如何在 bullet 中使用它。无论船的角度如何,子弹都会向右移动。
船舶点火代码:
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
变量没有被重置。当您设置 angle
.
direction
变量未更新
场景实例化时,这里:
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))
可能有更多方法可以解决这个问题。由你决定。