关于物体控制的程序框架
一般来说要控制物体的显示需要在类的内容对对象进行控制,但有时,我们希望把物体的行为与物体的显示分开,比如对物体进行动画处理。
这里我从对shapes3d库的习得来谈谈我自己的一些想法。
shapes3d库有专职动画的包,但其内容实现我也不太清楚,猜测是把对象的显示和动画行为分开到不同的类中实现的,由此我想如果在我自己的Processing程序中如何做到在显示对象的外部类中对显示对象作动画处理呢?
首先,动画是对象显示对象的不断更新来实现的,如位置、大小、形状等。因此,我只要能在显示之前更新显示对象的这些属性就可以了。
Processing的draw()函数是显示对象更新和绘制的主要场所,我可以把更新和绘制放在draw()函数中进行。绘制由显示对象自己负责,而更新则由专门的更新类负责了。关键是更新类如何确定更新的时机。如果每加入一个对显示对象的更新类型就要在draw()中添加代码肯定是不符合软件的可扩展性原则的,因为这修改了原程序的代码。
如何在不修改原程序的基础上来更新呢。首先显示对象的更新和绘制我都放在显示对象的同一个方法中updateDraw()。这样在draw()函数中只要调用显示对象的一个方法。但在显示对象的updateDraw()方法中不能由显示对象自己实现更新,而必须由更新对象进行更新。这就必须由更新对象在其内部对显示对象进行设置,而这又进一步要求显示对象要通知更新对象何时进行更新。如何通知呢?这就要有更新对象的引用,进而要求更新对象要通过注册regUpdate()方法把自己的引用放在显示对象里,而显示对象要对这些不同类型的更新对象进行抽象,并调用这个抽象对象的更新方法(update(显示对象))把显示对象传递给更新对象,以便更新对象对其进行更新操作。