2011-05-16 66 views
0

我使用以下代碼一次_global.choiceMade等於1至吐溫一個的movieclip ...的ActionScript 2:吐溫運行極其緩慢

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,並且非常不連貫),如果我現在返回到第一幀並且現在再次運行它,現在它非常慢。

我不知道爲什麼它這樣做,我的CPU在運行時保持在6-15%左右,所以它不能太苛刻。

更新,以顯示我的代碼休息:

主時間軸上有每個包含影片剪輯的幀。在每個這些的movieclip的的時間軸包含:

//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; 

} 

在此的movieclip有包含該碼兩個動畫片段按鈕(真和假):

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); 
} 
} 
} 

在頂部的腳本上的movieclip這些按鈕包含在名爲buttonHolder的buttonHolder中,它可以完成它所說的操作,並在選擇一個答案後,透過屏幕上的按鈕來顯示下一個按鈕。

回答

1

從我所看到的,只要你有choiceMade == 1你創建一個新的效果!這是不正確的。因爲在15個FPS 1秒,你將有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); 
    } 
} 
+0

這是它,非常感謝工作的魅力。所以,我愚蠢的。 – 2011-05-16 09:06:05

+0

高興它的工作原理...之類的東西這總是發生在我身上,與if(cond); :)相同) – 2011-05-16 09:14:27

0

沒有看到你的代碼的其餘部分很難看到究竟是什麼現在事情。但它看起來像你永遠不會改變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; 
} 
} 
+0

我告訴_global.choiceMade在每個動畫片段的時間軸上等於0,如果我在主時間軸的每個新幀上運行軌跡等於0,則直到我另外說明它爲止。 – 2011-05-16 08:52:06