亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 辦公 > Flash > 正文

Flash AS 教程:幀循環

2020-07-17 13:19:26
字體:
來源:轉載
供稿:網友
幀循環
幀循環的理念,存在于 Flash 最早的版本中,那時 ActionScript 還不像今天那么強大。把代碼寫入關鍵幀,并在下一幀中寫入像 gotoAndPlay 這樣的語句,使播放頭(playhead)回到前一幀。這樣兩幀之間就形成了一個無限循環,每當播放頭到了代碼幀上時,就會執行那些代碼。例如,在舞臺上有一個實例名為 ball 的影片剪輯。
第一幀的代碼就像這樣:
ball.x ;
第二幀的代碼如下:
gotoAndPlay(1);
實際上第二幀不需要做任何事,只是讓時間軸自動回到第一幀而以。另一個版本是建立三個幀,第一幀進行初始化,寫入只執行一次的代碼,不進行循環。第二幀才是主要的執行代碼,第三幀只寫 gotoAndPlay(2); 這個方法在早期 Flash 版本中常被使用,雖然有點過時,但是同樣可以出色地完成任務。馬上我們還要學到更靈活更強大的設置方法,但今后你會發現其實原理上是一樣的。
影片事件
影片事件在 AS 3 中徹底的消失了,這真是件好事。但還要捎帶提一下,回顧 Flash 5 的時代,只有幀循環和影片剪輯事件兩種選擇。影片事件指代碼直接寫在影片剪輯上,而不是幀上。如何實現影片事件,首先選擇舞臺上的影片剪輯,然后打開動作面板并將代碼寫在上面,這些代碼只對該影片剪輯有效。所有代碼必需寫在事件塊中,比如:
onClipEvent(eventName){
// code goes here
}
對于 onClipEvent(eventName),作用于 eventName(某種事件)。對于"on"類型事件則必需指定鼠標或鍵盤事件,如按下(press)和釋放(release)。
事件名稱(eventName)是指許多Flash 影片事件之一,所謂事件就是在影片中發生的事。事件分為兩種:系統事件和用戶事件。系統事件指發生在如計算機,Flash,或影片上的事件,比如調取數據,調取信息,或播放幀等。用戶事件是指用戶所做的一些事,基本上就是鼠標和鍵盤兩種。影片事件使用得最多的就是 load 和 enterFrame 這兩個。 Load 事件會在影片第一次出現在舞臺上時才執行,且只執行一次。所以說非常適合在這里面寫入初始化代碼。只要把代碼寫在大括號間即可:
onClipEvent(load){
// initialization code
}
我們可以把帶有如下代碼的影片剪輯放入時間軸上(注意:此處為 AS 1 寫法):
onClipEvent (load) {
this._x = 100;
this._y = 100;
}
onClipEvent (enterFrame) {
this._x = 5;
}
本書示例中的代碼不使用這種寫法(因為它已經不是一種語言了),但不論使用何種方法,初始化(initialization),重復動作(repeating actions)和屏幕刷新(screen refresh)都是非常重要的。
事件及事件處理
Flash MX 的 ActionScrpt 發生了重要的改變,這些轉變與革新為 Flash 成為真正的富客戶端程序(RIA)奠定了基礎。其中一個就是全新的事件結構,在編寫非常復雜的行為時比之前的版本好用很多。 Flash MX 之前的版本,只能把代碼放在影片和按鈕的 onClipEvent(eventName) 或 on(eventName) 這兩種事件處理方法中。這就意味著,在設計的時候就要把影片剪輯放到舞臺上,并把代碼寫入影片剪輯中。MX 的事件結構并不完美,但與之前版本來說已經有了長足的進步,并允許我們在任何時候訪問任何事件,或是停止處理任何事件,或是動態改變某個事件的行為,可以想象這有多么的強大和靈活。
要想了解事件,就要明白下面幾條概念:偵聽器(lintener)與處理函數(handler),這兩個名字很貼切,偵聽器就是偵聽事件的對象,處理函數是一個用于處理所要發生的事件的函數。偵聽與處理在 ActionScript 的發展過程中進行過很多次演變,在 AS 2 中就有很多不同的實現方法。為了避免混亂,我很推崇 AS 3,因為它簡化了這個過程,使事件處理變得更方便更一致。
事件偵聽器與處理函數
前面說過,偵聽器是一個用于偵聽事件的對象。我們可以設計一個類,通過調用addEventListener 函數為某事件指定一個偵聽器。輸入要偵聽的事件名稱以及要執行處理的函數名稱。看一個例子:
addEventListener("enterFrame", onEnterFrame);
在加入事件偵聽器時,可使用可選參數,本書中不會用到;對于大多數的應用程序來說,會使用以上這種寫法就夠用了。請注意事件名"enterFrame"為字符串型,戲稱它為“魔力字符串”(Magic String)。為什么這么叫?如果你誤輸入成了"entorFrame",盡管沒有這個事件名稱,編譯器也會編譯執行它,會發現事件處理函數沒有執行。但 AS 3 仍會對其進行處理,除了使用“魔力字符串”以外,還可以使用事件類(Event Class)的屬性。例如:
addEventListener(Event.ENTER_FRAME, onEnterFrame);
實際上 Event.ENTER_FRAME 的值就是”enterFrame”這個字符串。那么這個屬性也可能輸錯就像 Event.ENTOR_FRAME ,但這種方法好在,如果輸入錯誤了,程序會拒絕編譯,并提示你在事件類中不存在該屬性。編譯器會提示發生錯誤的行及確切的字符。所以,最好使用這種方法,除非編譯器會幫我們修正錯誤或編寫代碼。
除此之外,還有其它的事件類型如:MouseEvent.MOUSE_DOWN,KeyboardEvent.KEY_DOWN,TimerEvent.TIMER 等。這些都由 "mouseDown" , "keyDown" , "timer" 這樣的簡單字符串來表示,如果你記不住這些字符串,那么最好就去使用事件類的屬性。
另一個重點是,使用 addEventListener 函數直接調用類中的函數。有時,需要偵聽另一個對象產生的事件,例如,有一個名為 mySpriteButton 的 Sprite 影片(Sprite):影片或按鈕,能完成按鈕的動作。當用戶點擊它的時候就會產生 mouseDown(鼠標按下)事件。偵聽該 Sprite 影片的 mouseDown 事件,就要調用該對象的 addEventListener 方法,如下:
mySpriteButton.addEventListener(MouseEvent.MOUSE_DOWN, onSpritePress);
最后一點,必需要有事件處理函數如 onEnterFrame,在 AS 3 中,可以任意地為事件處理函數命名,這點與以前的 ActionScript 不同。在 enterFrame 示例中,使用 onEnterFrame 做事件處理函數,是因為我們習慣使用這個名稱。在 AS 3 中,onEnterFrame 已不再是關鍵字,當然也可以為這個處理函數命名為 move,run,或是 doSomethingCool。然而,我們已經習慣使用”on”表示事件開始,后面跟一些描述詞如 onStartButtonClick,onConfigXMLLoad 或 onRoketCrash。有些朋友喜歡在事件名后面加上 "Handler" 作為后綴,如: enterFrameHandler,這只是個人偏好問題。
偵聽器用于偵聽事件,但對于一個偵聽器來說,也許會同時偵聽很多事件。在系統內部,一個事件對象擁有一個包括了所有對象及自身的偵聽器的列表。如果一個對象能夠產生多種不同類型的事件,如 mouseDown,mouseUp,mouseMove 等,那么它就擁有一個偵聽器列表,其中包括它所涉及的所有類型的事件。無論觸發何種事件,都會檢索一遍列表,然后使列表中的每個對象都知道所發生的事件。
另一種對事件的描述是,將其看作一個加入到事件行列的偵聽器成員。產生事件的對象將它所產生的事件公布給所有成員,當你不再需要這個對象進行偵聽時,可以令其停止偵聽或使用 removeEventListener 方法解除該成員;就是告訴對象從偵聽器列表中刪除該偵聽器,這樣一來,他就不會再接收信息了。
讓我們看看這段代碼,下面是一段在舞臺中創建 Sprite 影片,并進行繪圖,然后再為其添加偵聽器的代碼:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class EventDemo extends Sprite {
private var eventSprite:Sprite;
public function EventDemo() {
init();
}
private function init():void {
eventSprite = new Sprite();
addChild(eventSprite);
eventSprite.graphics.beginFill(0xff0000);
eventSprite.graphics.drawCircle(0, 0, 100);
eventSprite.graphics.endFill();
eventSprite.x = stage.stageWidth / 2;
eventSprite.y = stage.stageHeight / 2;
eventSprite.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
eventSprite.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
}
private function onMouseDown(event:MouseEvent):void {
trace("mouse down");
}
private function onMouseUp(event:MouseEvent):void {
trace("mouse up");
}
}
}
在初始化函數(init)中創建一個 Sprite 影片,并在里面畫圓,置于舞臺中心,最后兩句是為它添加兩個偵聽器,偵聽鼠標按下(MOUSE_DOWN)和鼠標彈起(MOUSE_UP)這兩個事件。它們是MouseEvent 類的兩個屬性,而這個類必需要導入。最后定義兩個處理函數 onMouseDown 和 onMouseUp。
由事件對象調用事件處理函數,通常還會包括一些事件信息。在處理鼠標事件時,就包括觸發該事件時鼠標位置的信息如:鼠標點擊在按鈕上。對于鍵盤事件,就要包括按下鍵時的信息如 Ctrl,Alt,Shift等。把上述示例保存為 EventDemo.as 文件,并選擇一種前面講過的編譯方式。當運行 SWF 時,就會看到每次點擊或圖形時,都會輸出 pressed 或 released。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品嫩草影院久久久| 亚洲精品视频免费在线观看| 另类美女黄大片| 久久天天躁日日躁| 一区二区国产精品视频| 亚洲国产福利在线| 久久婷婷国产麻豆91天堂| 色一区av在线| 性色av一区二区三区在线观看| 久久中文字幕国产| 日韩毛片在线观看| 欧美国产亚洲视频| 欧美在线中文字幕| 欧美成人免费小视频| 少妇精69xxtheporn| 亚洲二区中文字幕| 中文字幕亚洲精品| 亚洲第一天堂av| 国产中文日韩欧美| 日本一区二区在线免费播放| 中国日韩欧美久久久久久久久| 国产精品美女www| 91欧美激情另类亚洲| 日韩在线欧美在线国产在线| 欧美老女人bb| 96sao精品视频在线观看| 成人xvideos免费视频| 午夜精品一区二区三区视频免费看| 亚洲成人亚洲激情| 国产精品黄页免费高清在线观看| 国产精品福利无圣光在线一区| 91中文在线视频| 精品亚洲va在线va天堂资源站| 精品久久久一区二区| 国产免费一区二区三区香蕉精| 精品成人69xx.xyz| 欧美成人国产va精品日本一级| 97精品国产97久久久久久| 97色在线观看免费视频| 日韩禁在线播放| 91精品久久久久久久久中文字幕| 日韩免费在线观看视频| 国产一区二区日韩精品欧美精品| 欧美激情精品久久久久久免费印度| 欧美精品福利在线| 国产视频一区在线| 一区二区三区亚洲| 久久激情五月丁香伊人| 91久久精品国产91久久| 亚洲成年人影院在线| 日韩精品欧美国产精品忘忧草| 欧美视频中文字幕在线| xvideos亚洲| 国产亚洲精品一区二555| 国产视频久久久久久久| 最近2019免费中文字幕视频三| 久久久久久尹人网香蕉| 久久av在线播放| 中文字幕亚洲专区| 日韩欧美第一页| 久久伊人91精品综合网站| 日韩av手机在线看| 久久理论片午夜琪琪电影网| 日韩av黄色在线观看| 国产成+人+综合+亚洲欧美丁香花| 日韩国产欧美精品在线| 精品国产31久久久久久| 性视频1819p久久| 91精品国产91久久久久久久久| 久久久精品久久久| 亚洲人精选亚洲人成在线| 91久久综合亚洲鲁鲁五月天| 国产精品国产福利国产秒拍| 国产精品精品视频一区二区三区| 欧美贵妇videos办公室| 久久人人爽人人爽人人片亚洲| 中文字幕精品在线| 国产精品久久久久久久av电影| 美女999久久久精品视频| 91九色国产在线| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲精品色婷婷福利天堂| 久久精品国产69国产精品亚洲| 久久久久久久久国产| 日韩欧美一区二区在线| 色综合伊人色综合网站| 国产成人亚洲精品| 日本一区二区三区四区视频| 按摩亚洲人久久| 色综合伊人色综合网| 91香蕉亚洲精品| 97免费在线视频| 91高清视频免费观看| 亚洲国产精品电影在线观看| 国产精品第一区| 欧美人在线视频| 青青久久av北条麻妃海外网| 性色av一区二区咪爱| 日韩高清人体午夜| 91高清免费在线观看| 在线电影av不卡网址| 国内精久久久久久久久久人| 色婷婷av一区二区三区在线观看| 国产成人精品久久二区二区91| 午夜精品三级视频福利| 久久精品2019中文字幕| 日韩成人中文字幕| 国产日韩在线视频| 欧美成人在线影院| 91夜夜揉人人捏人人添红杏| 日韩中文字幕在线观看| 中文字幕日韩免费视频| 国产深夜精品福利| 久久久久久国产精品三级玉女聊斋| 亚洲国产婷婷香蕉久久久久久| 国内伊人久久久久久网站视频| 国产97色在线|日韩| 日韩中文字幕免费看| 国产极品jizzhd欧美| 夜夜嗨av一区二区三区四区| 久久99国产综合精品女同| 91精品久久久久久久久久久| 精品夜色国产国偷在线| 另类色图亚洲色图| 国产精品久久久av| 成人福利视频在线观看| 国产精品亚洲一区二区三区| 日韩欧美成人精品| 国产视频精品自拍| 日本亚洲欧美成人| 国产精品视频网址| 欧美在线视频a| 日韩激情视频在线播放| 免费av一区二区| 欧美日韩国产一区二区| 亚洲国产精品视频在线观看| 欧美精品福利视频| 一本久久综合亚洲鲁鲁| 国产精品一区二区性色av| 精品久久久久久中文字幕一区奶水| 久久久女女女女999久久| 日韩免费电影在线观看| 久久青草精品视频免费观看| 欧美视频在线观看免费网址| 欧美极度另类性三渗透| 久久五月天色综合| 97成人超碰免| 亚洲人成在线观看| 欧美限制级电影在线观看| 亚洲第一av网站| 色综合久综合久久综合久鬼88| 91牛牛免费视频| 欧美性极品xxxx做受| 7m精品福利视频导航| 久久久精品免费视频| 国产香蕉97碰碰久久人人| 国产精品综合久久久| 国产亚洲精品一区二区| 中文字幕一区二区精品| 一色桃子一区二区| 欧美理论在线观看| 欧美在线视频免费播放| 精品视频在线播放| 91麻豆国产精品|