2009-03-30 4 views
1

루프를 위해 나는 작업으로 onRollOver와 루프를 들어이를 얻을 수 없습니다.에으로 onRollOver 문제

for (var i:Number = 1; i<=4; i++) { 
    this['videobutton'+i].onRollOver = function() { 
     trace(i); 
     this['stream'+i].pause(false); 
     this['video'+i].attachVideo(this['stream'+i]); 
     fadeIn(this['video'+i]); 
    }; 
} 

변수 범위와 i와는 관련이 있다고 생각하지만 해결 방법을 모르겠습니다. 5

어떤 아이디어 :

추적은 저를 준다?

다음은 소스 파일의 : http://drop.io/gqdcyp3

업데이트
내가 나 자신을 해결,하지만 난 그게 최적의 솔루션 생각하지 않습니다 :

var videos:Array = new Array(
'ltp_video-low1.flv', 
'ltp_video-low1.flv', 
'ltp_video-low1.flv', 
'ltp_video-low1.flv' 
); 

function videoOver(buttonMC,video,stream) { 
    buttonMC.onRollOver = function() { 
    stream.pause(false); 
    video.attachVideo(stream); 
    fadeIn(video); 
    }; 
} 

function videoOut(buttonMC,video,stream) { 
    buttonMC.onRollOut = function() { 
    fadeOut(video); 
    stream.pause(); 
    }; 
} 

for (var i:Number=1; i<=4; i++) { 
    this['connection'+i] = new NetConnection(); 
    this['connection'+i].connect(null); 
    this['stream'+i] = new NetStream(this['connection'+i]); 
    this['stream'+i].play(videos[i-1]); 
    videoOver(this['videobutton'+i],this['video'+i],this['stream'+i]); 
    videoOut(this['videobutton'+i],this['video'+i],this['stream'+i]); 
} 

는 어쨌든이 작동합니다. 그러나 누군가가 내게이 솔루션을 만들어 줄 수 있다면 좋을 것입니다. 루프에서 함수를 어떻게 가질 수 있습니까?

답변

1

변수를 정의해야합니다. videobutton 개의 movieClips 각각에 id이 있다고 가정 해 봅시다. i과 달리 이러한 변수는 각 버튼마다 다른 값을 갖습니다. 그런 다음 this.i을 onRollOver 함수에서 더 이상 사용하지 않으면 this.id을 사용합니다.

또한 각 비디오 버튼에서 onRollOver가 실행되기 때문에 기능 내에있는 this은 스테이지가 아닌 비디오 버튼을 가리 킵니다.

새로운 코드는 다음과 같습니다 그것은 번호를 추적

for (var i:Number = 1; i<=4; i++) { 
     this['videobutton'+i].id = i; 
     this['videobutton'+i].onRollOver = function() { 
     trace(this.id); 
       ['stream'+this.id].pause(false); 
       this.attachVideo(['stream'+this.id]); 
       fadeIn(['video'+this.id]); 
     }; 
} 

1 ~ 5, 당신은 이상에 롤 어떤 버튼에 따라. 나머지 코드에 아무런 문제가 없다면 비디오와도 함께 작동해야합니다.

+0

다른 것들처럼 작동하지 않았다. 추적 결과에 올바른 번호가 표시되지만 아무 일도 일어나지 않습니다. 당신은 FLA를 다운로드하여보세요. –

+0

글쎄, 그럼 당신의 문제가 해결되고 그래서이 질문입니다. for 루프가 작동합니다. 이 질문을 닫고 다른 것을 게시해야합니다. 어쩌면 .. – evilpenguin

+0

첫 번째 다른 실수는 스트림이 비디오 버튼에 없지만 무대에 있기 때문에 attachVideo (this [ 'stream'+ this.id ]) with attachVideo ([ 'stream'+ this.id]) – evilpenguin

1

내가 전에 플래시와 아무 짓도하지 않은,하지만 변수 iclosed over 인 것 같습니다. 롤오버 처리기 내부 코드만을 롤오버에 실행되고, i 그 때 평가된다; 함수가 정의 된 시점이 아닙니다.

다른 함수 내에서 핸들러 함수를 작성하여, 각 핸들러는 가야 자신의 i :

for (var i:Number = 1; i<=4; i++) { 
     this['videobutton'+i].onRollOver = MakeRollOverHandler(i); 
} 

function MakeRollOverHandler(i:Number) 
{ 
    return function() { 
     trace(i); 
       this['stream'+i].pause(false); 
       this['video'+i].attachVideo(this['stream'+i]); 
       fadeIn(this['video'+i]); 
     }; 
} 

당신은 아마 액션의 구문 조정해야하지만 일반적인 생각은 소리 함수 매개 변수가있는 가정이어야한다 가치에 의해 전달. MakeRollOverHandler를 호출 할 때마다 i이 생성됩니다.

나는으로 onRollOver 이벤트를 트리거 한 버튼에 대한 정보를 제공하지 않는 액션 문서에서 확인할 수 있습니다. 부끄러운 일이 있다면 그 정보를 사용하여 적절한 필드 집합을 선택할 수 있었기 때문입니다.

+0

작동하지 않았습니다. trace (i) 올바른 숫자를 반환하지만 trace (this [ 'stream'+ i]); undefined를 반환합니다. –

+0

아이디어가 있으십니까? 내가 원한다면 소스 파일을 추가했다;) –

1

음,이 또는 도움이되지 않을 수 있습니다. 플래시 AS2는 엿 엿 범위 지정을 가지고 있으며, 또한 이벤트 기반의 물건, 무엇을 "내가" "내가"무엇에 다를 수 있었다. 내가 ("I :"+ 난 + "this.ID:"+this.ID)을 추적하기 위해 그것을 조금 확장하지만 당신은

trace(i) 

이 경우 당신은 항상 5를 얻을 것이다 , 내가 1-4 이었더라도 있기 때문에 루프를 통해 루프가 완료되고 "i"는 버튼을 누른 후 5로 유지됩니다 (나는 이것이 5가 아닌 4 비트가 아닌 이유를 확신하지 못합니다 ...). 이러한 종류의 경우에 ID 필드를 무비 클립에 추가하는 것이 좋습니다.

ID는 토큰 접근 (I가 그것이라고 무슨 생각)는 MovieClip 클래스의 기본 특성 (I는 "videobutton을"추측 해요 무비 클립에서 만든)

for (var i:Number = 1; i<=4; i++) { 
    this['videobutton'+i]["ID"]=i 
    this['videobutton'+i].onRollOver = function() { 
     trace("i:"+i+" this['ID']:"+this["ID"]); 
     this['stream'+this["ID"]].pause(false); 
     this['video'+this["ID"]].attachVideo(this['stream'+this["ID"]]); 
     fadeIn(this['video'+this["ID"]]); 
    } 
} 
아니므로에 액세스 할 수 있습니다

나는 이것이 잘되기를 바랍니다 .... 그렇지 않다면 계속 게시하십시오!

+0

작동하지 않았다. 추적 결과는 다음과 같습니다. i : 5 this [ 'ID'] : 1 i : 5 this [ 'ID'] : 2 i : 5 this [ 'ID'] : 3 i : 5 this [ 'ID '] : 4 –

+0

아이디어가 있으십니까? 당신이보고 싶다면, 나는 소스 파일을 추가했다;) –