Posted By: 3run
bounce + low framerate ?? - 04/17/18 21:43
Hi!
Can anyone please tell me, why does bounce go wrong when framerate is low?
Please, take a look at this example (my attempt to create bouncing grenade):
As you can see, it starts moving towards the left, slowly...
Why does that happen? Also, there is always small difference in grenade's movement, on different framerate (I guess it's framerate independent, but there is still a difference!).
Any help would be appreciated!
Best regards!
Can anyone please tell me, why does bounce go wrong when framerate is low?
Please, take a look at this example (my attempt to create bouncing grenade):
Code:
#include <acknex.h> #include <default.c> #define PRAGMA_POINTER // default trace/move flags #define TRACE_FLAGS (IGNORE_ME | IGNORE_PASSABLE | IGNORE_PASSENTS | IGNORE_MAPS | IGNORE_SPRITES | IGNORE_CONTENT) #define MOVE_FLAGS (IGNORE_ME | IGNORE_PASSABLE | IGNORE_PASSENTS | IGNORE_MAPS | IGNORE_SPRITES | IGNORE_CONTENT) action grenade(){ c_setminmax(my); set(my, SHADOW | POLYGON); VECTOR velocity; vec_set(&velocity, vector(25, 0, 5)); vec_rotate(&velocity, &camera->pan); var _soil_height = 0; // target height from surface bellow var _gravity = 5; // 1 - 10 (default 5) var _restitution = 0.5; // 0.1 - 0.9 (default - 0.25) var counter = 0; while(my){ // still moving ? if(vec_length(&velocity) > 1){ VECTOR temp; vec_set(&temp, &velocity); vec_scale(&temp, time_step); c_move(my, nullvector, &temp, MOVE_FLAGS); velocity.z -= _gravity * time_step; if(HIT_TARGET){ var speed = vec_length(&velocity); vec_set(&velocity, &bounce); vec_normalize(&velocity, _restitution * speed); } } else{ // reset all movement vec_fill(&velocity, 0); } DEBUG_VAR(velocity.x, 200); DEBUG_VAR(velocity.y, 220); DEBUG_VAR(velocity.z, 240); DEBUG_VAR(bounce.x, 300); DEBUG_VAR(bounce.y, 320); DEBUG_VAR(bounce.z, 340); counter += time_frame / 16; if(counter >= 3){ break; } wait(1); } safe_remove(my); } void main(){ shadow_stencil = 2; fps_max = 60; warn_level = 6; level_load(""); wait(3); camera->arc = 90; vec_set(&camera->x, vector(-439, 0, 323)); vec_set(&camera->pan, vector(0, -36, 0)); level_ent = ent_create(CUBE_MDL, nullvector, NULL); vec_set(&level_ent->scale_x, vector(256, 256, 0.1)); c_setminmax(level_ent); set(level_ent, POLYGON | SHADOW); ENTITY *wall = ent_create(CUBE_MDL, vector(0, 256, 64), NULL); vec_set(&wall->scale_x, vector(4, 8, 8)); c_setminmax(wall); set(wall, POLYGON | SHADOW); int i = 0; var counter = 0, throw = 0; while(!key_esc){ if(mouse_left){ if(throw == 0){ ent_create(CUBE_MDL, &camera->x, grenade); throw = 1; } } if(throw == 1){ counter += time_frame / 16; if(counter > 0.5){ throw = 0; counter -= 0.5; } } // slow down framerate for testing if(key_e){ fps_max = 20; } else{ fps_max = 60; } DEBUG_VAR(fps_max, 0); wait(1); } }
As you can see, it starts moving towards the left, slowly...
Why does that happen? Also, there is always small difference in grenade's movement, on different framerate (I guess it's framerate independent, but there is still a difference!).
Any help would be appreciated!
Best regards!