#actionscript #actionscript-2 #tween
#actionscript #actionscript-2 #анимация
Вопрос:
Я использую следующий код для анимации клипа, когда _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 amp;amp; 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;
}
В этом видеоролике есть две кнопки movieclip (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 amp;amp; 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, который выполняет то, что он говорит, и настраивает кнопки по экрану, чтобы открыть кнопку next после выбора ответа.
Ответ №1:
Насколько я вижу, пока у вас есть choiceMade == 1, вы создаете новый эффект! что не нормально. потому что через 1 секунду при 15 кадрах в секунду у вас будет запущено 15 твинов: (
попробуйте установить 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);
}
}
Комментарии:
1. вот и все, большое спасибо, теперь все работает. Так глупо с моей стороны.
2. рад, что это работает … подобные вещи всегда случаются и со мной. то же самое, что и с if (cond); :))
Ответ №2:
Не видя остальной части вашего кода, трудно понять, что именно происходит. Но, похоже, вы никогда не меняете 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;
}
}
Комментарии:
1. Я сообщаю _global.choiceMade, что значение _global.choiceMade равно 0 на временной шкале каждого видеоролика, если я выполняю трассировку, оно равно 0 на каждом новом кадре основной временной шкалы, пока я не скажу иначе.