0

エラスティックフォローマウスを作ろうとしています。すべて正常に動作します。しかし、唯一の問題は、長時間バウンドさせたくないということです。1秒だけバウンドする時間を設定したい。これを行う方法 ?私が使用する As3 スクリプトは次のとおりです。

var distx_L     = 0;
var disty_L     = 0;
var momentumx_L = 0;
var momentumy_L = 0;
var easing_L = 5;


stage.addEventListener(Event.ENTER_FRAME,elastic_follow)
function elastic_follow(event:Event):void {


    distx_L = myball.x - mouseX;
    disty_L = myball.y - mouseY;
    momentumx_L -= distx_L / easing_L;  
    momentumy_L -= disty_L /easing_L; 

    // dampen the momentum a little (ELASTIC)
    momentumx_L*= 0.90;
    momentumy_L *= 0.90;


    myball.x += momentumx_L-15;
    myball.y += momentumy_L;

}
4

1 に答える 1

0

それはあなたの価値観を微調整することの問題です。簡単に微調整できるように、変数として 0.90 を抽出することをお勧めします。

var distx_L:Number     = 0;
var disty_L:Number     = 0;
var momentumx_L:Number = 0;
var momentumy_L:Number = 0;
var easing_L:Number = 1;
var ease:Number = 0.5;

stage.addEventListener(Event.ENTER_FRAME,elastic_follow)
function elastic_follow(event:Event):void {


    distx_L = myball.x - mouseX;
    disty_L = myball.y - mouseY;
    momentumx_L -= distx_L / easing_L;  
    momentumy_L -= disty_L /easing_L; 

    // dampen the momentum a little (ELASTIC)
    momentumx_L*= ease;
    momentumy_L *= ease;


    myball.x += momentumx_L;
    myball.y += momentumy_L;

}

この種の動作を複数のクリップで使用する場合は、クリップごとに弾力性と緩和の変数が必要になる場合があります。怠惰なアプローチは次のとおりです。

myball.mx = myball2.mx = 0;//mx for momentum on x axis
myball.my = myball2.my = 0;//my for momentum on x axis
myball.k = 4;//k for elasticity
myball.ease = .75;//ease for the final ease
myball2.k = 6;
myball2.ease = .8;

stage.addEventListener(Event.ENTER_FRAME,elastic_follow)
function elastic_follow(event:Event):void {
    elasticToPos(myball,mouseX-myball.width,mouseY);
    elasticToPos(myball2,mouseX+myball.width,mouseY);
    //elasticToPos(myball2,myball.x+myball.width*2,myball.y);//you can also play with this - have the second clip chase the first rather than the mouse
}

function elasticToPos(clip:MovieClip,targetX:Number,targetY:Number):void{
    var dx:Number = clip.x - targetX;
    var dy:Number = clip.y - targetY;
    clip.mx -= dx / clip.k;
    clip.my -= dy / clip.k;
    clip.mx *= clip.ease;
    clip.my *= clip.ease;
    clip.x += clip.mx;
    clip.y += clip.my;
}

2 つのクリップに異なる弾力性 (k) と容易さの値を設定したため、動作がわずかに異なることに注意してください。前に述べたように、これらの値を操作すると、目的の効果が得られます。

ちなみに、動的な MovieClip クラスにその場で変数を追加することは、ベスト プラクティスではありません。Sprite をサブクラス化し、ease/elasticity 変数と update メソッドを追加する必要があります。

于 2013-06-29T20:56:06.017 に答える