我想在完成動畫時刪除並重新添加/「重新啓動」Main類。我所有的動畫都發生在Main中,並被添加到Main中的顯示樹中。 Program.as通過添加/刪除Main來處理所有這些。我如何在Main.as中運行finishNow()
函數?它一切正常,除了引發錯誤program.finishNow();
:
TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法。
如何重新啓動AS類動畫
的FLA文件:
掛Program.as。
的Program.as文件:
package {
import flash.display.MovieClip;
public class Program extends MovieClip {
public function Program() {
startNow();
}
function startNow() {
var run:Main = new Main(this);
addChild(run);
}
function finishNow() {
removeChild(run);
var run:Main = new Main(this);
addChild(run);
}
}
}
的Main.as文件:
package {
import flash.display.Sprite;
public class Main extends Sprite
{
var stageHolder:Object;
public var program:Program;
public function Main(stageHolderTemp) {
stageHolder = stageHolderTemp;
trace(stageHolder);
someFunctionsThatDrawGraphics();
}
function callFinishFunction():void {
// how to call finishNow() function from Program.as file here?
program.finishNow();
}
}
}
即使它是全球性的(我複製並粘貼了你的代碼),它仍然顯示出同樣的錯誤? – ArrayOutOfBounds 2013-03-12 16:16:13
@ArrayOutOfBounds,Vesper的答案正在糾正至少一個問題。在原始代碼中,'finishNow()'方法中的'run'變量應該爲空。該方法如此之短,很難看出爲什麼「空對象引用」錯誤仍然會發生,但對於該方法的其他兩行沒有意義:)我建議您安裝調試Flash Player,錯誤消息會爲您提供問題發生位置的行/幀編號,然後您可以確切確認問題所在。 – 2013-03-12 16:31:26
@ArrayOutOfBounds哦,我認爲Vesper和我可能誤解了你對錯誤發生地點的評論。就像我說的,他指出了另一個問題。但是在它到達那裏之前,這個錯誤會在'Main.as'裏面的'callFinishFunction()'方法中拋出。那裏也出現了同樣的問題。 'Main.as'有一個'program'變量,但它永遠不會被設置並且爲空。程序變量和'stageHolder'變量是多餘的。爲了修復,保留Vesper的修復,然後刪除'stageHolder'並在'Main.as'的構造函數中執行'program = stageHolderTemp'。 – 2013-03-12 16:37:41