Ogre 中级教程1中的Expert Question 1

Posted on 2007-07-25 15:13  无数零  阅读(772)  评论(0)    收藏  举报
在gameres.com上发了中级教程1的翻译稿,抽空把其中Expert Question 1实现了一下。

重新写一个类,专门负责机器人的行走。

 1 class MoveDemoRobots
 2 {
 3 public:
 4     MoveDemoRobots(SceneManager* sm, RenderWindow* win, Camera* cam,
                        Root
* root, String robotName, Vector3 vect,
                        std::deque
<Vector3>& list):mWindow(win),
                        mCamera(cam), mRoot(root), mWalkList(list)
 5     {
 6         mEntity = sm->createEntity(robotName,"robot.mesh");
 7         mNode = sm->getRootSceneNode()->createChildSceneNode(robotName+"Node", vect);
 8         mNode->attachObject(mEntity);
 9 
10         // Create objects so we can see movement
11         Entity *ent;
12         SceneNode *node;
13 
14         ent = sm->createEntity(robotName+"Knot1""knot.mesh");
15         node = sm->getRootSceneNode()->createChildSceneNode(robotName+"Knot1Node",
                                                Vector3(vect.x, vect.y
-10.0f, vect.z));
16         node->attachObject(ent);
17         node->setScale(0.1f0.1f0.1f);
18 
19         int i = 1;
20         for(std::deque<Vector3>::iterator it = mWalkList.begin(); it != mWalkList.end(); ++it)
21         {
22             String str = robotName+"Knot"+Ogre::StringConverter::toString(++i);
23             ent = sm->createEntity(str, "knot.mesh");
24             node = sm->getRootSceneNode()->createChildSceneNode(str+"Node",
                                        Vector3(it
->x, (it->y)-10.0f, it->z));
25             node->attachObject(ent);
26             node->setScale(0.1f0.1f0.1f);
27         }
28 
29         mFrameListener = new MoveDemoListener(mWindow, mCamera,
                                       mNode, mEntity, mWalkList);
30         mRoot->addFrameListener(mFrameListener);
31     }
32     ~MoveDemoRobots(){}
33 
34 protected:
35     Entity *mEntity;
36     SceneNode* mNode;
37     std::deque<Vector3> mWalkList;
38     Root* mRoot;
39     MoveDemoListener* mFrameListener;
40     RenderWindow* mWindow;
41     Camera* mCamera;
42 };
43 

在MoveDemoApplication的createScene中新建两个机器人。

 1 // Set the robots
 2         // robot1
 3         std::deque<Vector3> list1;
 4         list1.push_back(Vector3(550.0f0.0f50.0f));
 5         list1.push_back(Vector3(-100.0f0.0f-200.0f));
 6         MoveDemoRobots mRobot1(mSceneMgr, mWindow, mCamera, mRoot,
                      
"Robot1", Vector3(0.0f0.0f25.0f), list1);
 7         // robot2
 8         std::deque<Vector3> list2;
 9         list2.push_back(Vector3(100.0f0.0f-200.0f));
10         list2.push_back(Vector3(300.0f0.0f50.0f));
11         MoveDemoRobots mRobot2(mSceneMgr, mWindow, mCamera, mRoot,
                   
"Robot2", Vector3(-50.0f0.0f125.0f), list2);

运行后,得到两个独立行走的机器人。





博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3