2011-11-15 3 views
1

마우스 오버가 인스턴스 위에있는 동안 동영상을 뒤로 재생하고 그렇지 않은 동안 중지 할 함수 (mouseover 이벤트로 호출 됨)를 만들려고합니다.While 루프가 ActionScript 3.0에서 작동하지 않습니다.

이것은 내가 지금까지 무엇을 가지고 :

var b2:rightButton = new rightButton(); //new instance 
b2.X = 550; //instances position 
addChild(b2); //add instance to stage 
b2.alpha = .4; // set instances alpha 
var num = 0; // new variable called 'num' 
b2.addEventListener(MouseEvent.ROLL_OVER, rightScroll); //mouse event for roll over 

function rightScroll(event:MouseEvent) { //the function 
    num = 1; //set num to 1 
    b2.alpha = .8; //set alpha to 80% 
} 

b2.addEventListener(MouseEvent.ROLL_OUT, no_rightScroll); //event for roll out 

function no_rightScroll(event:MouseEvent){ //roll- out function 
    num = 0; //set num back to 0 
    b2.alpha = .4; //set alpha back to 40% 
} 

while (num == 1){ // while num =1 (while mouse is over) 
    prevFrame(); //goto previous frame 
} 

사람이 그 문제를 해결하거나,이 작업을 수행 할 수있는 더 좋은 방법하는 방법을 알고 있습니까?

+0

클래스에 캡슐화되었거나 프레임 스크립트입니까? 그것이 액자라면, 당신은 아마도 심각한 범위의 문제에 뛰어들 것입니다. –

+0

여기서 어떤 범위 문제도 보이지 않지만 애니메이션을위한 모든 종류의 루프를 사용하는 것은 나쁜 생각입니다. – shanethehat

답변

4

현재 코드의 문제는 루프가 동영상의 프레임 속도에 맞춰 실행되지 않으므로 코드가 prevFrame()을 한 번에 여러 번 호출한다는 것입니다. 이로 인해 무한 루프가 발생하여 프로그램이 중단되고 애니메이션 측면에서 완전히 쓸모가 없습니다.

가장 좋은 방법은 동영상의 ENTER_FRAME 이벤트를 수신하고 이벤트가 전달 될 때마다 재생 헤드를 한 프레임 뒤로 이동시키는 것입니다. 버튼 액션에서 리스너를 추가 및 제거하면 원하는 효과를 얻을 수 있습니다.

var b2:rightButton = new rightButton(); //new instance 
b2.X = 550; //instances position 
addChild(b2); //add instance to stage 
b2.alpha = .4; // set instances alpha 

b2.addEventListener(MouseEvent.ROLL_OVER, rightScroll); //mouse event for roll over 
function rightScroll(event:MouseEvent):void { //the function 
    stage.addEventListener(Event.ENTER_FRAME,moveBackwards); //add stage listener 
    b2.alpha = .8; //set alpha to 80% 
} 

b2.addEventListener(MouseEvent.ROLL_OUT, no_rightScroll); //event for roll out 
function no_rightScroll(event:MouseEvent):void { //roll- out function 
    stage.removeEventListener(Event.ENTER_FRAME,moveBackwards); //remove stage listener 
    b2.alpha = .4; //set alpha back to 40% 
} 

function moveBackwards(evt:Event):void { 
    prevFrame(); 
} 
+0

전체 구문을 게시 할 수 있습니까? 어쨌든 응답을위한 Thnsks : D –

+0

전체 구문이란 무엇입니까? 나는 현재 내 전화로 코드를 쉽게 편집 할 수 없지만 필요한 것을 말해 준다면 나중에 대답을 업데이트 할 것이다. 가능한 경우에만 – shanethehat

+0

(프레임 입력 이벤트를 추가하는 방법과 같은)의 전체 코드를 입력하십시오. 부디. –

2

Greensock TweenLite 라이브러리를 사용하면 읽고 쓰는 것이 훨씬 쉬울 것입니다. Tweenlite는 다른 숫자 값처럼 쉽게 프레임을 트위닝 할 수 있습니다. 이벤트 리스너 내부

이 추가보십시오 : 그것은 1 초 지속 시간에 따라 선형 적으로 1 프레임 당신의 무비 클립 (이 예에서는 targetMC)을 트위닝합니다

TweenLite.to(targetMC, 1, { frame:1, ease:fl.transitions.easing.None.easeNone }); 

. 다른 Tweenlite 매개 변수 중 하나를 사용하여 주변에서 놀 수 있습니다.

관련 문제