Woolf
19-08-2003, 18:35
hi leuz, ich mach gerdae nen space shooter und hab ein problem mit der bewegung
hier mal der code (leider ein beschissener stil...):
(wichtig sind die zeilen die c_FrameInterval enthalten, der rest ist total uninteressand...)
float CurSpeed = kSpeed; //current speed forward
float CurStrafe = kStrafe; //current speed sidewards
float CurUp = kUp; //current speed upwards
c_FrameInterval = lastmillis/1000.0f;
Uint8 *keyState = SDL_GetKeyState(NULL);
float BrakeX = 6.0f * 0.4f; // difference between BRAKING
float Brake = 1.0f; // and slowy being stopped by friction or woteva
// Check if we hit the Up arrow or the 'w' key
if(keyState[SDLK_UP] || keyState[SDLK_w] ) {
if(kSpeed < 0)
Brake = BrakeX;
else
Brake = 1.0f;
kSpeed += (0.4f * Brake) * c_FrameInterval; // raise speed, but watch the framerate
}
// Check if we hit the Down arrow or the 's' key
if(keyState[SDLK_DOWN] || keyState[SDLK_s] ) {
// Move our camera backward by a negative SPEED
//MoveCamera(-speed);
if(kSpeed > 0)
Brake = BrakeX;
else
Brake = 1.0f;
kSpeed -= (0.4f * Brake) * c_FrameInterval;
}
// Check if we hit the Left arrow or the 'a' key
if(keyState[SDLK_LEFT] || keyState[SDLK_a]) {
// Strafe the camera left
//StrafeCamera(-strafespeed);
if(kStrafe > 0)
Brake = BrakeX;
else
Brake = 1.0f;
kStrafe -= (0.2f * (Brake / 2.0f)) * c_FrameInterval;
}
// Check if we hit the Right arrow or the 'd' key
if(keyState[SDLK_RIGHT] || keyState[SDLK_d]) {
// Strafe the camera right
//StrafeCamera(strafespeed);
if(kStrafe < 0)
Brake = BrakeX;
else
Brake = 1.0f;
kStrafe += (0.2f * (Brake / 2.0f)) * c_FrameInterval;
}
if(keyState[SDLK_r]) {
// Strafe the camera left
//StrafeCamera(-strafespeed);
if(kUp < 0)
Brake = BrakeX;
else
Brake = 1.0f;
kUp += (0.2f * (Brake / 2.0f)) * c_FrameInterval;
}
// Check if we hit the Right arrow or the 'd' key
if(keyState[SDLK_f]) {
// Strafe the camera right
//StrafeCamera(strafespeed);
if(kUp > 0)
Brake = BrakeX;
else
Brake = 1.0f;
kUp -= (0.2f * (Brake / 2.0f)) * c_FrameInterval;
}
c_FrameInterval *= 100.0f;
kStrafe = min(0.3f * c_FrameInterval, max(-0.3f * c_FrameInterval, kStrafe));
kSpeed = min(1.0f * c_FrameInterval, max(-0.5f * c_FrameInterval, kSpeed));
kUp = min(0.3f * c_FrameInterval, max(-0.3f * c_FrameInterval, kUp));
c_FrameInterval /= 100.0f;
if(keyState[SDLK_q])
RollCamera(-c_FrameInterval/4.0f);
if(keyState[SDLK_e])
RollCamera(c_FrameInterval/4.0f);
Brake = 1.0f;
if(keyState[SDLK_SPACE])
Brake = 6.0f;
if(CurSpeed == kSpeed)
{
if(kSpeed < 0)
kSpeed += (0.1f * Brake) * c_FrameInterval;
else if(kSpeed > 0)
kSpeed -= (0.1f * Brake) * c_FrameInterval;
}
if(CurStrafe == kStrafe)
{
if(kStrafe < 0)
kStrafe += (0.1f * Brake) * c_FrameInterval;
if(kStrafe > 0)
kStrafe -= (0.1f * Brake) * c_FrameInterval;
}
if(CurUp == kUp)
{
if(kUp < 0)
kUp += (0.1f * Brake) * c_FrameInterval;
if(kUp > 0)
kUp -= (0.1f * Brake) * c_FrameInterval;
}
if(keyState[SDLK_SPACE] && kSpeed < 0.01f && kSpeed > -0.01f)
kSpeed = 0.0f;
if(keyState[SDLK_SPACE] && kStrafe < 0.01f && kStrafe > -0.01f)
kStrafe = 0.0f;
if(keyState[SDLK_SPACE] && kUp < 0.01f && kUp > -0.01f)
kUp = 0.0f;
vec3 force = Normalize(Direction()) * kSpeed;// * c_FrameInterval;
force += Normalize(m_vStrafe) * kStrafe;// * c_FrameInterval;
force += Normalize(m_vUpVector) * kUp;// * c_FrameInterval;
m_vPosition += force;
m_vView += force;
if( (force.length() > 0.0f) || (snd) )
SendPState();//Send state to server
das problem is, ich beschleunige wenn ich über ... ca 150+ ... frames habe, schneller als die anderen, aber rolle :
RollCamera(-c_FrameInterval/4.0f);
gleichschnell
genauso ist es wenn ich OHNE ALLEM einfach nur den speed um c_FrameInterval erhöhe
frage: wieso is das so, oder wie begrenze ich die framerate auf zb maximal 80 fps?
hier mal der code (leider ein beschissener stil...):
(wichtig sind die zeilen die c_FrameInterval enthalten, der rest ist total uninteressand...)
float CurSpeed = kSpeed; //current speed forward
float CurStrafe = kStrafe; //current speed sidewards
float CurUp = kUp; //current speed upwards
c_FrameInterval = lastmillis/1000.0f;
Uint8 *keyState = SDL_GetKeyState(NULL);
float BrakeX = 6.0f * 0.4f; // difference between BRAKING
float Brake = 1.0f; // and slowy being stopped by friction or woteva
// Check if we hit the Up arrow or the 'w' key
if(keyState[SDLK_UP] || keyState[SDLK_w] ) {
if(kSpeed < 0)
Brake = BrakeX;
else
Brake = 1.0f;
kSpeed += (0.4f * Brake) * c_FrameInterval; // raise speed, but watch the framerate
}
// Check if we hit the Down arrow or the 's' key
if(keyState[SDLK_DOWN] || keyState[SDLK_s] ) {
// Move our camera backward by a negative SPEED
//MoveCamera(-speed);
if(kSpeed > 0)
Brake = BrakeX;
else
Brake = 1.0f;
kSpeed -= (0.4f * Brake) * c_FrameInterval;
}
// Check if we hit the Left arrow or the 'a' key
if(keyState[SDLK_LEFT] || keyState[SDLK_a]) {
// Strafe the camera left
//StrafeCamera(-strafespeed);
if(kStrafe > 0)
Brake = BrakeX;
else
Brake = 1.0f;
kStrafe -= (0.2f * (Brake / 2.0f)) * c_FrameInterval;
}
// Check if we hit the Right arrow or the 'd' key
if(keyState[SDLK_RIGHT] || keyState[SDLK_d]) {
// Strafe the camera right
//StrafeCamera(strafespeed);
if(kStrafe < 0)
Brake = BrakeX;
else
Brake = 1.0f;
kStrafe += (0.2f * (Brake / 2.0f)) * c_FrameInterval;
}
if(keyState[SDLK_r]) {
// Strafe the camera left
//StrafeCamera(-strafespeed);
if(kUp < 0)
Brake = BrakeX;
else
Brake = 1.0f;
kUp += (0.2f * (Brake / 2.0f)) * c_FrameInterval;
}
// Check if we hit the Right arrow or the 'd' key
if(keyState[SDLK_f]) {
// Strafe the camera right
//StrafeCamera(strafespeed);
if(kUp > 0)
Brake = BrakeX;
else
Brake = 1.0f;
kUp -= (0.2f * (Brake / 2.0f)) * c_FrameInterval;
}
c_FrameInterval *= 100.0f;
kStrafe = min(0.3f * c_FrameInterval, max(-0.3f * c_FrameInterval, kStrafe));
kSpeed = min(1.0f * c_FrameInterval, max(-0.5f * c_FrameInterval, kSpeed));
kUp = min(0.3f * c_FrameInterval, max(-0.3f * c_FrameInterval, kUp));
c_FrameInterval /= 100.0f;
if(keyState[SDLK_q])
RollCamera(-c_FrameInterval/4.0f);
if(keyState[SDLK_e])
RollCamera(c_FrameInterval/4.0f);
Brake = 1.0f;
if(keyState[SDLK_SPACE])
Brake = 6.0f;
if(CurSpeed == kSpeed)
{
if(kSpeed < 0)
kSpeed += (0.1f * Brake) * c_FrameInterval;
else if(kSpeed > 0)
kSpeed -= (0.1f * Brake) * c_FrameInterval;
}
if(CurStrafe == kStrafe)
{
if(kStrafe < 0)
kStrafe += (0.1f * Brake) * c_FrameInterval;
if(kStrafe > 0)
kStrafe -= (0.1f * Brake) * c_FrameInterval;
}
if(CurUp == kUp)
{
if(kUp < 0)
kUp += (0.1f * Brake) * c_FrameInterval;
if(kUp > 0)
kUp -= (0.1f * Brake) * c_FrameInterval;
}
if(keyState[SDLK_SPACE] && kSpeed < 0.01f && kSpeed > -0.01f)
kSpeed = 0.0f;
if(keyState[SDLK_SPACE] && kStrafe < 0.01f && kStrafe > -0.01f)
kStrafe = 0.0f;
if(keyState[SDLK_SPACE] && kUp < 0.01f && kUp > -0.01f)
kUp = 0.0f;
vec3 force = Normalize(Direction()) * kSpeed;// * c_FrameInterval;
force += Normalize(m_vStrafe) * kStrafe;// * c_FrameInterval;
force += Normalize(m_vUpVector) * kUp;// * c_FrameInterval;
m_vPosition += force;
m_vView += force;
if( (force.length() > 0.0f) || (snd) )
SendPState();//Send state to server
das problem is, ich beschleunige wenn ich über ... ca 150+ ... frames habe, schneller als die anderen, aber rolle :
RollCamera(-c_FrameInterval/4.0f);
gleichschnell
genauso ist es wenn ich OHNE ALLEM einfach nur den speed um c_FrameInterval erhöhe
frage: wieso is das so, oder wie begrenze ich die framerate auf zb maximal 80 fps?