Godot area2D子弹,速度取决于方向

时间:2019-08-28 17:27:58

标签: godot gdscript

我正在Godot 3.1中制作自上而下的2D游戏。玩家在射击的地方发射子弹。

我正在使用Godot 3.1和Gdscript。 我有一个bullet场景,其中包含以下节点

Area2D
    > Sprite
    > CollisionShape2D
    > Timer

使用此代码,我将子弹移动

func shoot():
    if canShoot:
        canShoot = false
        var current_rotation = Vector2(1, 0).rotated($".".global_rotation)
        emit_signal('shoot', Bullet, $".".global_position, current_rotation)

func _bulletShoot(Bullet, _position, _direction):
    var bulletInstance = Bullet.instance()
    add_child(bulletInstance)
    bulletInstance.start(_position, _direction)

func start(_position, _direction):
    direction = _direction
    position = _position
    rotation = _position.angle()
    velocity = _position * speed

func _physics_process(delta):
    position += velocity * delta * direction

但是根据我拍摄的方向,速度并不总是相同的。有办法解决吗?

我希望子弹以恒定的速度朝发射方向前进,而不会改变发射方向。

发生的事情是,如果我将子弹指向0°,子弹会变慢,如果我将其指向180°,子弹会变快。

1 个答案:

答案 0 :(得分:0)

您应该在方向上添加.normalized()-这样可以使分量x和y相加为1,但要保持正确的比率。这意味着方向将保持与速度的乘数不变,但仍然给出正确的方向