0

我是godot和编程的新手。我在实现 Timer 节点时遇到问题。我正在编写一个简单的脚本来实现类似 zelda 的相机系统。相机系统按预期工作,但是我想在相机 lerp 期间冻结角色(最终是 npc)。我打算为此尝试使用计时器,而那是我遇到障碍的时候!

extends Camera2D

var width: = 1024
var height: = 640
var x_offset = width/2
var y_offset = height/2

var new_position = Vector2()
var timer 

func _ready() -> void:
    global_position = Vector2(x_offset,y_offset)
    new_position = global_position
    timer = Timer.new()
    timer.connect("timeout", self, "_grid_transition_pause")
    timer.one_shot = true
    timer.wait_time = 1
    add_child(timer)


func _grid_transition_pause() -> void:
    print("success")

func _process(delta: float) -> void:

    var player_position = get_node("../Player").global_position

    var x = floor(player_position.x/width) * width + x_offset
    var y = floor(player_position.y/height) * height + y_offset
    new_position = Vector2(x,y)

    if new_position != global_position:
        global_position = lerp(global_position, new_position, 0.07)
        new_position = global_position
        print("position changed")
        timer.start()

    if Input.is_action_just_released("test_key"):
        print("test key")
        timer.start()

我添加了一个输入键,看看我是否可以这样启动计时器。我可以。但是有一件奇怪的事情:只有当相机处于原始位置时,才能使用输入键启动计时器。一旦相机完全移动,输入键就不再起作用,即使回到原来的位置。

我是否从根本上误解了如何使用计时器节点?感谢您的时间和帮助一个人!

4

1 回答 1

0

您的计时器只能启动一次,因为您设置了timer.one_shot = true. 删除您想要多次启动计时器的这一行。

于 2019-11-22T21:28:13.050 回答