我正在寻找一个精灵(具体来说是子弹),通过单击鼠标左键从另一个精灵(枪的末端)出来,然后让子弹朝着鼠标处于原位,然后在单击发生后不改变位置。我的解释很糟糕,但是基本上我是在寻找要沿鼠标方向移动的项目符号,并且一旦单击鼠标,就不会改变位置并遵循该方向,直到它离开屏幕为止。我正在尝试做的一个很好的例子是射击和子弹如何在Terraria游戏中发挥作用。
我一直在尝试使用Position2D找出答案。我在枪的尽头有Position2D,我希望将子弹装入该枪中。我也尝试通过Google和Youtube进行研究。现在,我有一个随鼠标位置旋转的精灵(手臂),还有一个附着在手臂上的精灵(枪)。我正在尝试使用手臂信息来找到方向,但是我无法弄清楚。我是一个一般的编码初学者。
这是我的手臂根据鼠标位置旋转的代码:
extends Sprite
var Mouse_Position
func _process(delta):
Mouse_Position = get_local_mouse_position()
rotation += Mouse_Position.angle()*0.2
当前用于我的项目符号的代码是:
extends Area2D
const SPEED = 100
var velocity = Vector2()
var Mouse_Position
func _physics_process(delta):
velocity.x = SPEED * delta
Mouse_Position = get_local_mouse_position()
rotation += Mouse_Position.angle()*0.2
translate(velocity)
func _on_VisibilityNotifier2D_screen_exited():
queue_free()
这里还有一些额外的东西可以加载到其中:
const BULLET = preload("res://Bullet.tscn")
if Input.is_action_just_pressed("shoot"):
var bullet = BULLET.instance()
get_parent().add_child(bullet)
bullet.position = $Position2D.global_position
答案 0 :(得分:0)
您需要为实例之前的方向设置一个变量,并且在调用 _process 函数时不要更改它:
类似的东西:
extends Area2D
const SPEED = 100
var velocity = Vector2()
export (int) var dir # <--- Add this variable to modify the direction of the bullet from outside of the scene
var Mouse_Position
func _physics_process(delta):
$Sprite.position += Vector2(SPEED * delta, 0.0).rotated(dir)
$Sprite.global_rotation = dir # Set the rotation of the Bullet
func _on_VisibilityNotifier2D_screen_exited():
queue_free()
当您实例化子弹时:
var bullet = BULLET.instance()
bullet.dir = $Sprite.global_rotation # <-- Assgin the rotation of the player to the bullet
get_parent().add_child(bullet)
bullet.position = $Sprite/Position2D.global_position # <-- Start the Bullet on the position2D
结果: