Actionscript 2: функция не запускается - PullRequest
0 голосов
/ 19 мая 2011

Я определяю функцию и пытаюсь запустить ее, но она не запустится, если я возьму код из функции, она работает нормально, и я не могу понять, почему, вот функция и вызов ...

function Boomclat() { 
        var TweenX:Tween = new Tween(this, "_x", mx.transitions.easing.Strong.easeOut, this._x, 16.9, 1, true);
        var TweenY:Tween = new Tween(this, "_y", mx.transitions.easing.Strong.easeOut, this._y, listY, 1, true);
        }
        Boomclat();

Вот весь мой код (на этом MC есть еще снаружи):

    onClipEvent (load) {
    import mx.transitions.Tween;
    import mx.transitions.easing.*;
    startX = this._x;
    startY = this._y;
    mn = 0;
}
onClipEvent (enterFrame) {
    this.onRollOver = function() {
        this.gotoAndStop("over");
    };
    this.onRollOut = function() {
        this.gotoAndStop("up");
    };
    this.onPress = function() {
        this.gotoAndStop("down");
    };
    this.onReleaseOutside = function() {
        this.gotoAndStop("up");
    };
    this.onRelease = function() {
        this.gotoAndStop("up");
        this.enabled = false;
        this.arrow.gotoAndStop("ordered");
        if (_global.hasAnswered != 1) {
            this.arrow.listNumber = this._parent.Order.length+1;
            listY = 35+(74.9*this._parent.Order.length);
            this._parent.Order.push(this);
            function Boomclat() { 
            var TweenX:Tween = new Tween(this, "_x", mx.transitions.easing.Strong.easeOut, this._x, 16.9, 1, true);
            var TweenY:Tween = new Tween(this, "_y", mx.transitions.easing.Strong.easeOut, this._y, listY, 1, true);
            };
            Boomclat();
            this._parent.buttonHolder.previousOrder.push(this);
        } else {
            for (i=0; i<this._parent.trueOrder.length; i++) {
                if (this == this._parent.trueOrder[i]) {
                    _global.previousButton.enabled = true;
                    _global.previousButton.gotoAndStop("up");
                    myColor = new Color(_global.previousButton);
                    myColor.setTint(255,255,255,0);
                    myColor = new Color(this);
                    myColor.setTint(113,205,0,23);
                    this.gotoAndStop("down");
                    var TweenX:Tween = new Tween(_global.lastText, "_x", mx.transitions.easing.Back.easeOut, 276.4, -210, 0.7, true);
                    _global.whichText = this._parent.textFile[i];
                    var TweenX:Tween = new Tween(_global.whichText, "_x", mx.transitions.easing.Back.easeOut, 760, 276.4, 0.7, true);
                    _global.lastText = whichText;
                    _global.previousButton = this;
                }
            }
        }
    };

}

Кто-нибудь может увидеть, что не так? Приветствия.

Ответы [ 3 ]

0 голосов
/ 20 мая 2011

Почему вы зацикливаете функцию Boomclat ()?Ясно, что эффект анимации не будет завершен и, вероятно, даже не будет запущен, прежде чем вы снова активируете анимацию, по сути, сбрасывая анимацию.[РЕДАКТИРОВАТЬ]Оппс, почему-то я думал, что вызов функции был внутри функции.

В любом случае, вы убедились, что переменные доступны внутри функции.

function Boomclat() { 
  trace( this._x )
  trace( this._y _ )
  trace( listY )
  var TweenX:Tween = new Tween(this, "_x", mx.transitions.easing.Strong.easeOut, this._x, 16.9, 1, true);
  var TweenY:Tween = new Tween(this, "_y", mx.transitions.easing.Strong.easeOut, this._y, listY, 1, true);
}
Boomclat();

[EDIT2]

//remove the  onClipEvent completely and you should be ok
    import mx.transitions.Tween;
    import mx.transitions.easing.*;

    startX = this._x;
    startY = this._y;
    this.onRollOver = function() {
        this.gotoAndStop("over");
    };
    this.onRollOut = function() {
        this.gotoAndStop("up");
    };
    this.onPress = function() {
        this.gotoAndStop("down");
    };
    this.onReleaseOutside = function() {
        this.gotoAndStop("up");
    };


// you might have to fix the references to this._parent to get it target what you want.
    this.onRelease = function() {
        this.gotoAndStop("up");
        this.enabled = false;
        this.arrow.gotoAndStop("ordered");
        if (_global.hasAnswered != 1) {
            this.arrow.listNumber = this._parent.Order.length+1;
            listY = 35+(74.9*this._parent.Order.length);
            this._parent.Order.push(this);
            orderTween();
            this._parent.buttonHolder.previousOrder.push(this);
        } else {
            for (i=0; i<this._parent.trueOrder.length; i++) {
                if (this == this._parent.trueOrder[i]) {
                    _global.previousButton.enabled = true;
                    _global.previousButton.gotoAndStop("up");
                    myColor = new Color(_global.previousButton);
                    myColor.setTint(255,255,255,0);
                    myColor = new Color(this);
                    myColor.setTint(113,205,0,23);
                    this.gotoAndStop("down");
                    var TweenX:Tween = new Tween(_global.lastText, "_x", mx.transitions.easing.Back.easeOut, 276.4, -210, 0.7, true);
                    _global.whichText = this._parent.textFile[i];
                    var TweenX:Tween = new Tween(_global.whichText, "_x", mx.transitions.easing.Back.easeOut, 760, 276.4, 0.7, true);
                    _global.lastText = whichText;
                    _global.previousButton = this;
                }
            }
        }
    };

// as you can see I put it last
    function orderTween() {
        var TweenX:Tween = new Tween(this, "_x", mx.transitions.easing.Strong.easeOut, this._x, 16.9, 1, true);
        var TweenY:Tween = new Tween(this, "_y", mx.transitions.easing.Strong.easeOut, this._y, listY, 1, true);
    }
0 голосов
/ 20 мая 2011

Как ни странно, если я определю функцию до того, как она сработает ... вот окончательный код:

onClipEvent (load) {
    import mx.transitions.Tween;
    import mx.transitions.easing.*;

    function orderTween() {
        var TweenX:Tween = new Tween(this, "_x", mx.transitions.easing.Strong.easeOut, this._x, 16.9, 1, true);
        var TweenY:Tween = new Tween(this, "_y", mx.transitions.easing.Strong.easeOut, this._y, listY, 1, true);
    }
    startX = this._x;
    startY = this._y;
    this.onRollOver = function() {
        this.gotoAndStop("over");
    };
    this.onRollOut = function() {
        this.gotoAndStop("up");
    };
    this.onPress = function() {
        this.gotoAndStop("down");
    };
    this.onReleaseOutside = function() {
        this.gotoAndStop("up");
    };
    this.onRelease = function() {
        this.gotoAndStop("up");
        this.enabled = false;
        this.arrow.gotoAndStop("ordered");
        if (_global.hasAnswered != 1) {
            this.arrow.listNumber = this._parent.Order.length+1;
            listY = 35+(74.9*this._parent.Order.length);
            this._parent.Order.push(this);
            orderTween();
            this._parent.buttonHolder.previousOrder.push(this);
        } else {
            for (i=0; i<this._parent.trueOrder.length; i++) {
                if (this == this._parent.trueOrder[i]) {
                    _global.previousButton.enabled = true;
                    _global.previousButton.gotoAndStop("up");
                    myColor = new Color(_global.previousButton);
                    myColor.setTint(255,255,255,0);
                    myColor = new Color(this);
                    myColor.setTint(113,205,0,23);
                    this.gotoAndStop("down");
                    var TweenX:Tween = new Tween(_global.lastText, "_x", mx.transitions.easing.Back.easeOut, 276.4, -210, 0.7, true);
                    _global.whichText = this._parent.textFile[i];
                    var TweenX:Tween = new Tween(_global.whichText, "_x", mx.transitions.easing.Back.easeOut, 760, 276.4, 0.7, true);
                    _global.lastText = whichText;
                    _global.previousButton = this;
                }
            }
        }
    };

}
0 голосов
/ 19 мая 2011

Одной из наиболее распространенных причин ошибок в AS2 являются проблемы с областью действия. Возможно, ключевое слово this не ссылается на объект, который вы предполагали в функции Boomclat. Вы можете добавить в функцию вызов трассировки trace(this), чтобы узнать, хотите ли вы анимировать объект или нет.

Редактировать : Теперь я вижу, что Boomclat определен внутри другой функции, обработчика onRelease. Я не уверен, что вы можете сделать это с таким точным синтаксисом. Если вам нужны вложенные функции, один из способов сделать это - сохранить ссылку на функцию в локальной переменной:

var boomclat:Function = function () { 
   var TweenX:Tween = new Tween(this, "_x", mx.transitions.easing.Strong.easeOut, this._x, 16.9, 1, true);
   var TweenY:Tween = new Tween(this, "_y", mx.transitions.easing.Strong.easeOut, this._y, listY, 1, true);
};
boomclat();

Или вы можете определить функцию в другом месте, вне обработчика onRelease, и вместо этого вызывать ее только из обработчика onRelease.

Но, учитывая код, который вы разместили, я бы сказал, что вы могли бы точно так же выполнить встроенный код, я не очень понимаю, зачем вам нужна эта функция.

...