我在這個問題上花了14個小時。這是一個基本的碰撞檢查器,可以在發生碰撞時設置MovieClip動畫播放。該剪輯是如何停止在Flash CS6 AS3中播放動畫片段(使用Box2D)
currentBallObject.clip。
它的工作原理。剪輯播放。但它一遍又一遍地重複着。
private function checkCollisions():void
{
var i = balls.length;
while (i--)
{
var currentBallObject = balls[i];
if (currentBallObject.contact)
{
//condition hits ground
if (currentBallObject.ground)
{
currentBallObject.body.SetPosition(new b2Vec2(currentBallObject.startX/PIXELS_TO_METRE, currentBallObject.startY/PIXELS_TO_METRE));
currentBallObject.body.SetLinearVelocity(new b2Vec2(0, 0));
currentBallObject.body.SetAngularVelocity(0);
//currentBallObject.texture.pop();
}
else // it hit player
{
// assign clip texture to current position
currentBallObject.clip.x = currentBallObject.body.GetPosition().x * PIXELS_TO_METRE;
currentBallObject.clip.y = currentBallObject.body.GetPosition().y * PIXELS_TO_METRE;
// whisk old object away
currentBallObject.body.SetPosition(new b2Vec2(currentBallObject.startX/PIXELS_TO_METRE, currentBallObject.startY/PIXELS_TO_METRE));
currentBallObject.body.SetLinearVelocity(new b2Vec2(0, 0));
currentBallObject.body.SetAngularVelocity(0);
currentBallObject.contact = false;
}
}
}
}
我加入這個代碼刪除影片剪輯或以某種方式擺脫它,它已經通過一次打後。 (42幀)。我也嘗試添加一個frameListener和至少一打其他建議。當我添加
stop()
動畫不能播放。它只是加載最後一幀。我現在的代碼是:
private function updateClips():void
{
var i = balls.length;
while (i--)
{
var currentBallObject = balls[i];
if(currentBallObject.clip)
{
var frame:int = currentBallObject.clip.currentFrame;
//trace(currentBallObject.clip.currentFrame);
if(frame == 42)
{
currentBallObject.clip._visible = false;
currentBallObject.clip.removeMovieClip();
currentBallObject.clip.enabled = -1;
}
}
}
}
我試着計算框架,把它一次性執行的功能,架出口聽衆,我的想法。我只是想讓一個MovieClip運行一次。我也嘗試在時間軸上放置stop(),然後動畫不播放。它只是加載最後一幀。
現在碰撞工作,但動畫永遠留在屏幕上,永遠循環。
編輯:我得到了帕特里克的代碼運行沒有錯誤。
我添加事件偵聽器與其他這樣的:
_input = new Input(stage);
...
addEventListener(Event.ENTER_FRAME, oEF);
addEventListener(Event.ENTER_FRAME, update);
time_count.addEventListener(TimerEvent.TIMER, on_time);
time_count.start();
}
然後創建了一個功能:
private function oEF(e:Event):void{
var i = balls.length;
while (i--)
{
var currentBallObject = balls[i];
if (currentBallObject.clip.currentFrame >= currentBallObject.clip.totalFrames)
{
currentBallObject.clip.stop();
currentBallObject.clip.removeEventListener(Event.ENTER_FRAME, oEF);
if (currentBallObject.clip.parent) currentBallObject.clip.parent.removeChild(currentBallObject.clip);
}
}
}
但我仍然得到同樣的問題,因爲任何其他結果。 MovieClip在聯繫中消失而不會發生動畫。
通過調試我學到了更多。 currentFrame的值從1-40開始,然後在剩下的執行過程中保持在40。 因此,MovieClip始終位於每個對象的最後一幀。
謝謝。但我得到這些錯誤。 未定義的方法addEventListener通過ref。靜態類型的類。 訪問未定義的屬性oEF。 正在使用像「lightball.addEventListener(Event.ENTER_FRAME,oEF」 輕球是庫中的剪輯名稱,我不明白如何讓我的剪輯成爲'這個'。 – 2015-02-24 22:31:25