Actionscript 2: Твин работает очень медленно - PullRequest
0 голосов
/ 16 мая 2011

Я использую следующий код для анимации видеоклипа, когда _global.choiceMade равен 1 ...

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

onClipEvent (enterFrame) {
if (_global.choiceMade == 1) {
    var myTweenX:Tween = new Tween(this, "_x", mx.transitions.easing.Back.easeOut, this._x, -349, 0.5, True);
}
}

Содержится в каждом кадре основной временной шкалы. В первый раз он работает нормально, но в следующем кадре он работает невероятно медленно (занимает около 12 секунд, а не 0,5 и очень нестабилен), если я затем вернусь к первому кадру и запустлю его снова сейчас, на этот раз, он очень медленный. *

Я не могу понять, почему при этом мой процессор остается на уровне 6-15% во время работы, поэтому он не может быть слишком требовательным.

Обновлено, чтобы показать остаток моего кода:

На главной временной шкале есть кадр, каждый из которых содержит фрагмент ролика. На временной шкале каждого из этих видеороликов содержится:

//tint an object with a color just like Effect panel
//r, g, b between 0 and 255; amount between 0 and 100
Color.prototype.setTint = function(r, g, b, amount) {
var percent = 100-amount;
var trans = new Object();
trans.ra = trans.ga=trans.ba=percent;
var ratio = amount/100;
trans.rb = r*ratio;
trans.gb = g*ratio;
trans.bb = b*ratio;
this.setTransform(trans);
};//Robert Penner June 2001 - http://www.robertpenner.com
 MovieClip.prototype.scaleXY = function(to){
 this.onEnterFrame = function(){
 this._alpha = to-(to-this._alpha)/1.2;
 if(this._alpha > to-1 && this._alpha < to+1){
 this._alpha = to;
 delete this.onEnterFrame
 }
 }
 }
scoreUpdated = 0;
Answer = 1;
_global.choiceMade = 0;
Buttons = new Array(this.buttonHolder.True, this.buttonHolder.False);
Answers = new Array(this.Correct, this.Wrong);
for (i=0; i<Answers.length; i++) {
Answers[i]._alpha = 0;

}
for (b=0; b<Buttons.length; b++) {
Buttons[b].thisValue = b;

}

В этом мувиклипе есть две кнопки мувиклипа (True и False), содержащие этот код:

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("down");
    whichChoice = this;
    _global.choiceMade = 1;
    counter = 0;
};
if (_global.choiceMade == 1) {
    this.enabled = false;
this._parent.scoreNow = _global.score;
this._parent.scoreOutOf = (this._parent._parent._currentframe)- 1 + ( _global.choiceMade);
if (thisValue == this._parent._parent.Answer && whichChoice == this) {
    myColor = new Color(this);
    myColor.setTint(0,204,0,13);
    this._parent._parent.Answers[0]._alpha = 100;
    this._parent._parent.Answers[0].scaleXY(100);
    this.tick.swapDepths(1000);
    if (counter == 0) {
    _global.score++;
    counter++;
    }
} 
else if (thisValue == this._parent._parent.Answer) {
    myColor = new Color(this);
    myColor.setTint(0,204,0,13);
    this.tick.swapDepths(1000);
}
else if (whichChoice == this) {
    this._parent._parent.Answers[1]._alpha = 100;
    this._parent._parent.Answers[1].scaleXY(100);
    myColor = new Color(this);
    myColor.setTint(255,0,0,13);
    this.cross.swapDepths(1000);
}
else {
    myColor = new Color(this);
    myColor.setTint(255,0,0,13);
    myColor.setTint(255,0,0,13);
    this.cross.swapDepths(1000);
}
}
}

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

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Из того, что я вижу, пока у вас есть choiceMade == 1, вы создаете новый эффект! что не в порядке. потому что через 1 секунду при 15 кадрах в секунду у вас будет 15 бегущих подростков: (

попробуйте yo set choiceMade = 0 или что-то еще, чем 1

onClipEvent (enterFrame) 
{
    if (_global.choiceMade == 1) 
    {
        _global.choiceMade = -1;
        var myTweenX:Tween = new Tween(this, "_x", mx.transitions.easing.Back.easeOut, this._x, -349, 0.5, True);
    }
}
0 голосов
/ 16 мая 2011

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

onClipEvent (enterFrame) {
if (_global.choiceMade == 1) {
    var myTweenX:Tween = new Tween(this, "_x", mx.transitions.easing.Back.easeOut,      this._x, -349, 0.5, True);
_global.choiceMade = 0;
}
}
...