2013-03-05 3 views
4

내 플래시 프로젝트에 StaticText 필드가 있고 마우스가 마우스 위로 움직일 때 일부 코드를 실행해야합니다. 따라서이 코드를 사용해 보았습니다.AS3에서 StaticText를 어떻게 찾을 수 있습니까?

stage.addEventListener(MouseEvent.MOUSE_OVER, mouseRollOver); 
    function mouseRollOver(event:MouseEvent):void { 
    var tf:StaticText = event.target as StaticText; 
    if (tf){ 
    //my code 
    } 
} 

그러나 작동하지 않습니다. 동적 텍스트 필드를 사용하고 var tf에서 StaticText를 TextField로 바꿀 때 제대로 작동합니다. 나는 또한 마우스가 StaticText를 대상으로하지만 특정 텍스트 속성 (예 : "true"로 설정된 것과 같은)을 가진 어떤 종류의 객체를 감지하도록 만들 수 있다면 정적 텍스트 필드로이 객체를 사용할 수 있다고 생각했지만, 이것을하는 방법을 알아 내십시오. 어쨌든 정적 텍스트 필드를 대상으로 감지해야합니다. 어떤 도움을 주시면 감사하겠습니다.
미리 감사드립니다.

+1

가장 쉬운 방법은 모든 텍스트 파일을 무비 클립에 캡슐화하고 (모두 하나씩 하나씩) 캡슐화하고 함께 사용하는 것입니다. DisplayObject의 hitTest 함수를 사용하여 충돌을 감지 할 수 있습니다. – Smolniy

+0

[TextSnapshot] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/TextSnapshot.html) 클래스를 사용하여 정적 텍스트 필드,하지만 그들은 읽기 전용 일종의, 당신은 텍스트를 설정할 수 없습니다. 여전히 [hitTestTextNearPos] (http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/text/TextSnapshot.html#hitTestTextNearPos()) –

답변

2

가장 좋은 방법은 무비 클립에 정적 텍스트 상자를 놓고 그 주위에 코드를 할당하는 것입니다. 정적 텍스트 상자에는 인스턴스 이름이 없으므로 조작 할 수 없습니다.

0

어렵습니다. 이 링크를 참조하십시오 enter link description here DisplayObject가 StaticText인지 확인하고 mousX 및 MouseY 속성을 확인하여 롤오버가이 필드와 관련이 있는지 확인할 수 있습니다. 당신이 동적 텍스트를 사용하고 선택 필드의 선택을 취소하면 당신이 무슨 뜻인지 설명입니다

편집 StaticField

역할을하는 텍스트 필드를 얻을 것이다 작성자 : 우리가 블랙 플래시 문서의 단계로의 StaticText 필드를 보자.

var myFieldLabel:StaticText 
var i:uint; 

//This for check for all staticFields in state and trace its text. It is possible and it is working. I my case I have only one field and I get reference to it in myFieldLabel:StaticText var. Also I change it's alpha to 0.3. 
for (i = 0; i < this.numChildren; i++) 
{ 
var displayitem:DisplayObject = this.getChildAt(i); 
if (displayitem instanceof StaticText) { 
    trace("a static text field is item " + i + " on the display list"); 
    myFieldLabel = StaticText(displayitem); 

    trace("and contains the text: " + myFieldLabel.text); 
    trace(myFieldLabel.mouseX); 
    myFieldLabel.alpha = 0.3; 
} 
} 

//Adds event listener to the stage for mouse move event 
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseRollOver); 

//This is an event handler. I check if the mouse position is within the static field 
function mouseRollOver(evnt:MouseEvent):void 
{ 
if (0 <= myFieldLabel.mouseX && myFieldLabel.mouseX <= myFieldLabel.width && 0 <= myFieldLabel.mouseY && myFieldLabel.mouseY <= myFieldLabel.height) 
{ 
    mouseOverStaticText(evnt) 
} 
else 
{ 
    mouseNotOverStaticText(evnt) 
} 
} 

// this two methods change the static field alpha. Thay are only to show that is posible to detect and manipulate some properties of the StaticField. 
function mouseOverStaticText(evnt) 
{ 
myFieldLabel.alpha = 1; 
} 
function mouseNotOverStaticText(evnt) 
{ 
myFieldLabel.alpha = 0.3; 
} 

StaticText 필드를 관리하는 목적이 무엇인지 잘 모르겠습니다. StaticText는 무언가를해야만하는 경우 관리해야하는 디자인이 아닙니다. 필드가 정적이 아니어야합니다. 선택 가능한 속성없이 동적이거나 MovieClip으로 캡슐화되거나 다른 솔루션이 될 수 있습니다. 케이스.

+0

이 대답은 혼란 스럽습니다. StaticText는 InteractiveObject의 상속 체인에 없기 때문에 반응 할 마우스 이벤트가 없습니다. 'DisplayObject.mouseX' 및/또는'DisplayObject.mouseY'를 사용하면 'mouseX'및 'mouseY'에 의해 제공된 위치 정보가 관련 DisplayObject의 원점을 기준으로하므로 실제로는 그렇지 않습니다. 이 방법으로 무엇을 찾을 수 있습니다 : 내 DisplayObject에 상대적인 마우스는 어디입니까 (이 경우 정적 텍스트). –

+0

그래서 답변을 업데이트합니다. 정적 텍스트가 InteractiveObject를 상속하지 않고 이벤트를 재검토 할 수는 없지만 staticText가 DisplayObject를 상속하고 필드에 따라 마우스의 위치를 ​​알 수 있습니다. 마우스 이벤트 (이 경우 무대)를 일으킬 수있는 개체가 필요합니다. 그리고 이벤트 핸들러에서 mouseX와 Y 위치를 확인해야합니다. 내 예제에서는 mouseRollOver 핸들러의 "if"가이를 수행합니다. 커서가 정적 필드 위에 있거나 없으면 정적 필드의 알파가 변경된다는 것을 알 수 있습니다. –

관련 문제