在gameres.com上发了中级教程1的翻译稿,抽空把其中Expert Question 1实现了一下。
重新写一个类,专门负责机器人的行走。
在MoveDemoApplication的createScene中新建两个机器人。
运行后,得到两个独立行走的机器人。


重新写一个类,专门负责机器人的行走。
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.1f, 0.1f, 0.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.1f, 0.1f, 0.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
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.1f, 0.1f, 0.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.1f, 0.1f, 0.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.0f, 0.0f, 50.0f));
5 list1.push_back(Vector3(-100.0f, 0.0f, -200.0f));
6 MoveDemoRobots mRobot1(mSceneMgr, mWindow, mCamera, mRoot,
"Robot1", Vector3(0.0f, 0.0f, 25.0f), list1);
7 // robot2
8 std::deque<Vector3> list2;
9 list2.push_back(Vector3(100.0f, 0.0f, -200.0f));
10 list2.push_back(Vector3(300.0f, 0.0f, 50.0f));
11 MoveDemoRobots mRobot2(mSceneMgr, mWindow, mCamera, mRoot,
"Robot2", Vector3(-50.0f, 0.0f, 125.0f), list2);
2 // robot1
3 std::deque<Vector3> list1;
4 list1.push_back(Vector3(550.0f, 0.0f, 50.0f));
5 list1.push_back(Vector3(-100.0f, 0.0f, -200.0f));
6 MoveDemoRobots mRobot1(mSceneMgr, mWindow, mCamera, mRoot,
"Robot1", Vector3(0.0f, 0.0f, 25.0f), list1);
7 // robot2
8 std::deque<Vector3> list2;
9 list2.push_back(Vector3(100.0f, 0.0f, -200.0f));
10 list2.push_back(Vector3(300.0f, 0.0f, 50.0f));
11 MoveDemoRobots mRobot2(mSceneMgr, mWindow, mCamera, mRoot,
"Robot2", Vector3(-50.0f, 0.0f, 125.0f), list2);
运行后,得到两个独立行走的机器人。
浙公网安备 33010602011771号