2012-11-27 5 views
9

저는 프로그래밍에 익숙하지 않고 많은 게임 코딩 자습서를 확인했습니다. 대부분의 경우 사용자 정의 이벤트를 사용하여 메소드를 직접 호출하는 대신 메소드를 트리거하는 것으로 나타났습니다.직접 메서드 호출 대신 사용자 지정 이벤트를 사용하는 이유는 무엇입니까?

이 관행의 이유는 무엇입니까? 왜 그들은 그 방법을 부르지 않는거야? 예를 들어

: 우리는 두 개의 개체가


: AB. A에는 조건이 트리거 될 때 B이 사용해야하는 방법 A.methodA()이 있습니다.

BA.methodA()

대신 실행 A을 알려줍니다 A에 이벤트를 전달합니다 : 구현 왜

BA.methodA()

를 사용
+0

글쎄, 매번 메소드를 트리거해야 할 필요가있을 때마다 가비지 컬렉터가 더 쉽게 생활 할 수 있도록 참고서를 만든다. (그는 걱정할 것이별로 없다). – Ziul

답변

14

주된 이유는 이해의 분리입니다. 이벤트를 사용할 때 클래스 A는 클래스 B의 존재에 대해 알 필요가 없으며 그 반대도 마찬가지입니다. 이것에

일부 이점은 다음과 같습니다

  • 훨씬 쉽게 단위 테스트는
  • 적은을 클래스 A 또는 B를 변경할 때 코드를 깨는
  • 적은 기회를 (당신이 클래스 B없이 A 등급을 테스트 할 수 있습니다) 코드의 다른 클래스에 대한 참조로 인해 메모리 누수 가능성이 줄어 듭니다.
  • 클리너 코드
  • 더 유연하고 재사용 가능한 코드 (다른 클래스는 한 번만 운영자의 추가 코드를 모두 가져 오십시오.)
+4

+1; 개체가 부모와 통신하는 적절한 방법은 이벤트를 추가하는 것입니다. 메서드 호출 또는 공용 속성은 부모가 자식과 통신해야하는 적절한 방법입니다. – JeffryHouser

+3

@ www.Flextras.com - 어린이 클래스가 다양한 부모 클래스와 함께 사용되는 경우 특히 그렇습니다. – BadFeelingAboutThis

2

일반적으로 이벤트를 사용하는 더 큰 응용 프로그램에서는 모든 것을 추상화하는 데 도움이됩니다. 15 개 이상의 클래스가 있고 컨트롤러에 이벤트를 모두 패치 할 때 함수의 추적을 위해 코드의 모든 부분을 읽는 것보다 무슨 일이 일어나는지 쉽게 파악할 수 있습니다. 콜백을 사용하면 스파게티 코드가 생성되기 시작합니다.

그러나 직접 함수 호출은 이벤트보다 빠르게 실행됩니다.

1

개인적으로 사용하기 쉽도록 맞춤 이벤트를 개인적으로 사용합니다. 한 클래스에서 이벤트가 발생하면 (애니메이션이 끝났거나 다운로드 중에 오류가 발생한다고) 이벤트를 전달할 수 있고, 다른 클래스는 그 이벤트를 기반으로 다른 많은 함수를 실행할 수 있습니다. 또한 재사용을 염두에두고 있습니다. 각 클래스의 목표는 다른 패키지가 필요없이 모든 프로젝트에서 실행할 수 있도록 완전한 독립성입니다. 따라서 한 클래스에서 다른 클래스의 메서드를 호출하는 대신 두 번째 클래스가 수신하는 첫 번째 클래스에서 이벤트를 전달한 다음 해당 메서드를 실행합니다. 그런 다음 다른 프로젝트의 첫 번째 클래스가 필요할 때 수정할 필요없이 기능을 잃지 않고 복사/붙여 넣기 만하면됩니다.

EDIT : 또한 이벤트 인수를 전달해야 할 때를 대비하여 사람들이 설명하는 것을 수행하는 경우가 있습니다.

무대에 버튼이 있고 클릭 할 수 있어야하지만 해당 메서드를 수동으로 호출 할 수 있어야합니다. 어떤 사람들은 당신이 널 이벤트를 통과 할 수 있고 오직 하나의 방법만을 가질 수 있다는 것을 깨닫지 못합니다.

private function onClickHandler(e:MouseEvent = null):void{ 
    //as long as you never reference "e" within this method, this method can be used both for MouseEvent listeners and manually calling it elsewhere in the code 
} 

하는 방법은 다른 방법과 다른 아무것도를 호출하는 이벤트 핸들러를 가진 방지 할 수 있습니다 : 또는 당신은 아래 참조, 널 기본 인자로 설정할 수 있습니다. 내 프로그래밍의이 시점에서, 쓰는 모든 AS3 이벤트 핸들러는 기본적으로 이벤트 인수를 null로 설정합니다. 나중에 일을 더 쉽게 만듭니다.

1

You might want to read this.

는 또한 콜백 메소드를 사용하여 사용자 정의 이벤트 모델을 통해 직접 아니라 그것을 매개 변수를 전달할 수 있습니다.

0

나는 아주 간단하게 만든 이벤트 디스패처 시스템을 만들었습니다. AS 이벤트 모델은 매우 강력하지만 99 %의 상황에서는 그 힘이 필요하지 않습니다. 매개 변수가 이벤트로 발생하는 단순한 콜백으로 충분하지 않습니다. 이벤트 모델에서 다재다능 함을 유지할 수 있지만 단순한 버튼처럼 너무 많은 코드 행을 작성할 필요는 없습니다. 내가 설정 같은 간단한 이벤트가 할 수

Buttonizer.autoButton(_buttQuit, this, "onPress"); 
public function onPressQuit(c:Sprite) { 
// Execution goes here 
} 

당신은 당신의 자신의 이벤트 모델을 구축 할 수 있습니다, 그것은 단순한 삶, 당신의 코드가 훨씬 더 간결하게 만들 것입니다.

관련 문제