Code: Select all
bool pressedkeys[256];
void PlayerKeys()
{
float speed = 4.0;
core::vector3df r = player->getRotation();
core::vector3df v = player->getPosition();
if(pressedkeys[KEY_LEFT])
{
r.Y = r.Y - 4.0f;
player->setRotation(r);
}
if(pressedkeys[KEY_RIGHT])
{
r.Y = r.Y + 4.0f;
player->setRotation(r);
}
if(pressedkeys[KEY_KEY_W])
{
v.X = v.X + ( cos(r.Y * 3.14159265/180)*speed );
v.Z = v.Z - ( sin(r.Y * 3.14159265/180)*speed );
player->setPosition(v);
}
if(pressedkeys[KEY_KEY_S])
{
v.X = v.X - ( cos(r.Y * 3.14159265/180)*speed );
v.Z = v.Z + ( sin(r.Y * 3.14159265/180)*speed );
player->setPosition(v);
}
if(pressedkeys[KEY_KEY_A])
{
v.X = v.X + ( cos((r.Y-90) * 3.14159265/180)*speed );
v.Z = v.Z - ( sin((r.Y-90) * 3.14159265/180)*speed );
player->setPosition(v);
}
if(pressedkeys[KEY_KEY_D])
{
v.X = v.X + ( cos((r.Y+90) * 3.14159265/180)*speed );
v.Z = v.Z - ( sin((r.Y+90) * 3.14159265/180)*speed );
player->setPosition(v);
}
}
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(const SEvent& event)
{
if (event.EventType == EET_KEY_INPUT_EVENT)
{
pressedkeys[event.KeyInput.Key] = event.KeyInput.PressedDown;
PlayerKeys();
}
return false;
}
};
As a side note, using something similar to this:
Code: Select all
if(pressedkeys[KEY_KEY_W] && pressedkeys[KEY_LEFT])
If you're having trouble understanding the problem, I could make a video about the issue upon request.