2012-01-05 3 views
1

설명 방법을 잘 모르겠습니다. 먼저 몇 가지 코드를 게시하고 설명해 보겠습니다. 이 솔루션은 비록 단순해야한다, 그래서 나는 ..가장 가까운 AS3 - Tween?

public function tweenUpdate():void{ 
      if (_currentFrame>=358) _currentFrame -= 359; 
      if (_currentFrame<0) _currentFrame += 359; 
      var myBitmap:Bitmap = new Bitmap(buffer[_currentFrame+1]); 
      myBitmap.smoothing = true; 
      imageBuffer.data = myBitmap; 
     } 

너희들은 내가 여기서 할 노력하고있어 알고 확신 그리고 이것은 그것을 트리거 무엇 :

TweenLite.to(this, 2, {_currentFrame: 50, ease:Strong.easeOut, onUpdate:tweenUpdate, onComplete:tweenComplete}); 

그래서, 내가 ' 360 이미지가 있습니다 (하지만 _currentFrame을 사용하여 어떤 이미지를 표시할지 결정하므로 _currentImage : int를 살펴보십시오).

내 현재 프레임에서 내 대상 프레임과 트위닝하고 싶습니다. 이것은 지금 내 코드가하는 것입니다 (지금까지 나를 도와 주신 shanethehat에게 감사드립니다).

그러나 가장 짧은 방법으로 트위닝하고 싶습니다.

예 : 프레임 10에 있고 프레임 350에 가고 싶습니다. 10-350 (340 프레임 건너 뛰기) 대신에 다른 방향으로 가고 싶습니다. 10에서 350 (프레임 0으로 건너 뛰고 359에서 350으로 계속 건너 뜁니다). 나는 그것이 최선의 하나 확실하지 않다하더라도,

답변

0

여기 하나 개의 솔루션입니다 P :

난 당신이 내가 여기 말을 노력하고있어 수 있기를 바랍니다. 100 프레임짜리 MovieClip 만 사용하여 가볍게 테스트 했으므로 버퍼 설정에 적용 할 때 작동하는 것이 좋습니다.

import com.greensock.TweenLite; 
import com.greensock.easing.Strong; 

var _currentFrame:int = 1; 

function tweenTo($target:int):void 
{ 
    if(_currentFrame - $target > buffer.length - _currentFrame + $target) { 
     //quicker to loop from buffer.length to 0 
     _currentFrame = $target - (buffer.length - _currentFrame + $target); 
    } else if (buffer.length - $target + _currentFrame < $target - _currentFrame) { 
     //quicker to loop from 0 to buffer.length 
     _currentFrame = $target + (buffer.length - $target + _currentFrame); 
    } 
    TweenLite.to(this,2,{_currentFrame:$target,ease:Strong.easeOut,onUpdate:tweenUpdate}); 
} 

function tweenUpdate():void 
{ 
    var myBitmap:Bitmap; 
    if(_currentFrame < 1) { 
     myBitmap = new Bitmap(buffer[buffer.length + _currentFrame]); //_currentFrame is negative 
    } else { 
     myBitmap = new Bitmap(buffer[_currentFrame % buffer.length]); 
    } 
    myBitmap.smoothing = true; 
    imageBuffer.data = myBitmap; 
} 

당신은 tweenTo 메서드를 호출하여 트윈마다를 시작합니다. 이렇게하면 트윈이 자연스럽게 수행 할 때 이동하는 것보다 시작점과 끝점 사이를 점프하여 대상에 대한 더 짧은 경로가 있는지 확인합니다. 더 빠를 경우 _currentFrame의 초기 값이 변경됩니다.

tweenUpdate 메서드에서 새 비트 맵은 버퍼 끝에있는 특정 숫자 값을 선택하여 생성되거나 계수를 사용하여 버퍼 길이보다 높은 값이 다시 계산되도록합니다.

+0

도움을 많이 주셔서 감사합니다. 지금해야 할 작업입니다. 시간을 내 주셔서 다시 한 번 감사드립니다. –

0

그래서 다음과 같이하고 싶습니까? TargetFrame을)> (총 프레임/2)) // 그런 다음 이동 반전 을 (이 수도 - ((Math.abs (currentFrame이 경우

(테스트되지 않은 코드) 이동 방향을 결정합니다. 여기에 더 논리는 내가 내려다 보이는 해요,하지만

  • 시작 트위닝는 방향에 따라) 일반적인 생각이다.

0을 교차 할 경우 트위닝 체인을 갖는 것이 좋습니다. 먼저 현재 값을 0으로 설정하고 359를 대상 프레임으로 설정하는 것이 좋습니다.