|
目标:通过更新回调,控制10辆(或更多)车的运动
问题:如果是独立的控制某辆车的运动,通过回调类内部函数进行计算即可。但是,通过:10辆车之间相互关联,包括碰撞检测/超车等行为,所以需要统一控制,这该如何解决呀?求救……
失败的,错误的尝试:在PreFrameUpdate( ) 或 PostFrameUpdate() 函数内计算/控制---这是错误的!
更新回调示例源码:(来自flysky的源码)
//从osg::NodeCallback继承一个新类,实现spaceship的回调
class SpaceShipCallback :public osg::NodeCallback
{
public:
SpaceShipCallback():angle(0)
{
//
}
virtual void operator()(osg::Node* node ,osg::NodeVisitor* nv)
{
//创建矩阵变换节点
osg::ref_ptr<osg::MatrixTransform> mtCow = dynamic_cast<osg::MatrixTransform*>(node);
//创建矩阵
osg::Matrix mr ;
//旋转,绕Z轴,每次旋转angle角度
mr.makeRotate(angle,osg::Vec3(0.0f,0.0f,1.0f));
//设置矩阵
mtCow->setMatrix(mr);
angle+= 0.01 ;
//继续传递参数,执行其他设置回调的节点
traverse( node, nv );
}
public:
//旋转角度
double angle ;
}; |
|