国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 媒體動畫 > 正文

Director基礎教程:Director 影片劇本、父代劇本與行為

2024-09-08 19:27:09
字體:
來源:轉載
供稿:網友
director 影片劇本、父代劇本與行為
   原著:lingoworkshop
   翻譯:alphachi

   在director中,對于每一種演員類型,都對應著一個“type”屬性。director本身支持的演員類型包括#bitmap、#shape和#field等;其他的一些演員類型,例如#quicktime和#flash,通過內部的xtras也可支持;此外,一些第三方的xtras還能夠創建像#osbox和#ospopupmenu這些類型的演員。

   影片劇本、父代劇本和行為都是#scrpit類型的演員,也就是我們通常所說的劇本演員。

   每一個劇本演員都擁有一個“scripttype”屬性——影片劇本的scripttype是#movie,行為的scripttype是#score,父代劇本的scripttype是#parent。scripttype的重要性在于:

   (1)它決定了一個劇本的作用范圍:影片劇本可以作用于全局范圍;而行為和父代劇本則只可作用于局部范圍。

   (2)在創作模式下,它決定了劇本演員能否被添加到一個角色上:行為能夠被拖拽到角色上并觸發這樣的進程——自動添加行為到角色的scriptlist中,并生成mui對話框以設定具體的屬性數值;而影片劇本和父代劇本則不能被拖拽到角色上,盡管它們可以通過lingo被添加到scriptlist中。

   每一個劇本演員還有一個“scrpittext”屬性,scripttext是在影片運行時或是在消息窗口中運行命令時被執行的lingo代碼;而為了執行這些lingo代碼,director會從劇本演員中創建一個“劇本對象”。當影片運行時,這一過程對于影片劇本來說是自動進行的,而對于父代劇本和行為則必須通過使用“script”關鍵字進行。

   要想創建對劇本演員的一個引用,可以像下面這樣使用“member”關鍵字:

scriptcastmemberreference = member (“scriptcastmembername”)
put scriptcastmemberreference
-- (member 3 of castlib 1)

   要想創建對劇本對象的一個引用,可以像下面這樣使用“script”關鍵字:

scriptobject = script (“scriptcastmembername”)
put scriptobject
-- (script “scriptcastmembername”)

   劇本對象擁有自己獨立的屬性,能夠響應發送給它的各種消息,例如#mousedown這樣的標準事件和#dothishandle這樣的自定義消息。從不同的scripttype中創建的劇本對象本質上都是相同的,唯一的區別在于,director如何給它們發送消息和它們如何被創建。

   director會給影片劇本對象創建一個特殊的內部引用,因此如果不指明要回應消息的劇本對象,director將認定這個消息是為影片劇本的劇本對象設計的,并會將其發送給已經創建的所有影片劇本對象,直到找到了能夠響應此消息的對象為止。在以這種方式將消息發送給影片劇本對象時,不能夠包含任何特定的參數。但如果創建的是一個對此劇本的明確引用,那么在使用這個引用給對象發送消息的時候則可以包含引用本身。

   要想證明這一點,可以創建一個名為“ascriptname”的影片劇本并賦予下面的scripttext:

on handlername scriptobj
put # handlername, scriptobj
end

   如果此時在消息窗口中鍵入“handlername”,則會得到下面的結果:

handlername
-- #handlername <void>

   但如果創建的是一個明確的引用,那么給其發送消息后會得到下面的結果:

scriptobject = script (“ascriptname”)
scriptobject.handlername()
-- #handlername (script “ascriptname”)

   為了試驗,將影片劇本的scripttext改成下面這樣:

on handlername scriptobj
put “nothing here, move along”, scriptobj
end

   點擊“recompile”,然后在消息窗口中鍵入“handlername”并回車,將會看到:

handlername
-- “nothing here, move along” <void>

   這是因為,在調用沒有引用的處理程序時“scripttext”已經改變,所以點擊“recompile”后消息被發送給了新創建的影片劇本對象。但如果我們先發送消息的話,將會看到:

scriptobject.handlername()
-- #handlername (script “ascriptname”)

   在第二個例子中,劇本對象實際執行的代碼并未改變,其存在與劇本演員本身無關。

   現在,將此影片劇本的scripttype改成#parent/#behavior,并對scripttext作如下更改:

on handlername scriptobj
put “i am a script with limited scope”
end

   此時在消息窗口中再次鍵入“handlername”,將會看到:

handlername
-- #handlername <void>

   影片劇本已經不存在了,消息怎么會還能夠被響應呢?這是因為任何在消息窗口中創建的變量均被認為是全局變量,所以早些時候用“scriptobject = script(“ascriptname”)”創建的對影片劇本的引用依然能夠正常工作。此對象是從影片劇本中創建的,director用它來響應消息窗口中發出的“handlername”消息。

   在消息窗口中鍵入:

scriptobject = void
handlername

   這次將會得到“handler not defindeed error”的提示,因為已經沒有影片劇本對象可以響應“handlername”消息了。盡管還存在一個劇本演員,它的scripttext中也定義有“handlername”處理程序,但此劇本演員不是影片劇本,因此director不能自動從中創建劇本對象。雖然我們已經從父代劇本/行為中創建了一個劇本對象,但由于沒有直接將消息發送給對象本身,導致它依然無法響應“handlername”消息。要想獲取父代劇本或行為中創建的劇本對象,應該指明具體的目標:

scriptobject = script (“ascriptname”)
scriptobject.handlername()
-- #handlername (script ”ascriptname”)

   綜上所述,從影片劇本和父代劇本/行為中創建的劇本對象之間的區別在于:

   (1)director只會從影片劇本中自動創建劇本對象。

   (2)director可以自動將“無目標”消息發送給從影片劇本中創建的劇本對象,而不會發

[1] [2] 下一頁  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贞丰县| 南昌县| 武鸣县| 扬中市| 卢氏县| 丹东市| 巴林左旗| 固安县| 双峰县| 寿宁县| 洪雅县| 子洲县| 教育| 台东县| 襄垣县| 丰原市| 新余市| 绍兴市| 沁水县| 安阳县| 汾阳市| 宣恩县| 三河市| 麻城市| 仪陇县| 牙克石市| 长丰县| 徐州市| 沂源县| 福泉市| 类乌齐县| 凌源市| 乐亭县| 梧州市| 绥化市| 通辽市| 连江县| 凉山| 宁安市| 房山区| 宁蒗|