-1

私は AS3 の初心者で、基本的なプレイヤー対 CPU ピンポン ゲームを作成しようとしています (チュートリアルを参考にして)。これがばかげている、または明白に聞こえる場合は、お詫び申し上げます。Ball、Player、および CPU のドキュメント クラスと個々のクラスがあります。私の問題は、CPU クラスがステージ上のムービー クリップ ボールの座標を使用して、AI を形成するために必要に応じてボールに対して移動できるようにする方法がわからないことです。私が参照しているチュートリアルには、ボール、プレーヤー、および cpu のすべてのコードがドキュメント クラスにのみ含まれていますが、それぞれのクラスのすべてのコードを記述しています。

チュートリアルのリンクhttp://as3gametuts.com/2011/03/19/pong-1/

私のバージョンのコード。現在、ボールは壁に跳ね返っていますが、HitTest は何にも適用されていません。プレーヤーのパドルは矢印キーで移動しています。警告やエラーは表示されていません。

主要

public class  Main extends MovieClip
{

    public function Main()
    {
        this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }

    private function onAddedToStage(e:Event):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

        trace("Initialized");
    }
}

ボール

    public class  Ball extends MovieClip
{
    public var ballSpeedX:int = 5;
    public var ballSpeedY:int = 6;


    public function Ball()
    {
        this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage)
    }

    public function onAddedToStage(e:Event):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage)

        this.x = stage.stageWidth / 2;
        this.y = stage.stageHeight / 2;

        this.addEventListener(Event.ENTER_FRAME, loop)
    }

    public function loop(e:Event):void 
    {

        this.y += ballSpeedY;
        this.x += ballSpeedX;

        if ((this.y <= 0 + this.height/2) || (this.y >= stage.stageHeight - this.height/2))
        {
            ballSpeedY *= -1;
        }
        else if ((this.x <= 0 + this.width/2) || (this.x >= stage.stageWidth - this.width/2))
        {
            ballSpeedX *= -1;
        }
    }
}

TheCpu

public class TheCpu extends MovieClip
{
    public var cpu:TheCpu;
    public var ball:Ball;
    private var vx:Number = 5;

    public function TheCpu()
    {
        this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }
    private function onAddedToStage(e:Event):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        this.x = 240;
        this.y = 10;

        this.addEventListener(Event.ENTER_FRAME, loop);
    }

    private function loop(e:Event):void 
    {
        /*if (this.x < ball.x - 10)
        {
            this.x += vx;
        } 
        else if (this.x > ball.x + 10)
        {
            this.x -= vx;
        }*/
    }
}

これをメインクラスに追加しました

    private function onAddedToStage(e:Event):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

        trace("It's Alive!");
        addBall();
        addCPU();
    }

    public function addBall():void 
    {
        var ball:MovieClip = stage.getChildByName("ball") as MovieClip
        stage.addChild(ball);

    }

    public function addCPU():void 
    {
        var cpu:MovieClip = stage.getChildByName("cpu") as MovieClip
        stage.addChild(cpu);
    }
}

しかし、今では TypeError: Error #2007: Parameter child must be non-null というエラーが発生しています。flash.display::DisplayObjectContainer/addChild() で flash.display::Stage/addChild() で src::Main/addBall() で src::Main/onAddedToStage() で

そして、私が使用する場合

    var ball:Ball = new Ball();
    var cpu:TheCpu = new TheCpu();

TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。src::TheCpu() で src::Main/addCPU() で src::Main/onAddedToStage() で

私は今、本当にばかだと思います。

4

2 に答える 2