次のように Main. という名前の 1 つのドキュメントに変数を作成したとします。
var backgroundLayer:Sprite = new Sprite;
var gameLayer:Sprite = new Sprite;
var interfaceLayer:Sprite = new Sprite;
別の .as ファイルでこれらにアクセスするにはどうすればよいですか? ゲーム内のオブジェクトをレイヤーに並べ替えようとしていますが、エラーが発生します。たとえば、次の内容を含む EnemyShip.as ファイルがあります。
function enterFrame(e:Event)
{
this.x -= speed;
if(this.x < -100)
{
removeEventListener("enterFrame", enterFrame);
stage.removeChild(this);
}
}
function kill()
{
var explosion = new Explosion();
stage.addChild(explosion);
explosion.x = this.x;
explosion.y = this.y;
removeEventListener("enterFrame", enterFrame);
stage.removeChild(this);
Main.updateScore(1);
shot.play();
}
問題は、変更しようとしstage.addChild(explosion)
てgameLayer.addChild(explosion)
いたが、access of undefined property gameLayer
エラーが発生したことです。
私が見逃している明らかな何かがあるかもしれませんので、私に知らせてください。new Sprite
またはnew Movieclip
;を使用する必要があるかどうかもよくわかりません。私のゲームの大部分はムービー クリップとボタンで構成されているので、おそらくこれを変更する必要がありますか?
ありがとう。
編集:次のことを行って、コディアックの2番目のソリューションを試しました(関連部分):
EnemyShip.as:
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.ui.Mouse;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.text.TextFormat;
import flash.text.TextField;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.system.LoaderContext;
import flash.display.Sprite;
import flash.net.Socket;
public class EnemyShip extends MovieClip
{
public static var gameLayer:Sprite;
var speed:Number;
var shot = new ShotSound();
public function EnemyShip()
{
this.x = 800;
this.y = Math.random() * 275 + 75;
speed = Math.random()*5 + 9;
addEventListener("enterFrame", enterFrame);
addEventListener(MouseEvent.MOUSE_DOWN, mouseShoot);
}
Main.as:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.ui.Mouse;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.text.TextFormat;
import flash.text.TextField;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.system.LoaderContext;
import flash.display.Sprite;
import flash.net.Socket;
public class Main extends MovieClip {
EnemyShip.gameLayer = gameLayer;
var interfaceLayer:Sprite = new Sprite;
var menuLayer:Sprite = new Sprite;
var endGameLayer:Sprite = new Sprite;
1120: Access of undefined property gameLayer
次のような行で、次のEnemyShip.gameLayer = gameLayer;
ようなことをしようとすると、エラーが発生します。
crosshair = new crosshair_mc();
gameLayer.addChild(crosshair);
同じエラーが発生します。