Hi,i would like to know how to move my ball to South East if i pressed the key W&D ?
here is my event receiver code:
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event)
{
if (event.EventType == EET_KEY_INPUT_EVENT&&
event.KeyInput.PressedDown)
{
switch(event.KeyInput.Key)
{
case KEY_KEY_W:
case KEY_KEY_S:
{
vector3df v = ballNode[0]->getPosition();
v.Z += event.KeyInput.Key == KEY_KEY_W ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
}
return true;
case KEY_KEY_A:
case KEY_KEY_D:
{
vector3df v = ballNode[0]->getPosition();
v.X += event.KeyInput.Key == KEY_KEY_D ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
}
return true;
}
}
return false;
}
};
Movement help needed
-
Guest
when you use 'return true;' after the first two cases, it breaks out of the OnEvent func. so it never reaches the 'case KEY_KEY_A:' and all stuff after that, make it:
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event)
{
if (event.EventType == EET_KEY_INPUT_EVENT&&
event.KeyInput.PressedDown)
{
switch(event.KeyInput.Key)
{
case KEY_KEY_W:
case KEY_KEY_S:
{
vector3df v = ballNode[0]->getPosition();
v.Z += event.KeyInput.Key == KEY_KEY_W ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
}
case KEY_KEY_A:
case KEY_KEY_D:
{
vector3df v = ballNode[0]->getPosition();
v.X += event.KeyInput.Key == KEY_KEY_D ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
}
return true;
}
}
return false;
}
};
and it should work(haven tried it though, no compiler around)
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event)
{
if (event.EventType == EET_KEY_INPUT_EVENT&&
event.KeyInput.PressedDown)
{
switch(event.KeyInput.Key)
{
case KEY_KEY_W:
case KEY_KEY_S:
{
vector3df v = ballNode[0]->getPosition();
v.Z += event.KeyInput.Key == KEY_KEY_W ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
}
case KEY_KEY_A:
case KEY_KEY_D:
{
vector3df v = ballNode[0]->getPosition();
v.X += event.KeyInput.Key == KEY_KEY_D ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
}
return true;
}
}
return false;
}
};
and it should work(haven tried it though, no compiler around)
-
Guest
sorry, im wrong, there also must be a check that skips the second 2 cases if you do not press case KEY_KEY_A: or case KEY_KEY_D: , like
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event)
{
if (event.EventType == EET_KEY_INPUT_EVENT&&
event.KeyInput.PressedDown)
{
switch(event.KeyInput.Key)
{
case KEY_KEY_W:
case KEY_KEY_S:
{
vector3df v = ballNode[0]->getPosition();
v.Z += event.KeyInput.Key == KEY_KEY_W ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
if(!(KEY_KEY_A || KEY_KEY_D))
break;
}
case KEY_KEY_A:
case KEY_KEY_D:
{
vector3df v = ballNode[0]->getPosition();
v.X += event.KeyInput.Key == KEY_KEY_D ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
}
return true;
}
}
return false;
}
};
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event)
{
if (event.EventType == EET_KEY_INPUT_EVENT&&
event.KeyInput.PressedDown)
{
switch(event.KeyInput.Key)
{
case KEY_KEY_W:
case KEY_KEY_S:
{
vector3df v = ballNode[0]->getPosition();
v.Z += event.KeyInput.Key == KEY_KEY_W ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
if(!(KEY_KEY_A || KEY_KEY_D))
break;
}
case KEY_KEY_A:
case KEY_KEY_D:
{
vector3df v = ballNode[0]->getPosition();
v.X += event.KeyInput.Key == KEY_KEY_D ? 0.8f : -0.8f;
ballNode[0]->setPosition(v);
}
return true;
}
}
return false;
}
};