2010-01-25 3 views
0

다른 카드가 있으므로 웨이브와 같은 형태로 카드를 공개해야합니다. 즉, 카드가 서로 다른 타이밍으로 연속적으로 체계적으로 열고 닫음으로써 웨이브를 형성합니다.(액션 스크립트) 오브젝트의 웨이브 모양의 애니메이션

나는 배열 alr에 카드가 있습니다. 가장 효과적인 방법으로이 애니메이션을 구현하려면 어떻게해야합니까? 고마워!

+0

당신은 당신이 뭘 하려는지의 예를 가지고 있습니까? "형태와 같은 물결로 그들을 되살아 라."모호한 말입니다. – sberry

+0

나는 1 장의 카드를 열고 천천히 닫고 다른 카드를 열고 천천히 닫고 싶다. 예를 들어 네 번째 카드에 이르렀을 때 첫 번째 카드는 이미 닫혔다. 이해한다? – yeeen

답변

2

는 추정 무엇을 의미하는 것은 경기장 "파"효과가 배열을 정의하는 시도 인이 다른 기능을 사용하는 경우는 트위닝 엔진 등을 사용하거나 경우에 따라 달라집니다, 오프셋 (offset).

Timer 클래스는 예를 들어,이 일에 당신을 잘 할 것 :

private var t:Timer = new Timer(100, 0); 
    private var index:int = 0; 
    t.addEventListener(TimerEvent.TIMER, ping); 
    t.start(); 

    private function ping(ev:TimerEvent) { 
     if(index < waveArray.length){ 
      waveArray[index].startAnimation(); //If animated by object 
      startAnimation(waveArray[index]); //If animated by container 
      index ++; 
     } 
     else { 
      t.stop(); 
      endAnimation(); //All cards have animated 
     } 
    } 
+0

그래, 나는 경기장 물결 효과를 언급하고있다. 내가 "사적인"이라는 단어를 사용할 수없는 것처럼 보였습니다. 나는 그것을 제거했습니다. if-else가 for 루프가 아닌 이유는 무엇입니까? – yeeen

+0

@yeeen :이 애니메이션은 'TimerEvent's에 의해 트리거됩니다 ... for 루프를 사용하면 타이머를 사용하면 타이머가 한 번에 시작됩니다. – back2dos

+0

이 작업은 매 100ms마다 수행됩니다 (Timer() 생성자의 첫 번째 값)는 'ping'함수를 실행하며, if/else 루프는 모든 항목이 완료되고 배열의 범위를 벗어난 오류를 방지하면 타이머를 중지하기위한 것입니다. 인덱스 변수가 배열을 통해 천천히 루프하면 각 애니메이션이 시작될 때까지 오프셋이 생깁니다. 기본적으로 이것은 각 호출에 대한 오프셋이있는 for 루프입니다. – longstaff

2

Math.sin() 및 Math.cos()를 사용하면 편합니다. 간단한 삼각 함수를 살펴보고 라디안과 각도 변환을 암기하십시오. 이러한 개념을 잘 이해하면 다른 상황에서 재사용 할 수있는 많은 재미 있고 흥미로운 트릭이 있습니다. 다음 스 니펫은 "물결 모양과 같은"개체를 이동하는 방법을 보여줍니다. 그것은 당신이 찾고있는 것과 정확히 일치하지 않을 수도 있지만 그것이 당신이 가려고하는 곳을 찾는데 도움이 될 것입니다. 이 파일은 CS4 IDE를 사용하여 AS3에 작성됩니다.

var n:Number = 0; 
var ball:MovieClip = new MovieClip(); 
ball.graphics.beginFill(0xFFCC00, 1); 
ball.graphics.drawCircle(0, 0, 15); 
addChild(ball); 

ball.x = stage.stageWidth; 
ball.y = stage.stageHeight * .5; 

var prev:Point = new Point(ball.x, ball.y); 

addEventListener(Event.ENTER_FRAME, onEnterFrameHanlder); 

function onEnterFrameHanlder(event:Event):void 
{ 
    n+=3; 
    ball.x = Math.cos(n * .25 * Math.PI/180) * (stage.stageWidth * .5) + (stage.stageWidth * .5); 
    ball.y = Math.sin(n * Math.PI/180) * (stage.stageHeight * .5) + (stage.stageHeight * .5); 

    graphics.lineStyle(1, 0xFFCC00); 
    graphics.moveTo(ball.x, ball.y); 
    graphics.lineTo(prev.x, prev.y); 

    prev.x = ball.x; 
    prev.y = ball.y; 
} 
+0

재미있는 애니메이션을 가져 주셔서 감사합니다. 그러나 이것은 내가 찾고있는 것이 아닙니다. 1 장의 카드를 열고 천천히 닫고 다른 카드를 연 다음 천천히 닫으십시오. 예를 들어 4 장의 카드에 도달하면 1 장의 카드가 이미 닫혀 있습니다. – yeeen

+2

jeremynealbrown이 말하는 것은 당신이보아야 할 것입니다 Math.sin과 Math.cos는 'wave'와 같은 함수에 사용하기 매우 좋습니다. 어떤 일이 일어나는지 알기 위해 매개 변수를 변경해보십시오. 당신이 필요로하는 것을 무엇이든 쓸 수 있습니다. – Antti

+0

내 다른 관련 qn을 확인하십시오 : http://stackoverflow.com/questions/2161123/move-objects-in- an-array-producing-a-stadium-wave-effect – yeeen