对于Vega Prime应用程序中的父子关系,首先要认识到这样一个基本的事实:场景中所有的对象都是场景的后代,场景是节点容器,场景是场景图形的根节点。另外,对于子节点,它的位置姿态都是相对于父节点而言的。如果父节点产生了位置姿态的变化,子节点将跟随父节点产生同样的位置姿态变化。但相对于父节点,子节点是静止不动的。同时,也可以单独对子节点进行操作,而父节点保持原样不变。
对于父子关系的设置,代码非常灵活自由,主要有:
(1)直接利用addChild 方法。
(2)直接利用push_back_child 方法。
(3)利用vpTransform 对象,把转换作为父节点的儿子,把子节点作为转换的儿子,这样也可以建立父子关系。
在前面的代码中,可以看到以下代码:
pScene_myScene->addChild(pObject_terrain);
pScene_myScene->addChild(pObject_farmhouse);
pScene_myScene->addChild(pObject_Hummer);
pScene_myScene->addChild(pObject_gainstore);
pObject_farmhouse->addChild(pFxDebris_Debris);
其中,前4句分别是把地形、房屋、汽车和粮仓添加为场景的“孩子”,而第5句则是把碎片特效添加为房屋的“孩子”。(www.daowen.com)
在应用开发中,将加入一辆坦克作为汽车的子节点。这样,坦克将跟随汽车一起运动,但坦克可以有自己的操作。
首先,需要准备好素材。与前面动态添加物体一样,把"C:/Program Files/MultiGen-Paradigm/resources/data/models"目录下的"m1_tank"文件夹复制到应用程序的data 目录下,将使用其中的文件。
接着,利用路径搜索对象添加坦克文件的路径:
pSearchPath_mySearchPath->append(CTS_RunPath+"//data//m1_tank");
具体定义坦克对象的代码与动态加载物体的绝大多数代码相同,只是要注意最后一句“pObject_Hummer->addChild(pObject_m1_tank);”,把坦克添加为汽车的“孩子”,而不是添加为场景的“孩子”。详细代码如图6.17.1所示。
图6.17.1 定义坦克为汽车的子物体
运行程序,点击运行按钮,将出现图6.17.2所示的画面,键盘控制汽车的同时,坦克将随汽车一起运动。
图6.17.2 添加坦克为汽车的孩子
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。