我最近碰到類似的東西;在某種程度上,也許以下幫助:
- gotoAndStop(幀)將立即在框架
- 執行該動作可以執行多個gotoAndStop一個ENTER_FRAME事件(或任何其他事件)中調用。
作爲測試,我在Flash Pro CS5.5中創建了一個新的AS3.0項目。我創建了一個新的MovieClip並將時間線擴展到了23幀。
在第一幀添加以下代碼:
import flash.events.Event;
// do something every frame
this.addEventListener(Event.ENTER_FRAME, handleEnterFrame);
// let event handler change the playHead
this.stop();
// advance playhead 2 frames every frame
function handleEnterFrame(anEvent: Event): void
{
trace('* ENTER_FRAME');
this.gotoNextFrame();
this.gotoNextFrame();
}
// advance to next frame, show playheads position
function gotoNextFrame(): void
{
// at last frame?
if (this.currentFrame < this.totalFrames)
{
// no, advance to next frame
var before: int = this.currentFrame;
this.gotoAndStop(this.currentFrame + 1);
trace('before: ' + before + ', current: ' + this.currentFrame);
}
else
{
// last frame, stop updating the playhead
this.removeEventListener(Event.ENTER_FRAME, handleEnterFrame);
}
}
在框架5我創建了一個關鍵幀和添加的代碼:
this.gotoAndPlay(10);
在框架14我創建了一個關鍵幀和添加的代碼:
this.gotoAndPlay(16);
運行後我得到了以下跟蹤輸出:
* ENTER_FRAME
before: 1, current: 2
before: 2, current: 3
* ENTER_FRAME
before: 3, current: 4
before: 4, current: 10
* ENTER_FRAME
before: 11, current: 12
before: 12, current: 13
* ENTER_FRAME
before: 13, current: 16
before: 16, current: 17
* ENTER_FRAME
before: 17, current: 18
before: 18, current: 19
* ENTER_FRAME
before: 19, current: 20
before: 20, current: 21
* ENTER_FRAME
before: 21, current: 22
before: 22, current: 23
* ENTER_FRAME
我不知道如何高效或耗時上述雖然。我只能用一個MovieClip來使用它(在開發的後期階段,如果主角也可以運行,它會很方便,但是沒有運行動畫的預算;該角色包含時間軸中的腳步生成腳本以便正確定時)。
在你的情況下,你可以檢查自上一次ENTER_FRAME以來經過了多少時間,然後提前正確的幀數。
您可以創建MovieClip的子類並將其用作基類(快速執行此操作,選擇需要此庫的所有影片剪輯,右鍵單擊,屬性,調整基類)。對於已經鏈接到動作腳本的那些動畫片段,.as文件可以通過從新的MovieClip類擴展來更新。
「我的遊戲在屏幕上有600多個複雜的影片剪輯,只有100個附加到可以直接控制它的as3類。」您的問題是,一旦將對象添加到舞臺上,您就無法找到對象的引用,或者gotoAndStop()會破壞藝術家放置的時間線代碼?如果您需要跳過x個幀並保持時間軸代碼的完整性(您沒有測試過這個atm,但是對工作流程不夠了解,您可能會檢查是否已經過了太多時間,並且可能會檢查gotoAndPlay(currentframe + x)肯定地說一種或另一種) –