2010-05-07 5 views
0

여기에 내가 마우스 오버 효과와 버튼을 생성 할 때 사용할했습니다 예입니다 :AS3 : Action Script 3 Code를 단순화하는 방법은 무엇입니까?

this.buttonExample.buttonMode = true; 
    this.buttonExample.useHandCursor = true; 
    this.buttonExample.addEventListener(MouseEvent.CLICK,myaction); 

내가 AS3에 새로운 해요 -이 같은이 코드를 단순화 할 수있는 방법이 있습니다를 :

this.buttonExample.buttonMode = true;.useHandCursor = true;.addEventListener(MouseEvent.CLICK,myaction); 

왜 작동하지 않습니까?

+0

왜 작동해야합니까? – sharvey

+0

s.harvey에 동의합니다. 당신은 일을 구성하고 작동 할 것이라고 기대할 수 없습니다. – davr

답변

4

이미 간단합니다. 첫째

this.buttonExample.buttonMode = true; 
this.buttonExample.useHandCursor = true; 
this.buttonExample.addEventListener(MouseEvent.CLICK,myaction) 

항상 무엇을 통해 가독성을 위해 갈 훨씬 더 읽기

this.buttonExample.buttonMode = true;.useHandCursor = true;.addEventListener(MouseEvent.CLICK,myaction); 

보다. 둘째,

this.buttonExample.buttonMode = true; 

아무 것도 상호 작용할 수 없도록 개체를 반환하지 않습니다. 당신이 그 패턴을 많이 사용하는 경우

4

, 당신은 도우미 함수를 만들 수 있습니다

public function setAsButton(button:Sprite, clickHandler:Function):void { 
    button.buttonMode = button.userHandCursor = true; 
    button.addEventListener(MouseEvent.CLICK, clickHandler); 
} 

을 그리고 어딘가에 전화 :

setAsButton(this.buttonExample, myaction); 
+1

그리고 '이'를 빠뜨릴 수 있습니다. – bitc

+0

나는 한걸음 더 나아가서 클래스를 만들 것이다. var btn : Btn = new Btn (btnExample); btn.addEventListener (... – maxmc

0

당신이 with statement를 사용할 수 있습니다. 그러나 많은 모호함과 불명확 함을 초래하기 때문에 그렇게하지 않는 것이 좋습니다.

또한, 여러 과제를 가질 수 있습니다

this.buttonExample.buttonMode = this.buttonExample.useHandCursor = true; 

이 때로는 유용하지만, 가독성을 위해, 당신이 그것을 남용하지 않아야합니다.

greetz
back2dos

당신이 계속해서 또 다시 this.buttonExample를 입력하는 것은 너무 반복적하다고 생각하는 경우
+0

AS3의 "with"에 성능 문제가 있음을 읽어 보았습니다. – Shiki

+0

@Shiki : 엄격하게 입력 된 방식으로 속성에 액세스하면 안되지만 그렇지 않은 경우 속성 해상도가 다소 비쌉니다. – back2dos

+0

"엄격하게 형식화 된 방식으로 액세스 한"의미는 무엇입니까? – Rihards

3

, 단순히 변수에 해당 객체를 할당하고 문장의 나머지 부분에서 그 변수를 사용

var b : Button = this.buttonExample; 
b.buttonMode = true; 
b.useHandCursor = true; 
b.addEventListener(...); 

다른 사람이 언급했듯이 with 문도 있지만 코드를 읽기가 어렵게 만들고 이상한 결과를 초래할 수 있으므로 사용하지 않는 것이 좋습니다.

with (this.buttonExample) { 
    buttonMode = true; 
    useHandCursor = true; 
    addEventListener(...); 
} 

당신은 물론, 체인 과제와 같은 다른 트릭이 제안을 결합 할 수 있습니다 :

var b : Button = this.buttonExample; 
b.buttonMode = b.useHandCursor = true; 
b.addEventListener(...); 

이 방법으로 매우주의에만 체인 과제에 만나 할당 된 값이 불변 경우 (예 같은 객체가 왼쪽에있는 모든 변수에 할당되므로 , false, 숫자 및 문자열, 그러나 배열 또는 대부분의 다른 객체가 아님).값이 불변 인 경우이 문제가되지 않습니다, 그러나 그것은 변경할 수 있다면 당신은이 예에서 다음과 같이 이상한 결과를 얻을 수 있습니다 ab 모두 을 참조하는지

a = b = [ ]; 
a.push(1); 
b.push(2); 
trace(a); // outputs 1, 2 
trace(b); // also outputs 1, 2 

이 결과에 대한 이유는 같은 배열 및 배열을 변경할 수 있기 때문에 개체에 액세스하는 방법은 중요하지 않습니다, 그것은 여전히 ​​변경됩니다. ab은 다른 변수이기 때문에 다른 배열을 참조하지 않습니다.

당신은 다음과 같은 것을 할 수 있다고 생각할 수도 있지만, 이 아닌 것은 일 것입니다.

// this will NOT work 
var b : Button = this.buttonExample; 
(b.buttonMode = b.useHandCursor = true).addEventListener(...); 

b.buttonMode = b.useHandCursor = true 말을하지만, .addEventListener(...)가 할당 표현 (예를 들어, b.buttonMode = true)의 값이 왼쪽 (예를 들어, true)에를 할당 된 값 점이다 추가하지 작동 이유. 그것에 .addEventListener(...)을 추가하면 본질적으로 true.addEventListener(...)이라고 말하면서 분명히 원하는 것은 아닙니다. 즉

b.buttonMode = b.useHandCursor = false; 

희망도 일반 위에서 언급 한주의 사항을 확인해야합니다

b.useHandCursor = false; 
b.buttonMode = b.useHandCursor; 

에 해당합니다.