모든 ENTER_FRAME 이벤트 리스너를 한 번에 제거 할 수있는 방법이 있습니까?모든 ENTER_FRAME 리스너 제거
답변
청중을주의 깊게 추적해온 경우에만. 이벤트 리스너에는 "removeAll"유형 기능이 없으므로 관리하기 쉬운 장소에 리스너를 수집하는 데 도움이됩니다.
개체는 IEventDispatcher
개체에 이벤트 수신기를 추가하고 해당 개체를 등록하고 동시에 모든 이벤트 수신기를 제거하는 클래스를 만드는 옵션입니다.
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
private var _eventListeners:EventListeners;
private var _sprite1:Sprite;
private var _sprite2:Sprite;
public function Main()
{
init();
}// end function
public function init():void
{
_eventListeners = new EventListeners();
_sprite1 = new Sprite();
_sprite2 = new Sprite();
_eventListeners.addEventListener(_sprite1, Event.ENTER_FRAME, enterFrameHandler);
_eventListeners.addEventListener(_sprite2, Event.ADDED_TO_STAGE, addedToStageHandler);
trace("_sprite1.hasEventListener = " + _sprite1.hasEventListener(Event.ENTER_FRAME));
trace("_sprite2.hasEventListener = " + _sprite2.hasEventListener(Event.ADDED_TO_STAGE));
_eventListeners.removeAll();
trace("\n_eventListeners.removeAll() invoked\n");
trace("_sprite1.hasEventListener = " + _sprite1.hasEventListener(Event.ENTER_FRAME));
trace("_sprite2.hasEventListener = " + _sprite2.hasEventListener(Event.ADDED_TO_STAGE));
}// end function
private function enterFrameHandler(e:Event):void {};
private function addedToStageHandler(e:Event):void {};
}// end class
}// end package
:
EventListeners.as :
package
{
import flash.events.Event;
import flash.events.IEventDispatcher;
import flash.utils.Dictionary;
public class EventListeners
{
private var _objectDictionaries:Vector.<Dictionary>;
public function EventListeners()
{
init();
}// end function
public function addEventListener(object:IEventDispatcher,
type:String,
listener:Function,
useCapture:Boolean = false,
priority:int = 0,
useWeakReference:Boolean = false)
{
object.addEventListener(type, listener, useCapture, priority, useWeakReference);
var objectDictionary:Dictionary = new Dictionary();
objectDictionary["object"] = object;
objectDictionary["type"] = type;
objectDictionary["listener"] = listener;
objectDictionary["useCapture"] = useCapture;
_objectDictionaries.push(objectDictionary);
}// end function
public function removeAll():void
{
for each(var objectDictionary:Dictionary in _objectDictionaries)
{
var object:IEventDispatcher = objectDictionary["object"] as IEventDispatcher;
var type:String = objectDictionary["type"] as String;
var listener:Function = objectDictionary["listener"] as Function;
var useCapture:Boolean = objectDictionary["useCapture"] as Boolean;
object.removeEventListener(type, listener, useCapture);
}// end for
init();
}// end function
private function init():void
{
_objectDictionaries = new Vector.<Dictionary>();
}// end function
}// end class
}// end package
Main.as 다음은 내가 빨리이를 입증하기 위해 만든 예이다
_sprite1.hasEventListener = true
_sprite2.hasEventListener = true
_eventListeners.removeAll() invoked
_sprite1.hasEventListener = false
_sprite2.hasEventListener = false
+1 ... 유일한 단점은 자연스러운 형식과 다른 addEventListener 구문입니다 (이 경우 EventDispatcher 객체를 먼저 전달해야 함). – NemoStein
@NemoStein은이 'addEventListener()'를 'registerEventDispatcher()'라고 생각합니다. 대신에'IEventDispatcher' 객체를 파싱하는 것이 단점이 아니라 오히려 메소드의 요점임을 깨닫게 될 것입니다. 하지만 언뜻보기에 왜이 'addEventListener()'메소드가 동의어 인 'IEventDispatcher.addEventListener'의 변형 된 버전처럼 보이는지 이해할 수 있습니다. 메서드가 유사하지만 완전히 똑같지 않기 때문에 같은 이름을 부여했습니다. – Taurayi
- 1. ENTER_FRAME 리스너 (as3 용 확장 클래스)
- 2. 플렉스에서 모든 이벤트 리스너 제거
- 3. eval이 추가 된 이벤트 리스너 제거
- 4. 모범 사례 : ENTER_FRAME vs. Timer
- 5. 어떻게 Actionscript 3 ENTER_FRAME 이벤트가 미친 견과입니까?
- 6. Datagridview 모든 열 제거
- 7. JMenu에서 모든 JMenuItem 제거
- 8. QGridLayout의 모든 공백 제거
- 9. 모든 속성 제거
- 10. 안드로이드 뷰에서 리스너 제거하기
- 11. JavaScript : 해당 리스너 내에서 이벤트 리스너를 제거 하시겠습니까?
- 12. 모든 패킷에 대한 하나의 리스너 대 특정 유형을 처리하기위한 별도의 리스너 대
- 13. 예외 리스너
- 14. 이벤트 리스너
- 15. 모든 하위 요소에서 스타일 제거
- 16. "-"다음에 오는 모든 문자 제거
- 17. DataTable에서 데이터가없는 모든 열 제거
- 18. 모든 종류의 중괄호에서 텍스트 제거
- 19. 응용 프로그램의 모든 팝업 제거
- 20. ASP.NET/JavaScript : 모든 쿠키 제거
- 21. 스핑크스 데이터베이스에서 모든 데이터 제거
- 22. 제거 android : 모든 속성의 접두어
- 23. telerik 컨트롤에서 모든 CSS 제거
- 24. 모든 줄 바꿈 (BR) 제거
- 25. WPF에서 모든 모눈의 자식 제거
- 26. 모든 스왑 파일을 제거 하시겠습니까?
- 27. 문자열에서 모든 HTML을 제거 하시겠습니까?
- 28. 중복되는 줄의 모든 항목 제거
- 29. uiview에서 모든 객체를 제거 하시겠습니까?
- 30. 자바 스크립트 이벤트 리스너?
. 사실, 이벤트 리스너에 대해 "모두 제거"기능이있을뿐만 아니라 "ENTER_FRAME에 응답합니까?"이상의 모든 검사를 수행 할 수있는 방법이 없으므로 철저한 반복적 검사를 수행하고 제거 할 수도 없습니다 당신이 사건의 표적을 읽을 방법이 없기 때문에 당신이 발견 한 것들. 가장 좋은 방법은 추가 방법에주의하는 것입니다. –