【问题标题】:Timer.start() not being called as expectedTimer.start() 未按预期调用
【发布时间】:2020-09-03 03:18:42
【问题描述】:

我是 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()

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

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

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 2022-01-11
      相关资源
      最近更新 更多