有很多人在論壇上討論 director 與 flash 孰優孰劣,無論是國內論壇還是國外討論組,情況都是相同的。雙方的擁護者都盡可能的說服對方自己喜歡的軟件是最棒的,其實在很多情況下這種爭論是沒有任何意義的。我本人兩種軟件都使用,我喜歡用 flash 來做簡單的動畫角色,然后導入 director ,而不是象以前那樣全部在 director 中做 film loop 動畫。做動畫方面, director 確實不如 flash, 但是我還是喜歡使用 lingo 來編寫程序。所以我不會象一個真正的 flasher ("閃客")那樣不停的發掘 flash 的潛力來做出一切效果(盡管有的效果做出來很勉強,或是效率太低,性能較差)。 最近我通過做一個剃須刀演示項目,進一步驗證了 director 在處理點陣圖像方面的確優于 flash。
其實這個項目很簡單: 通過在網頁中拖動剃須刀,將一個的人的面部胡須刮干凈。
這個項目最開始的想法是用 flash 來做。我們的 flash 技術人員最開始的想法是,將這個人臉部胡須部分的照片圖案(矩形區域),細致切分,然后將同一個人的臉部沒有胡須的照片(為了達到頭部圖案完全吻合,我們是在同一張照片上通過 photoshop 做添加胡子的處理)同樣分割為很多相同的小塊,然后作為元素導入 flash。這樣有胡須的部分分為很多小塊,導入 flash ,然后相同的無胡須的部分也分為相同個數的小塊導入 flash ,然后將對應的每一個小塊做一個 mc.
這個 mc 的第一幀放置有胡須的切塊圖案,第二幀放置無胡須的切塊圖案,mc 的第一幀放置 stop action, 當鼠標 over 的時候,讓這個 mc 跳動到第二幀沒有胡須的小切塊。這樣,當用剃須刀做的 mc 替代鼠標后,當它滑動到這些mc(有胡須的小切塊圖案)的時候,他們就會跳到相應第二幀(也就是沒有胡須的小切塊圖案),這樣就可以完成刮胡子的演示了。
方法是很簡單的: 但是實際做起來卻出現了如下的問題。
1:通常這樣的切圖文件必須非常細,才可以滿足客戶的要求,然后切圖越細致就意味在 flash 中要作更多的 mc 和 symbol。 這樣不但增加了文件的大小,而且也使得文件運行特別慢。
2:由于這種方法制作的切圖大小是開始定好的,如果希望將切塊更加細分的話,你必須從新切圖和導入。必須重復勞動。
3:這種方法制作 swf 文件通常比 director 制作的 dcr 文件大不少(至少是一倍)。
而采用 director 8 的 image lingo 指令,你可以完全的避免上述問題。
制作方法如下:
所需的素材:
一張沒有刮胡子的照片位圖,和一張同一個人刮完胡子的照片位圖。(為了版權問題,我將臉部部分去掉,保留胡須部分的位圖圖案。)見圖如下:
接著我們開始介紹程序部分,這段程序非常的短小,核心部分的代碼總共 6 行。然是為了理解這六行代碼,你需要了解 director 8 新增加的 image lingo 的一個核心函數,這就是 copypixels
copypixels 的功能就是將位圖數據從一個 image 復制到另一個 image。
現在任何一個 director 角色(member)都有一個 image 的屬性,這是很多人忽略的地方。這個 image屬性是內存中的一個圖形對象的引用,而這個圖形對象是角色成員的一個圖形表示。角色成員可以是 位圖,flash 角色,文字角色,甚至是舞臺 stage. 我把剛剛導入的兩個位圖角色起名為 source (刮完胡子的照片位圖 face.jpg)和 targer (未刮完胡子的照片位圖 faceoff.jpg)
在 director 中角色分布圖如下:
control + m 打開 director 中的消息窗口,輸入
put member("source").image
n <image:1d151c> -- 1d151c 就是該 image 對象在內存中的地址。
而 image 屬性是對實際數據的一個引用。而 image 圖形對象是角色成員在內存中的實際數據。
任何對 image 對象的改動都是對 cast 中相應的原始角色的改動。這一點要注意,除非 image 對象是你自己創建的而且和角色成員不相關聯,否則必須注意不要意外改動的原始角色成員。
你可以調用 image() 函數來創建自己的對象。實例如下:
image (width, height, bitdepth)
thisimage = image (320,240,16)
你現在創建了一個寬為 320 pixel 高為 240 pixel ,位深為 16 bit 圖形對象。
你可以用 copypixels 函數來給圖形對象添加數據。該函數的格式如下(這是本程序的關鍵):
targetimage.copypixels(sourceimage, destinationrect, sourcerect, <parameters>)
該函數功能是通過目標圖形對象調用 copypixels 函數,將 源圖形對象,從源圖形對象的矩形區域 sourcerect 復制到 目標圖形對象的矩形區域destinationrect。
以本程序為例子,我們的目的: 程序記錄鼠標移動的軌跡,從鼠標滑動的點為左上角開始,記錄一個虛擬的矩形區域,將這個矩形坐標(相對與該圖形左上角為原點)記錄下來。然后通過targetimage (就是我們這個程序的角色 "target "-未刮胡子的照片圖案)調用 copypixels 函數將 source
[1] [2] 下一頁
新聞熱點
疑難解答