drpanwe icon

godot framerate independency

drpanwe | PRO | 08/31/20 05:50:33 PM UTC | 0 ⭐ | 3311 👁️ | Never ⏰ | []
Python |

1.67 KB

|

None

|

0 👍

/

0 👎

extends KinematicBody2D
 
# Desired movement in pixels/frame in 60 FPS
# var movement = Vector2(1,0)
# Desired movement in pixels/second in whatever FPS
var movement = Vector2(60,0)
 
# Initialize variables
var time_passed_seconds = 0
var counter = 1
var start_counting_time = 0
var first_time = true
var previous_fps = 0
var current_fps = 0
var actual_start = 0
var screen_width=OS.get_window_size().x
var speed_per_second=0
var speed_per_frame=0
    
func _ready():
    print(OS.get_window_size().x)
    print(get_position())
    set_position(Vector2(0,150))
 
 
func _physics_process(delta):
    if Engine.get_frames_per_second() < 30:
        print("Game is starting ...")
        return
    
    # The game has started
    time_passed_seconds = OS.get_ticks_msec() / 1000.0
    if first_time:
        start_counting_time = time_passed_seconds - delta
        first_time = false
        
    current_fps = Engine.get_frames_per_second()
    
    if previous_fps != current_fps:
        print("FPS change has been detected: ", previous_fps, " --> ", current_fps)
        counter = 1
        previous_fps = current_fps
        
    if counter > current_fps:
        # Reset the framecounter
        counter = 1
    
    # Calculate speed per second
    #speed_per_second = screen_width / 5
    #speed_per_frame = speed_per_second * (1/current_fps)
    #movement = Vector2(speed_per_frame,0)
    
    # Move
    $Sprite.position += movement * delta
    #$Sprite.position += movement
    
    print("Object update: ", counter,"/", current_fps, " frames | delta time:", delta, "s | total time: ", time_passed_seconds-start_counting_time, " s | Position: ", int($Sprite.position.x))
    
    if $Sprite.position.x >= 300:
        print("The end")
        OS.exit_code = 0
        get_tree().quit()
    
    counter += 1

Comments