1
무대 위에 병 이미지가 있습니다. 사용자가 병을 클릭하여 드래그 할 수 있도록하고 싶습니다. 병을 끌기 때문에 병이 흔들 리길 바라며, 병이 앞뒤로 당겨지는 것처럼 기울입니다. 나는 이것을 봤고 아무것도 발견하지 못했습니다. 코드를 통해이 효과를 얻으려면 어떻게해야합니까?AS3에서 스윙/틸트 효과가있는 떨리는 물체
드래그하는 동안 시작점과 끝점을 추적하고 속도와 방향을 대략적으로 파악하기 위해 이동 한 거리를 계산 한 다음 Tween 클래스를 사용하여 120도 범위 내에서 병을 회전합니다 그런 다음 다시 0으로 바운스합니다. 그것은 가까이 있지만 내가 원하는대로 보이는 유체로 꽤 아니에요. 나는 일종의 사용자 정의 easing 함수가 필요하지만 나는이 유형의 수학으로는 좋지 않다고 느낍니다.
function distanceTimerBeat(e:TimerEvent):void
{//speed detection beat timer
distCounter++;
if(!distSwitch)
{
startX = product.x;
startY = product.y;
distSwitch = true;
}
else
{
endX = product.x;
endY = product.y;
distSwitch = false;
var newDistance = calculateDistance();
setRotation();
//trace('>> ('+distCounter+') distance travelled = '+newDistance);
//produceNewFirework()
}
}
function calculateDistance():Number
{//returns distance travelled over beat timer intervals
var rawDistance = ((startX - endX) * (startX - endX)) + ((startY - endY) * (startY - endY));
var distance = Math.sqrt(rawDistance);
var xDistance = startX - endX;
if(xDistance < 0)
{
speedDirection = 'right';
directionModifier = -1;
}
else if(xDistance > 0)
{
speedDirection = 'left';
directionModifier = 1;
}
//trace('>> going '+speedDirection+' at '+xDistance);
return distance;
}
function setRotation():void
{ //once start & end values are detected, check speed and set the rotation.
var curSpeed = calculateDistance();
if(curSpeed > 4)
{
tweenLock = false;
var speedPercent = curSpeed/maxSpeed * 100;
var rotationDegree = (speedPercent*120)/300;
var newRotation = directionModifier*rotationDegree;
var reversePercent = 100 - speedPercent;
var tweenSpeedModifier = (speedPercent/100);
//trace(tweenSpeedModifier*1);
//if(!tweenLock)
//rotationTween = null;
if(rotationTween) rotationTween.stop();
rotationTween = new Tween(product, "rotation", Strong.easeInOut, product.rotation, newRotation, 0.25, true);
//rotationTween.resume();
rotationTween.addEventListener(TweenEvent.MOTION_FINISH, resetProductTween);
//trace('speed percet = '+speedPercent);
}
else
{
//tweenLock = true;
}
}
function resetProductTween(e:TweenEvent)
{//after the product rotates, snap it back to it's original position.
tweenLock = false;
if(!tweenLock)
{
rotationTween = new Tween(product, "rotation", Strong.easeOut, product.rotation, 0, 0.75, true);
rotationTween.addEventListener(TweenEvent.MOTION_FINISH, tweenUnlock);
}
}