怎么在director中建立易阅读,且易扩展的系统一直是Director程序员们努力追求的目标之一。但Director只是一门脚本语言,对面向对象技术支持并不不是很完善,所以很多在C++,java中可以运用的方法,及程序设计思想,在director中是无法直接运用的,在这一点上flash做的比director好。
但是这并不意味着director完全不能借鉴他们的的程序设计思路,在设计模式中最常用的观察者模式和委托事件模式我们就可以很好的借用到director中来。
我改写了director mx2004目录下的一个学习的例子C:\Program Files\Macromedia\Director MX 2004\Learning\Lingo\lingo QT and Flash.dir。对比我上传的例子,你应该会有一个比较清晰的理解。
在我的例子中,关键是EventObj对象。其具体程序如下:
----------------------------------------------------------------------------------
property ObjserverList --观察者模式列表
on new me
ObjserverList=[]
return me
end
on addListenerObj me,EventName,RegSpr --注册的精灵和其注册的事件
tchange=0
listLength=objServerList.count
repeat with i=1 to listLength
if ObjServerList[i].getPropat(1)=symbol(EventName) then --事件列表中有这个精灵
if objServerList[i][symbol(EventName)].getOne(regSpr)=0 then
objServerList[i][symbol(EventName)].append(regSpr)
end if
tchange=1
end if
end repeat
if tchange=0 then
tlist=[:]
tlist.setaprop(symbol(EventName),[])
objServerList.append(tlist)
objServerList[listLength+1][symbol(EventName)].append(regSpr)
end if