一些多媒体开发心得

来源:互联网 发布:人工智能 science 编辑:程序博客网 时间:2024/04/29 11:53

2005.2.22
1 當需要在在一組按鈕中做一個事情,而這個事情比較簡單,不需要用到一些行為需要用到的屬性的時候,我們可以這樣做;
一個通用的行為,行為中通過do來調用另一個函數.
然後我們在電影腳本中寫這個函數.這樣我們就可以大大的減少行為的數量.而更好的辦法應該是在父腳本中設隻函數,這樣這個函數就被封裝起來了,不能全局訪問,因而更加的具有安全性.

2005 2 28
在生成表格的數學工具製作中,我們把數據全部封裝在一個全局對象中,全局對象由一個父腳本生成,裡面有生成,銷毀,重置,讀取等等數據,然後設置一個行為,通過設置屬性,我們可以讓不同的文本讀取不同的全局變量的值,這樣就方便了整個程序的佈局.

他一般是这样做的.
先初始化一系列的全局对象,比如说全局化了一个text对象,当以后有文本需要处理的时候,就可以通过这个全局对象来调用一系列的函数.这样就封装了一系列的函数,也便于方便调用和理解这些函数.


对象里面可以同时又嵌套对象.
eg:
parent:Aaron
on new me
   ptext=empty
   Leio=new(script"Leio")
end
rect對象
用來設置精靈的的rect屬性.
設置,讀取,居中等一系列的行為對象.
通过初始化一系列的rect对象,我们可以将一些信息轻松的保留在全局变量当中.

20050302
如何收集同类的精灵.首先,我们需要一个行为,然后在初始化的时候,设置同组的标志.比如说都属于playID组
然后在beginsprite中,我们设置一个数组ourGroupID.然后将其通过sendAllsprite(#event,ourId,ourGroupId)向所有的精灵发送信息.然后在event事件中收集,像这样:
on beginsprite me
    ourGroupList=[]
    sendallsprite(#gather,ourid,ourGroupList)
end
on gather me,pourId,PourGroupList
  if pourID=ourId then
     ourGroupList=PourgroupList
     ourGroupList.append(me)
end if
return pourgroupList
end
这样所有的同族的精灵都收集在一个数祖里面了,则我们可以使用call(#event,ourGrouplist,para)赖掉用函数,而不需要再全局来户呼叫函数了.节省了资源.

具体分析一个公用的多态行为
这里关键我们搞清楚两点:
1  精灵消息的发送是从低通道到高通道的.同时精灵的初始化也是低通道祷高通道的.在低通道的beginsprite向高通道
发送消息,高通道是接受不到的,因为他还没有经过beginsprite的初始化.

2 如果在参数中传递一个数组变量,其实就是将这个数组变量在两个行为中共享,实际上是介于属性和全局变量中的一种变量.

20050307
怎样根据精灵的member屬性来显示相应的列表呢!
看看这个程序.
on getpropertydescriptionlist me
plist=[:]
case sprite(the currentsprite).member.type of
"text":  seleList=[#a,#b]
"field:  seleList[#c,#d]
end case
setaprop plist,#pwhatItem,[#comment:"",#range:seleList,#default:seleList[1]]
return plist
end getpropertydescriptionlist


20050308
关于sendAllsprite机制.
sendAllsprite并不是只发送消息这么简单,他还可以返回值.其实他就是遍历所有的精灵来调用相应的行为函数.而且还可以接收到行为函数返回的值.
一个应用就是:如果你的行为有一组精灵,你想找到一个特定的精灵让所有的精灵都知道他的通道.这样做.
首先在getpropertydescriptionlist中设置好ptype的值,然后这样。
on beginsprite me
  pnum=sendAllsprite(#getMovieSpritenum)
end
on getMovieSpritenum me
  if ptype="movie" then
    return me.spritenum
  end if
end
这样设置成为movie的精灵就会返回自己的通道数,而所有同一行为的精灵因为都有发出消息,所以他们都有收到消息.关键是有一点,
就是设置为movie的通道的精灵应该放在所有行为的最下面才行.不然的话,可能还有精灵可能因为还没有来得及初始化,这样就接受不到message.而得不到正确的值.


image lingo基礎
一 image對象
= image(100, 100, 8, #grayscale)
i = member(1, 1).image
i = member(1,1).picture
i = (the stage).image
sprite(1).image
以上五種方法都行,不過一般不使用picture屬性了.

二 color對象
最基本的這樣寫:
c=color(#rgb,255,255,255)
也可以這樣寫:
c=rgb(255,255,255)
c=rgb("FFFFFF")
c=color(#paletteIndex,0)
c=paletteIndex(0)
我們可以使用一些程序來進行顏色數據的轉換.像這樣
on cmyk rgbval
  cyan = ( 255 - rgbval.red ) / 255.0
  magenta = ( 255 - rgbval.green ) / 255.0
  yellow = ( 255 - rgbval.blue ) / 255.0
  black = min ( [ cyan, magenta, yellow ] )
  cmykval = [ #cyan: cyan, #magenta: magenta, #yellow: yellow, #black: black]
  return cmykval
end
我們也可以從已經存在的數據中提供color對象.如;
c=member("text member").color
c=sprite(1).forecolor
c=i.getPixel(10,10)

兩個非常有用的命令GetPixel和SetPixel


原创粉丝点击