4 Movement
官方代码($sdk)\examples\04.Movement
这个例子讲的是如何使场景节点动起来。
我在学习了官方例子,并仔细看了irr源码后,个人觉着使irr场景节点动起来的方法,严格的说就是官方例子里的两种方法。第一种是直接操纵场景节点ISceneNode调整位置;第二种是通过ISceneNodeAnimator间接操作场景节点ISceneNode调整位置。但似乎官方教程只是为了给大家清楚irr能干什么,并没有对irr进行更深入的讲解。从源码里可以看出,ISceneNodeAnimator并不仅仅是irr内部使用的接口,也是给使用者扩展的接口。通过自己扩展ISceneNodeAnimator,同样也能够操作ISceneNode位置,但这种方法说严格了,也是例子里的方法,只是它没教如何做扩展。
直接操纵场景节点ISceneNode调整位置,这在前面的例子里已经使用过,只是对每个节点初始化时使用一次setPosition方法,将场景节点放到预定的位置,因此场景节点就是静态的,并没有动起来。每隔一段时间,就使用一次setPosition方法将场景节点放到不同的位置,场景节点就成动起来的了。按这样说,使场景节点动起来很简单嘛,只需要在前面例子中的循环内对场景节点的位置进行重新设置就行了。想法虽然没错,但如果场景节点很多很多,而且每个场景节点的运动方法都不一样,这方法还行得通吗?我自认水平低,我可没这水平管理好那么多节点做不同的运动。irr提供的ISceneNodeAnimator就是一个用来自动控制场景节点运动的控制器。在场景节点上添加一个ISceneNodeAnimator后,这个场景节点的运动就受ISceneNodeAnimator控制了。用