Switch 本身是一个节点,它能够包含多个子节点,其功能主要在于控制子节点的渲染显示。如图6.18.1所示,图中的房子来自系统自带的farmhouse.flt 文件,该文件在creator 中的层次结构明确显示,名字为“damage”的Switch 节点包含两个子节点,一个是g1,一个是house_1。左图中的g1 表示一个完好的房子,其掩码索引为0;右图中的house_1 表示一个被损坏了的房子,其掩码索引为1。
图6.18.1 Switch 图层结构
Switch 节点可以包含多个子节点,每个子节点可以表示出三维对象不同的状态,如图6.18.1所示的完好房子和被破坏的房子两种状态。实际上,一个Switch 节点可以包含多个子节点,其中0 是第一个子节点的索引,1 是第二个子节点的索引,以此类推。但是,在任何一个特定的时刻只有一个掩码索引是激活的,表示场景中只渲染显示该Switch 节点中掩码索引为激活状态的子节点,而其他节点则不渲染显示。这样,利用Switch 节点可以很方便地显示同一个物体在不同情境下的形状。
图6.18.2 Switch 类继承图
vsSwitch 类视图如图6.18.2所示,开发者可查看系统的自带文档,详细了解其所有功能。本节首先把farmhouse 加载进场景,然后利用代码激活掩码索引,显示房子的不同状态,其效果如图6.18.3所示,左图为完好的房子,右图为被损坏了的房子。
图6.18.3 Switch 效果图
对于Switch的编程使用,需要注意的是,对于Switch的命名,不能采用默认名称,即sw1等名称。否则,可能依据Switch的名称不能查找到该Switch。在farmhouse.flt 文件中,Switch命名为damage。另外,必须引入Switch 类的头文件为: #include <vsSwitch.h>。
为了应用开发方便,需要定义一个vsSwitch 静态变量:
static vsSwitch* HouseSwitch; //房子Switch 指针
定义完成后,应该记得要初始化:
vsSwitch * PublicMember::HouseSwitch =NULL;
操作Switch 之前,必须首先获得Switch 指针。而应用中的Switch 在房子上,则首先应得到房子的指针:(www.daowen.com)
vpObject * house=vpObject::find("farmhouse");
house->ref();
接着获取房子上的Switch:
//获取房子Switch
PublicMember::HouseSwitch=static_cast<vsSwitch *>(house->find_named("damage"));
PublicMember::HouseSwitch->ref();
详细代码位于主线程中,具体如图6.18.4所示。
图6.18.4 包含Switch 操作的主线程
对于Switch的编程使用,主要通过设置其活动掩码索引来完成,如图6.18.3所示,左图是按钮“完好”执行的效果,其代码为:
PublicMember::HouseSwitch->setActiveMask(0);//设置活动掩码索引为0
右图是按钮“破坏”执行的效果,其代码为:
PublicMember::HouseSwitch->setActiveMask(1); //设置活动掩码索引为1
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。