c# - Smoother transition in movement? -


i question. still new sfml 1 seemed bit tough. have tried using while loops , such no avail.

the game doing @ moment car going , forth on x axis , guess able pick points , stuff or avoid objects coming towards car until dies.

how make movement smoother? car move 8 units first, before moving 8 units in desired direction until let go of button. it's same when other way. instantly move , keep moving when press either key.

    static void onkeypressed(object sender, eventargs e)     {         vector2f newpos = new vector2f(0, car.position.y);         keyeventargs ke = (keyeventargs)e;         if (ke.code.equals(keyboard.key.a))         {             if (car.position.x != 0)             {                 newpos.x = car.position.x - 8;                 car.position = newpos;             }             else if (car.position.x < 0)             {                 newpos.x = 0;                 car.position = newpos;             }             else if(car.position.x == 0)             {                 // nothing             }         }         else if (ke.code.equals(keyboard.key.d))         {             if (car.position.x != window.size.x - 32)             {                 newpos.x = car.position.x + 8;                 car.position = newpos;             }             else if (car.position.x > window.size.x)             {                 newpos.x = window.size.x;                 car.position = newpos;             }             else if (car.position.x == window.size.x)             {                 // nothing             }         }     } 

and entire thing reference:

using system; using system.collections.generic; using system.threading.tasks; using sfml.audio; using sfml.graphics; using sfml.window;  namespace sfmlcargame {     class program     {         private static renderwindow window;         private static sprite car;          static void main(string[] args)         {             window = new renderwindow(new videomode(256,512), "car game");             window.closed += new eventhandler(onclose);             window.keypressed += new eventhandler<keyeventargs>(onkeypressed);              sprite bg = new sprite(new texture("road.png"));             car = new sprite(new texture("car.png"));             car.position = new vector2f(window.size.x / 2, window.size.y - 96);             while (window.isopen())             {                 window.dispatchevents();                  window.clear();                  window.draw(bg);                 window.draw(car);                  window.display();             }         }          static void onclose(object sender, eventargs e)         {             renderwindow window = (renderwindow)sender;             window.close();         }          static void onkeypressed(object sender, eventargs e)         {             vector2f newpos = new vector2f(0, car.position.y);             keyeventargs ke = (keyeventargs)e;             if (ke.code.equals(keyboard.key.a))             {                 if (car.position.x != 0)                 {                     newpos.x = car.position.x - 8;                     car.position = newpos;                 }                 else if (car.position.x < 0)                 {                     newpos.x = 0;                     car.position = newpos;                 }                 else if(car.position.x == 0)                 {                     // nothing                 }             }             else if (ke.code.equals(keyboard.key.d))             {                 if (car.position.x != window.size.x - 32)                 {                     newpos.x = car.position.x + 8;                     car.position = newpos;                 }                 else if (car.position.x > window.size.x)                 {                     newpos.x = window.size.x;                     car.position = newpos;                 }                 else if (car.position.x == window.size.x)                 {                     // nothing                 }             }         }     } } 

you may want read short tutorial sfml's website.

the events fired operating system, , purposes (quit event, key pressed, left mouse button clicked) aren't things need updated often. imagine writing text, , keep 'a' key pressed. text progressively grow aaaaaaaaaaa there little delay between spawns, imposed os. get, say, 6 letters second. same events. game running , displaying @ 60 fps clear movement not smooth , barely manageable.

hopefully sfml provides way check instant state of keyboard (and mouse , joystick). c# binding (i assuming using binding 2.0 version, , if don't should) have check keyboard.iskeypressed(yourkey). doing in main loop check @ each frame key pressed, , not wait os event way slower.

on side note, if previous questions answered correctly please mark them accepting answer.

edit : haven't sfml .net installed on computer here like

static void main(string[] args)     {         window = new renderwindow(new videomode(256,512), "car game");         window.closed += new eventhandler(onclose);         // note         // window.keypressed += new eventhandler<keyeventargs>(onkeypressed);          sprite bg = new sprite(new texture("road.png"));         car = new sprite(new texture("car.png"));         car.position = new vector2f(window.size.x / 2, window.size.y - 96);         while (window.isopen())         {             window.dispatchevents();             checkinputs(); // , !              window.clear();              window.draw(bg);             window.draw(car);              window.display();         }     }  void checkinputs() {     if(keyboard.iskeypressed(keyboard.key.a))     {         if(car.position.x < 0)             car.position.x = 0         else if(car.position.x > 0)             car.position.x -= 8; // shortcut 'car.position.x = car.position.x - 8'     }     else if(keyboard.iskeypressed(keyboard.key.d))     {         // etc     } } 

this way transition should smoother, beware, 8 pixels might fast ! recommend read tutorial have linked, because explains functionning of inputs in language-agnostic way (even if examples in c++).

also, don't need event handler anymore commented it. but if checking other keys (like escape pause or whatever) don't delete it, remove part wrote moving car.


Comments