![]() |
Attention | Topic was automatically imported from the old Question2Answer platform. |
![]() |
Asked By | even_nuller |
I have a time variable with a value that can either be FUTURE or PAST and I have a function that changes the value from FUTURE to PAST or PAST to FUTURE, I want that function to get called whenever I press a button with Input.is_action_just_pressed(“change_time”) but when I do the function gets called twice which returns the time variable to it’s original value. Even if I do that in _input function it still get’s called twice.
extends Node2D
func _ready():
pass
func _process(delta):
update_players()
func change_time(time : int = -100):
if time != -100:
Globals.time = time
if Globals.time == Globals.FUTURE:
Globals.time = Globals.PAST
elif Globals.time == Globals.PAST:
Globals.time = Globals.FUTURE
func update_players():
if Globals.time == Globals.FUTURE:
Globals.player_future.enable_player()
Globals.player_past.disable_player()
elif Globals.time == Globals.PAST:
Globals.player_past.enable_player()
Globals.player_future.disable_player()
func _input(event):
if Input.is_action_just_pressed("change_time"):
change_time()
print("time changed")
What inputs are you using for the change_time action?
There’s a hacky solution you can use (which you shouldn’t need to!) but you can save OS.get_ticks_msec()
in a variable when your input event is called, and then check if enough time has passed since the last input…
var lastInput
func change_time():
if abs(OS.get_ticks_msec() - lastInput) > 200:
lastInput = OS.get_ticks_msec()
etc...
rossunger | 2022-02-13 00:35
Try using event.is_action_pressed("change_time")
instead.
samildeli | 2022-02-14 14:17
When i have came across this problem and I’ve always solved it like this:
func _input(event): var button_pressed = false if Input.is_action_just_pressed("change_time") and button_pressed == false: button_pressed = true change_time() print("time changed") if Input.is_action_just_released("change_time"): button_pressed = false
LittleTing1 | 2022-02-19 17:42