0

次のように 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);

同じエラーが発生します。

4

1 に答える 1