返回列表 回复 发帖

求助:控制人物行走问题

  1. bool MyFrameListener::frameStarted(const Ogre::FrameEvent &evt)
  2. {
  3. m_Mouse->capture();
  4. m_Keyboard->capture();
  5. Quaternion p=sceneMgr->getSceneNode("RootNode")->getOrientation();

  6. if(m_Keyboard->isKeyDown(OIS::KeyCode::KC_W)){
  7. p.z=(float)cos(p.y);
  8. p.x=(float)sin(p.y);
  9. sceneMgr->getSceneNode("RootNode")->translate(Vector3(p.x,0.0f,p.z));
  10. walk->setEnabled(true);
  11. }else if(m_Keyboard->isKeyDown(OIS::KeyCode::KC_S)){
  12. p.z=-(float)cos(p.y);
  13. p.x=-(float)sin(p.y);
  14. sceneMgr->getSceneNode("RootNode")->translate(Vector3(p.x,0.0f,p.z));
  15. walk->setEnabled(true);
  16. }else if(m_Keyboard->isKeyDown(OIS::KeyCode::KC_A)){
  17. p.z=(float)cos(p.y-1.57f);
  18. p.x=(float)sin(p.y-1.57f);
  19. sceneMgr->getSceneNode("RootNode")->translate(Vector3(p.x,0.0f,p.z));
  20. walk->setEnabled(true);
  21. }else if(m_Keyboard->isKeyDown(OIS::KeyCode::KC_D)){
  22. p.z=(float)cos(p.y+1.57f);
  23. p.x=(float)sin(p.y+1.57f);
  24. sceneMgr->getSceneNode("RootNode")->translate(Vector3(p.x,0.0f,p.z));
  25. walk->setEnabled(true);
  26. }else{
  27. walk->setEnabled(false);
  28. walk->setTimePosition(0.0f);
  29. }
  30. if(m_Keyboard->isKeyDown(OIS::KeyCode::KC_ESCAPE)){
  31. return false;
  32. }
  33. return true;
  34. }
复制代码
当按W键的时候,人物就向当前面对的方向前进。。
上面的代码不正确,请大家指教。
贴代码也可以。
年轻是一种激情,智慧是一种创造.
额...
问题自己以经解决,,

转角色的Y轴为方向..然后加减本地空间的Z轴就是前进后退..
重要的是,转了Y轴后,前进后退必须是本地空间,就是自己朝自己的Z轴前进(Node::TS_LOCAL);
年轻是一种激情,智慧是一种创造.
返回列表