我想在MovieClip更改位置時收到通知,無論位置是否被我的代碼更改,或者內置拖動操作。 有沒有這樣的事件?MovieClip更改位置時是否存在事件?
回答
+1 @divillysausages :)
那麼你可以做一些骯髒和 「手動」 監測變化。
MovieClip類是動態的,所以我們可以創建變量來存儲最後的X/Y位置,然後在EnterFrame上執行增量。如果增量不爲0,則剪輯已移動。
這真是醜:
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Mover extends Sprite
{
private var mc:MovieClip;
public function Mover()
{
mc = new MovieClip();
mc.graphics.beginFill(0xCC00FF);
mc.graphics.drawRect(0, 0, 50, 50);
addChild(mc);
//storing dynamic properties
mc.lx = mc.x;
mc.ly = mc.y;
//and add monitoring function
mc.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);
mc.addEventListener(MouseEvent.MOUSE_UP, mouseHandler);
//move clip from outisde
// this.addEventListener(Event.ENTER_FRAME, moveClipHandler);
}
private function moveClipHandler(e:Event):void
{
mc.x++
}
private function mouseHandler(e:MouseEvent):void
{
switch(e.type)
{
case MouseEvent.MOUSE_DOWN: (e.target as MovieClip).startDrag(); break;
case MouseEvent.MOUSE_UP: (e.target as MovieClip).stopDrag(); break;
}
}
private function onEnterFrameHandler(e:Event):void
{
var m:MovieClip = e.target as MovieClip;
//check the delta
if (m.x != m.lx || m.y != m.ly) trace('moved!');
m.lx = m.x;
m.ly = m.y;
}
}
}
,但它的工作原理:)
這將是集中在一個類三角形的檢查,這將使該abilty註冊/註銷剪輯和的DisplayObject是個好主意如所須。
有沒有建在你已經基本上2主要選項:
1)或者查詢反覆檢查,如果位置發生了變化。 2)創建擴展影片剪輯一個新類,覆蓋集x和y屬性觸發事件:
public class PosNotifyMC extends MovieClip
{
// the name of the event we're firing
public static const MOVED:String = "moved";
// override the set x property
override public function set x(n:Number):void
{
super.x = n;
this.dispatchEvent(new Event(PosNotifyMC.MOVED));
}
// override the set y property
override public function set x(n:Number):void
{
super.x = n;
this.dispatchEvent(new Event(PosNotifyMC.MOVED));
}
}
如果您的位置改變了很多,然後保持一個本地事件,並多次大火,而不是創建每次都有新的。如果你想要的話,你也可以創建一個新的Event類來保存更新的位置。
謝謝,但這似乎工作,如果我自己設置x和y自己編程。如果我使用dragStart/dragStop移動剪輯,則不會調用覆蓋屬性。 – 2011-03-11 12:22:16
在這種情況下,您還需要重寫stopDrag()事件。如: override public function stopDrag():void { \t super.stopDrag(); \t this.dispatchEvent(new Event(PosNotifyMC.MOVED)); } 如果您需要在拖動時連續調度,則覆蓋startDrag()方法,設置一個輸入框事件偵聽器,它將每幀發送新位置 – divillysausages 2011-03-11 16:56:56
ok,註釋的格式不會「工作:) – divillysausages 2011-03-11 16:59:40
- 1. URL更改時是否觸發事件
- 2. 是否可以更改dnx/dotnetcore軟件包緩存位置
- 3. 在Event.RESIZE中更改MovieClip中的元素位置
- 4. BindingSource ListChanged事件觸發位置更改
- 5. 是否可以在滑動時更改gridview圖像的位置?
- 6. 幻燈片更改前是否存在事件?
- 7. Silverlight中是否存在全局焦點更改事件?
- 8. 檢查庫中是否存在Movieclip
- 9. 圖層暫停時更新CALayer位置是否存在問題?
- 10. 是否可以在保存數據的位置更改localStorage文件名?
- 11. 在ActiveControl更改時,Delphi中是否有事件觸發?
- 12. Android位置管理器 - 「位置未更改」事件
- 13. 是否有與手動更改玩家位置相對應的事件?
- 14. 更改文件保存位置
- 15. 是否可以更改事件順序?
- 16. Pythoncard是否有更改事件?
- 17. 是否event.preventDefault取消更改事件?
- 18. 如何根據鼠標位置更改MovieClip透明度?
- 19. FullCalendar - 是否可以更改結束時間的位置?
- 20. 設置Movieclip的子級深度時無法更改Movieclip的當前幀
- 21. 是否可以更改EF Migrations「Migrations」文件夾的位置?
- 22. AngularJs在保存後更改位置
- 23. 用於MovieClip更改的AS3事件監聽器
- 24. 我是否需要在更改UIImageView的位置後更新約束條件
- 25. 更改Java臨時Internet文件存儲位置
- 26. 地理定位器位置更改事件
- 27. Kendo網格當行更改(未選中)時是否有事件?
- 28. 頁面更改時是否有jQuery事件?
- 29. textarea的值更改時是否執行了任何事件?
- 30. 在System.Runtime.Caching文件緩存中更改文件位置
將其標記爲答案,因爲它與我最近做的事情最接近。 :) – 2011-03-11 15:17:03