AS2: не выполнять развертывание до завершения движения - PullRequest
0 голосов
/ 20 июня 2011

У меня есть mc с несколькими подростками, но если вы раскатываетесь до того, как они это сделают, они ломаются.Я не хочу отключать кнопку, когда работают подростки, потому что, если вы запускаете их, вы вводите пользователя в заблуждение, потому что ничего не происходит, и вы застреваете в этом кадре.во время анимации (или после), но не бегать, пока анимация не закончится.Однако я не могу получить доступ к окончанию движения анимации в функции ролловера из функции развертывания.

Любые идеи?

Если это поможет, вот мой ролловер:

    buttons[i].onRollOver = function() {
    var oppX:Number = Stage.width-this._x;
    var oppY:Number = Stage.height-this._y;
    if (oppX-209.8<=20) {
        var difference:Number = Math.abs(20-(oppX-209.8));
        oppX += difference;
    } else if (oppX+209.8>=780) {
        var difference:Number = Math.abs(780-(oppX+209.8));
        oppX -= difference;
    }
    if (oppY-172.1<=20) {
        var difference:Number = Math.abs(20-(oppY-172.1));
        oppY += difference;
    } else if (oppY+172.1>=580) {
        var difference:Number = Math.abs(580-(oppY+172.1));
        oppY -= difference;
    }
    var TweenX:Tween = new Tween(circle, "_x", mx.transitions.easing.Strong.easeOut, circle._x, oppX, 1, true);
    var TweenY:Tween = new Tween(circle, "_y", mx.transitions.easing.Strong.easeOut, circle._y, oppY, 1, true);
    circle.gotoAndPlay("out");
    myColor = new Color(this);
    myColor.setTint(153,255,0,30);
    for (MovieClip in buttons) {
        delete buttons[MovieClip].onEnterFrame;
        if (buttons[MovieClip] != this) {
            buttons[MovieClip].enabled = false;
            myColor = new Color(buttons[MovieClip]);
            myColor.setTint(255,255,255,80);
            myColor = new Color(buttons[MovieClip]._line);
            myColor.setTint(255,255,255,80);
        }
    }

};

и мой свиток:

    buttons[i].onRollOut = function() {
    this.onMotionComplete = function() {

    var TweenX:Tween = new Tween(circle, "_x", mx.transitions.easing.Strong.easeOut, circle._x, 400, 0.5, true);
    var TweenY:Tween = new Tween(circle, "_y", mx.transitions.easing.Strong.easeOut, circle._y, 300, 0.5, true);
    TweenY.onMotionFinished = function() {
        for (MovieClip in buttons) {
            buttons[MovieClip].enabled = true;
        }
    };
    this._parent.circle.gotoAndPlay("in");
    for (MovieClip in buttons) {
        buttons[MovieClip].onEnterFrame = function() {
            moveButtons(this);
            controlButtons(this);
        };
        myColor = new Color(buttons[MovieClip]);
        myColor.setTint(255,255,255,0);
    }

};

1 Ответ

0 голосов
/ 20 июня 2011

Понял, что это не твин, вызвавший большинство проблем, что это был gotoandplay, потому что у меня была моя остановка ();вызывает тот же кадр, что и маркеры в этом мувиклипе, что приводит к их зависанию.

Были некоторые проблемы с анимацией движения (свиток отскочил назад на позицию при опрокидывании, если его анимация называлась серединой анимации), но я решилпоместите анимацию в массив, сделав ее доступной глобально, и очистите массив по окончании движения, а затем в проверке развертывания посмотрите, содержит ли массив что-нибудь, и если да, то сначала убейте старых анимаций.

Конечный продукт:

    buttons[i].onRollOver = function() {
    circle.active = this;
    var oppX:Number = Stage.width-this._x;
    var oppY:Number = Stage.height-this._y;
    if (oppX-209.8<=20) {
        var difference:Number = Math.abs(20-(oppX-209.8));
        oppX += difference;
    } else if (oppX+209.8>=780) {
        var difference:Number = Math.abs(780-(oppX+209.8));
        oppX -= difference;
    }
    if (oppY-172.1<=20) {
        var difference:Number = Math.abs(20-(oppY-172.1));
        oppY += difference;
    } else if (oppY+172.1>=580) {
        var difference:Number = Math.abs(580-(oppY+172.1));
        oppY -= difference;
    }
    var TweenX:Tween = new Tween(circle, "_x", mx.transitions.easing.Strong.easeOut, circle._x, oppX, 1, true);
    var TweenY:Tween = new Tween(circle, "_y", mx.transitions.easing.Strong.easeOut, circle._y, oppY, 1, true);
    TweenY.onMotionFinished = function () {
        tweens.length = 0;
    }
    tweens.push(TweenX,TweenY);
    circle.gotoAndPlay("out");
    myColor = new Color(this);
    myColor.setTint(153,255,0,30);
    for (MovieClip in buttons) {
        delete buttons[MovieClip].onEnterFrame;
        if (buttons[MovieClip] != this) {
            buttons[MovieClip].enabled = false;
            myColor = new Color(buttons[MovieClip]);
            myColor.setTint(255,255,255,80);
            myColor = new Color(buttons[MovieClip]._line);
            myColor.setTint(255,255,255,80);
        }
    }
};
buttons[i].onRollOut = function() {
    if (tweens.length != 0) {
        tweens[0].stop();
        tweens[1].stop();
        delete tweens[0];
        delete tweens[1];
        tweens.length = 0;
    }
    circle.gotoAndPlay("in");
    var TweenX:Tween = new Tween(circle, "_x", mx.transitions.easing.Strong.easeOut, circle._x, 400, 0.5, true);
    var TweenY:Tween = new Tween(circle, "_y", mx.transitions.easing.Strong.easeOut, circle._y, 300, 0.5, true);
    TweenY.onMotionFinished = function() {
        circle._x = 400;
        circle._y = 300;
        for (MovieClip in buttons) {
            buttons[MovieClip].enabled = true;
        }
    };
    for (MovieClip in buttons) {
        buttons[MovieClip].onEnterFrame = function() {
            moveButtons(this);
            controlButtons(this);
        };
        myColor = new Color(buttons[MovieClip]);
        myColor.setTint(255,255,255,0);
    }
};
...