|
如题,场景文件格式为flt的,利用指定名称的查找功能获取了此multiswitch节点,,利用setActiveSwitchSet()实现了状态转换,可是在程序中,出现了这样一来的问题:
在形式上这样一来的代码段
- if (_KBST->_b_LA_Leg1_Up)
- {}
- else
- {}
- 中,
- 程序在执行过程中,只有_b_LA_Leg(1,2,3,4)_Down下的执行,其他的却都不执行setActiveSwitchSet(),不知道是为什么?这让我很迷惑,是不是编写的程序有问题,还是bug?
- void AL_NodeCallBack::AL_ForLeg(osgSim::DOFTransform* DL1,osgSim::DOFTransform* DL2,osgSim::DOFTransform* DL3,osgSim::DOFTransform* DL4,osgSim::DOFTransform* DQ1,osgSim::DOFTransform* DQ2,osgSim::MultiSwitch* DS1,osgSim::MultiSwitch* DS2,osgSim::MultiSwitch* DS3,osgSim::MultiSwitch* DS4)
- {
- float HandStep = quickstep;
-
- ///////////////////////////////快慢速设置开始///////////////////////////
- if (_KBST->_b_Speed)
- {
- HandStep = quickstep;
- }
- else
- {
- HandStep = slowstep;
- }
- ///////////////////////////////快慢速设置结束/////////////////////////////
- ///////////////////////////////所有调平腿动作开始///////////////////////////////
- if (_KBST->_b_LA_All_Up)
- {
- _Leg1 -= HandStep;
- _Leg2 -= HandStep;
- _Leg3 -= HandStep;
- _Leg4 -= HandStep;
- if (_Leg1 <= 0.0)
- {
- _Leg1 = 0.0;
- }
- if (_Leg2 <= 0.0)
- {
- _Leg2 = 0.0;
- }
- if (_Leg3 <= 0.0)
- {
- _Leg3 = 0.0;
- }
- if (_Leg4 <= 0.0)
- {
- _Leg4 = 0.0;
- }
- DS1->setActiveSwitchSet(1);
- DS2->setActiveSwitchSet(1);
- DS3->setActiveSwitchSet(1);
- DS4->setActiveSwitchSet(1);
- DL1->setCurrentTranslate(osg::Vec3(0,0,_Leg1));
- DL2->setCurrentTranslate(osg::Vec3(0,0,_Leg2));
- DL3->setCurrentTranslate(osg::Vec3(0,0,_Leg3));
- DL4->setCurrentTranslate(osg::Vec3(0,0,_Leg4));
- }
- else
- {
- DS1->setActiveSwitchSet(0);
- DS2->setActiveSwitchSet(0);
- DS3->setActiveSwitchSet(0);
- DS4->setActiveSwitchSet(0);
- }
- if (_KBST->_b_LA_All_Down)
- {
- _Leg1 += HandStep;
- _Leg2 += HandStep;
- _Leg3 += HandStep;
- _Leg4 += HandStep;
- if (_Leg1 >= maxD)
- {
- _Leg1 = maxD;
- }
- if (_Leg2 >= maxD)
- {
- _Leg2 = maxD;
- }
- if (_Leg3 >= maxD)
- {
- _Leg3 = maxD;
- }
- if (_Leg4 >= maxD)
- {
- _Leg4 = maxD;
- }
- DS1->setActiveSwitchSet(1);
- DS2->setActiveSwitchSet(1);
- DS3->setActiveSwitchSet(1);
- DS4->setActiveSwitchSet(1);
- DL1->setCurrentTranslate(osg::Vec3(0,0,_Leg1));
- DL2->setCurrentTranslate(osg::Vec3(0,0,_Leg2));
- DL3->setCurrentTranslate(osg::Vec3(0,0,_Leg3));
- DL4->setCurrentTranslate(osg::Vec3(0,0,_Leg4));
- }
- else
- {
- DS1->setActiveSwitchSet(0);
- DS2->setActiveSwitchSet(0);
- DS3->setActiveSwitchSet(0);
- DS4->setActiveSwitchSet(0);
- }
- ///////////////////////////////所有调平腿动作结束///////////////////////////////
-
- ///////////////////////////////调平腿动作开始///////////////////////////////
-
- if (_KBST->_b_LA_Leg1_Up)
- {
- DS1->setActiveSwitchSet(1);
- _Leg1 -= HandStep;
- if (_Leg1 <= 0.0)
- {
- _Leg1 = 0.0;
- }
- DL1->setCurrentTranslate(osg::Vec3(0,0,_Leg1));
- }
- else
- {
- DS1->setActiveSwitchSet(0);
- }
- if (_KBST->_b_LA_Leg1_Down)
- {
- DS1->setActiveSwitchSet(1);
- _Leg1 += HandStep;
- if (_Leg1 >= maxDD)
- {
- if (_Leg1 >= maxD)
- {
- _Leg1= maxD;
- }
- }
- DL1->setCurrentTranslate(osg::Vec3(0,0,_Leg1));
- }
- else
- {
- DS1->setActiveSwitchSet(0);
- }
- ///////////////////////////////调平腿动作结束///////////////////////////////
- ///////////////////////////////调平腿动作开始///////////////////////////////
- if (_KBST->_b_LA_Leg2_Up)
- {
- DS2->setActiveSwitchSet(1);
- _Leg2 -= HandStep;
- if (_Leg2 <= 0.0)
- {
- _Leg2 = 0.0;
- }
- DL2->setCurrentTranslate(osg::Vec3(0,0,_Leg2));
- }
- else
- {
- DS2->setActiveSwitchSet(0);
- }
- if (_KBST->_b_LA_Leg2_Down)
- {
- DS2->setActiveSwitchSet(1);
- _Leg2 += HandStep;
- if (_Leg2 >= maxD)
- {
- _Leg2 = maxD;
- }
- DL2->setCurrentTranslate(osg::Vec3(0,0,_Leg2));
- }
- else
- {
- DS2->setActiveSwitchSet(0);
- }
- ///////////////////////////////调平腿动作结束///////////////////////////////
- ///////////////////////////////调平腿动作开始///////////////////////////////
- if (_KBST->_b_LA_Leg3_Up)
- {
- DS3->setActiveSwitchSet(1);
- _Leg3 -= HandStep;
- if (_Leg3 <= 0.0)
- {
- _Leg3 = 0.0;
- }
- DL3->setCurrentTranslate(osg::Vec3(0,0,_Leg3));
- }
- else
- {
- DS3->setActiveSwitchSet(0);
- }
- if (_KBST->_b_LA_Leg3_Down)
- {
- DS3->setActiveSwitchSet(1);
- _Leg3 += HandStep;
- if (_Leg3 >= maxD)
- {
- _Leg3 = maxD;
- }
- DL3->setCurrentTranslate(osg::Vec3(0,0,_Leg3));
- }
- else
- {
- DS3->setActiveSwitchSet(0);
- }
- ///////////////////////////////调平腿动作结束///////////////////////////////
- ///////////////////////////////调平腿动作开始///////////////////////////////
- if (_KBST->_b_LA_Leg4_Up)
- {
- DS4->setActiveSwitchSet(1);
- _Leg4 -= HandStep;
- if (_Leg4 <= 0.0)
- {
- _Leg4 = 0.0;
- }
- DL4->setCurrentTranslate(osg::Vec3(0,0,_Leg4));
- }
- else
- {
- DS4->setActiveSwitchSet(0);
- }
- if (_KBST->_b_LA_Leg4_Down)
- {
- DS4->setActiveSwitchSet(1);
- _Leg4 += HandStep;
- if (_Leg4 >= maxD)
- {
- _Leg4 = maxD;
- }
- DL4->setCurrentTranslate(osg::Vec3(0,0,_Leg4));
- }
- else
- {
- DS4->setActiveSwitchSet(0);
- }
- ///////////////////////////////调平腿动作结束///////////////////////////////
- }
复制代码
谢谢!
[ 本帖最后由 gjczhhbz 于 2008-9-8 17:51 编辑 ] |
|