尝试做了一个向量尺工具,用来模拟测量航图上的航线角,或者是两条线之间的夹角。
效果如下:
航线角的测量:以量角器中心放在航线(图中黑色实心线)与经线(图中的蓝色细线)的交点处,直尺边压住航线,从与经线北端重合的刻度线上读取数据。
向量尺分为两个部分,一个是直尺,另一个是(半圆形)量角器。量角器的正中向上方向为零度位置,在使用时,让量角器正上方的箭头指向测量位置的经线方向,直尺边线与航线重合,直尺的边线在量角器上的读数就是航线的走向(这里是自动计算的)。
这个设计中,类的划分是个令我头痛的问题,我的元件大多是在库中建好的,因此,类的继承关系有些理不顺,经过几个版本的修改,终于还是达到我想要的效果。通过这个练习,实现了几个较具实用性的类,比如:Knob类,将它拖放到一个元件内部以后,该元件即可以实现拖拽旋转的效果,并且Knob 具有自动显隐的效果。向量尺元件可以放置到需要的场合,自动实现相关功能,从这点看,像是实现了一个组件。
类的层次结构设计始终是本次练习的重点,代码被搬来搬去好几次,终于有了点管理多个类的感觉。结构调整好后,再添加拖拽块的动态显隐效果,相对就容易很多。
最终的元件结构图如下所示:
VProt 和 VRuler 类直接继承自 DraggableSprite 类,因此自动具有可拖拽的特性,prot_mc 与 ruler_mc 之间旋转度数的差值就是所量角度的具体数值。在对拖拽块的显隐效果的不断修正过程中,发现元件与鼠标的碰撞检测放在最上层,VectRuler 中比较的方便。