我有一些bug,但我不明白为什么它能这么工作。按+平均升档,-降档。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
定义为作为int
的1
(与作为float
的1.0
不同(。你正在除以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有类型。使用它们这些不仅仅是暗示。我重复一遍:这些不仅仅是暗示