Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何设置弹性跟随鼠标对象的持续时间?_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 如何设置弹性跟随鼠标对象的持续时间?

Actionscript 3 如何设置弹性跟随鼠标对象的持续时间?,actionscript-3,flash,Actionscript 3,Flash,我在试着做一个有弹性的跟随鼠标。一切正常。但唯一的问题是:我不想让它长时间反弹。我想将持续时间设置为仅反弹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 e

我在试着做一个有弹性的跟随鼠标。一切正常。但唯一的问题是:我不想让它长时间反弹。我想将持续时间设置为仅反弹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;

}

这应该是一个调整你的价值观的问题。我建议将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;
}
请注意,我为两个剪辑设置了不同的“弹性”(k)和“缓和”(ease)值,因此它们的行为略有不同。正如我在前面提到的,使用这些值将获得您想要的效果


顺便说一句,向DynamicMovieClip类动态添加变量并不是最佳实践。您应该为Sprite创建子类,并在其中添加ease/elastic变量和更新方法。

您好,谢谢您的回答。我已经把它测试得差不多好了。但是看看www.kazsh.com,我真的不知道他是如何减少两个括号的反弹的!我有另一个对象跟随第一个对象。而且效果很好。就是找不到这样平滑反弹的方法!你可以看到,反弹只是在开始时的高点,之后它会非常平稳地停止。这是对你的脚本的最后测试。www.topzpix.com/test2.html我在上面调整了许多差异值。这剧本真不错。你的方法很聪明。但正如你所看到的(与kazsh.com相比),如果你快速移动鼠标并在那里用不同的移动方式进行测试。他有一个非常流畅的括号,可以互相跟随。我不知道怎样才能做到这一点。但我想我们快到了