日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AS3初学者容易迷糊的几个问题

發(fā)布時間:2025/3/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AS3初学者容易迷糊的几个问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.Sprite/MovieClip的Enter_Frame事件,不受addChild/removeChild影響

簡單點(diǎn)講:Sprite或MovieClip對象一旦為其添加了Enter_Frame事件監(jiān)聽,對應(yīng)的Enter_Frame處理函數(shù)將會馬上被調(diào)用,并一直執(zhí)行下去(不管你是否將其addChild到顯示列表,或者將其從顯示列表removeChild),直到該對象removeEventListener相應(yīng)的監(jiān)聽器為止。

同樣:MovieClip一旦被new出來,就會自動播放(在未用任何代碼stop()的前提下),不管你是否將其addChild或removeChild

注:其它事件也類似,在AS3的世界中,事件一旦被監(jiān)聽,要想停止事件響應(yīng),唯一的方法只能是removeEventListener。(這一點(diǎn)跟c#中完全不同,在c#中不管是webform還是winform,一旦按鈕被disabled了,肯定就無法觸發(fā)按鈕的Click事件,但在AS3中,組件是否被禁用,跟組件是否能響應(yīng)事件完全是沒有任何關(guān)聯(lián)的!)

測試代碼:

var _sprite:Sprite = new Sprite(); _sprite.graphics.lineStyle(1,0); _sprite.graphics.beginFill(0xff0000); _sprite.graphics.drawCircle(0,0,50); _sprite.graphics.endFill();_sprite.addEventListener(Event.ENTER_FRAME,onSpriteEnterFrame);//實(shí)際上:程序執(zhí)行到這里就會一直不停的跑onSpriteEnterFrame了function onSpriteEnterFrame(e:Event):void{trace("我是_Sprite",getTimer()); }addChild(_sprite); _sprite.x = stage.stageWidth/2 ; _sprite.y = stage.stageHeight/2 ;_sprite.addEventListener(MouseEvent.CLICK,onSpriteMouseClick);function onSpriteMouseClick(e:MouseEvent):void{removeChild(_sprite);//移除自己 _sprite=null;//注意:即使把自身設(shè)置為null,原來注冊的onSpriteEnterFrame函數(shù)仍會一直執(zhí)行,正確的方法只能用removeEventListener才能移除Enter_Frame事件//_sprite.removeEventListener(Event.ENTER_FRAME,onSpriteEnterFrame); }

2.ADDED、ADDED_TO_STAGE、REMOVED、REMOVED_FROM_STAGE這幾個事件的區(qū)別

var _container:Sprite = new Sprite();_container.addEventListener(Event.ADDED,onAdded); _container.addEventListener(Event.ADDED_TO_STAGE,onAddedToStage); _container.addEventListener(Event.REMOVED,onRemoved); _container.addEventListener(Event.REMOVED_FROM_STAGE,onRemovedFromStage);function onAdded(e:Event):void {trace("onAdded:",e); }function onAddedToStage(e:Event):void {trace("onAddedToStage:",e); }function onRemoved(e:Event):void {trace("onRemoved:",e); }function onRemovedFromStage(e:Event):void {trace("onRemovedFromStage:",e); }addChild(_container); //onAdded: [Event type="added" bubbles=true cancelable=false eventPhase=2] //onAddedToStage: [Event type="addedToStage" bubbles=false cancelable=false eventPhase=2]var _sub:Sprite = new Sprite();_container.addChild(_sub); //onAdded: [Event type="added" bubbles=true cancelable=false eventPhase=3]/*_container.removeChild(_sub); //onRemoved: [Event type="removed" bubbles=true cancelable=false eventPhase=3]*/removeChild(_container); //onRemoved: [Event type="removed" bubbles=true cancelable=false eventPhase=2] //onRemovedFromStage: [Event type="removedFromStage" bubbles=false cancelable=false eventPhase=2]_container.removeChild(_sub); //onRemoved: [Event type="removed" bubbles=true cancelable=false eventPhase=3]

區(qū)別:

ADDED是子對象被添加到自身時觸發(fā),ADDED_TO_STAGE是對象本身被添加到顯示列表時觸發(fā);類似的:REMOVED當(dāng)子對象從自身移除時觸發(fā),REMOVED_FROM_STAGE是自身從顯示列表中移除時觸發(fā);

ADDED/REMOVED事件會冒泡,而ADDED_TO_STAGE/REMOVED_FROM_STAGE不冒泡,也就是說每次addChild或removeChild自身時,下面的ADDED/REMOVED事件也會冒泡上來先被觸發(fā),然后才觸發(fā)ADDED_TO_STAGE/REMOVED_FROM_STAGE事件.

轉(zhuǎn)載于:https://www.cnblogs.com/yjmyzz/archive/2010/07/06/1772458.html

總結(jié)

以上是生活随笔為你收集整理的AS3初学者容易迷糊的几个问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。