Godot 引擎有错误或意想不到的功能?

Godot engine have a bug or unexpected feature?

我有一些错误,但我不明白为什么会这样。 按 + 表示升档,- 表示降档。 0-关闭,1,2,3 - 班次。 0 档推力限制 - 0,第 1 档 - 200,第 2 档 - 400,第 3 档 = 600。

如果 acceleration_time=0.5 或 1 或 1.95 或 2.1 或 3.3,下面的代码可以正常工作 如果 acceleration_time=2 或 3 或 4 则推力不起作用.... 推力保持为 0,仅此而已。 我不明白为什么?!

extends Node2D

var shift=0
var thrust=0
var acceleration_time=1 #in seconds between shifts limits
var thrust_limits=[0,200,400,600] #shift0, shift1, shift2, shift3

func _process(delta):
    if Input.is_action_just_pressed("throttleUP"):
        if shift<3:
            shift+=1
            
    if Input.is_action_just_pressed("throttleDown"):
        if shift>0:
            shift-=1
    
    if thrust<thrust_limits[shift]:
        thrust+=200*delta*(1/acceleration_time)
    if thrust>thrust_limits[shift]:
        thrust-=200*delta*(1/acceleration_time)

我认为你运行反对整数除法。

您将 acceleration_time 定义为 1,它是一个 int(不同于 1.0,它是一个 float)。你正在除以 1/acceleration_time,这将是 int 除以 int... 得到 int.

因此,当您有 acceleration_time = 2 时,您正在做 1/2,即 0,这会使您应用到 thrust 的增量无效。


您可以为 float 使用带小数点的文字:1.0/acceleration_time 或者您可以键入您的变量:

var acceleration_time:float = 1

或:

var acceleration_time:float = 1.0

或:

var acceleration_time := 1.0

将变量类型化为您用于初始化它的类型。

是的,GDScript 有类型。使用它们。 这些不仅仅是提示。我再说一遍:这些不仅仅是提示。