ActionScript 3 を使用して、Adobe Flash CS4 で簡単なゲームを作成しています。最近、使用していたプレースホルダーを置き換えるために、非常に小さな新しいプリローダーを実装しました。しかし、これをやると、すべてが壊れたように見えました。
最初のフレームにはstop();
「アクション」のみがあり、次に独自のクラスファイルにあるプリローダーを設定する DocumentClass 外部クラスファイル (私のクラスはすべて外部です) があります。プリローダーが完了すると、DocumentClass に対してイベントが発生し、gotoAndStop(3);
. スライド 3 は、独自のクラス ファイルを含む、Mainというタイトルのムービー クリップです。
メインはたくさんのものをインポートしてから、ゲームのオープニング画面をロードします。この時点で、基本的にすべてが崩壊します。この開始画面 (クラス ファイルと MovieClip オブジェクトの両方を含む) にあるものを変更しようとすると、「TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません」という結果になります。このコードは、MovieClip がステージに登場する前に実行されているのではないかと考えたので、コードを追加して関数addEventListener( Event.ADDED_TO_STAGE, onAddtoStage );
に移動しました。onAddtoStage
実行中に null 以外の適切な値が返さtrace("this is the stage: "+stage);
れtrace("this is my parent: "+this.parent);
ますが、何も変更できません (たとえば、非表示に設定して非表示にしたい MovieClip オブジェクトを作成すると、invisibleBG.alpha = 0;
エラー #1009 が返されます)。
さらに、メインムービークリップがステージ上に表示されている間、オープニング画面のムービークリップは表示されません。どういうわけかメインオブジェクトの背後にあるかどうかはわかりませんが、ステージ上にまったくないように見えます。
以下に私のコードの一部があります。これで何が問題なのかがわからない場合は、さらに追加できます。私はこれについて本当に頭を悩ませてきました。もちろん、a が 2 つのフレームに引き伸ばされているために変更できないことを理解するのに 2 日かかったTextField
ので、非常に簡単な解決策があるかもしれません。よろしくお願いします。
初期ロードを処理するクラスのほとんどは次のとおりです。
public class DocumentClass extends MovieClip
{
public var loadingScreen:LoadingScreen;
public function DocumentClass()
{
loadingScreen = new LoadingScreen();
addChild( loadingScreen );
stage.stageFocusRect = false;
loadingScreen.addEventListener( Event.COMPLETE, onPreloaderComplete );
loadingScreen.setLoaderInfo( loaderInfo );
}
public function onPreloaderComplete( e:Event ):void
{
loadingScreen.removeEventListener( Event.COMPLETE, onPreloaderComplete );
removeChild( loadingScreen );
loadingScreen = null;
gotoAndStop( 3 );
}
}
Mainクラスの関連部分は次のとおりです。
public class Main extends MovieClip
{
public function Main()
{
showDesktop();
}
public function showDesktop():void
{
desktopScreen = new DesktopScreen();
addChild( desktopScreen );
stage.focus = desktopScreen;
}
}
そして、ゲームの開始画面であるDesktopScreenの関連部分:
public class DesktopScreen extends MovieClip
{
public function DesktopScreen()
{
addEventListener( Event.ADDED_TO_STAGE, onAddtoStage );
}
public function onAddtoStage( e:Event ):void
{
Mouse.show();
invisibleBG.alpha = 0;
fakeButton.stop();
time = new Time;
time.x = 504;
time.y = 3;
addChild( time );
}
}
TL;DRムービークリップをステージに追加していますがtrace
、ステージ上にあると関数を介して認識できますが、実際に必要な方法でムービークリップを表示したり、内容を変更したりすることはできません舞台に立つ。