Moving the characterNow that we have our current movement value, it’s time to put it into the by replacing the old movement code with the new. if ( buffer[DIK_UP] & 0x80 ) { //old code //xpos -= (float)sin(heading*piover180) * 0.05f; //zpos -= (float)cos(heading*piover180) * 0.05f; //new code xpos -= (float)sin(heading*piover180) * movementval; zpos -= (float)cos(heading*piover180) * movementval; ... } These changes can easily be applied for moving in all directions. Modifying head movementAs a final change, I also changed the speed of the head bob. The default change is 10 units every frame, so at 80 frames a second, the movement is 800 degrees per second, which is quite a few of cycles (360 degrees in a circle). At a reasonable frame rate of 40 frames per second the head would bob only 400 degrees. The goal is to vary how much the angle is changed every frame based on the frame rate. To accomplish this, multiply the number of degrees you want the bob movement to change in one second by the number of seconds between frames. At 80 frames per second, there are .0125 seconds between each frame (as previously mentioned). If you want the head to move 400 degrees every second, then multiply 400 degrees by the .0125 seconds between each frame, and you arrive at the number of degrees to perform the head bob movement for the frame. walkbiasangle+=(400.0f*secsperframe); In this example the change in the angle would be 5 degrees every frame. At 80 frames per second, the total degrees would be 400 degrees every second. In conclusion, I cannot say if this is the absolute best way to handle character movement, but it’s a method that has worked for me thus far. I would like to thank Jeff Molofee and Justin Eslinger for their work on the original tutorial. If you have any questions or comments, feel free to e-mail me at ricart3@tcnj.edu.
|