0

ちょっと :SI`m はこれまでに 2 つのことを作成しようとしていますが、どちらも機能しません :(

1つ目は、船を上から左に配置する5つの船の列を作ることです.次に、それらを下に移動させるイベントを追加します. しかし、私が5つの新しい船の新しい列を作ろうとするたびに...彼らは前の列の最後の船の後に配置されます.1列目の船がステージを超えるのを待つことでそれを修正する方法を考えました.次に、ステージからそれらを削除し、アレイからスプライスしますが...産卵速度を上げると(ステージに5隻以上の船が2列ある場合)、機能しません。

そして、私が思う2番目のエラーは、その事実からだと思います....ステージ上に同時に2つの行があるということです。

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at MainClass/doShips()
at MainClass/everyFrame()

コードから正確に何を貼り付けるかわからないので、FLA.fail :D の MainClass のすべてをプッシュする必要がありましたが、きちんとやりました! 誰かが私を助けてくれたら、彼はコードを簡単に追跡するでしょう

そのため、4 MC の単純な FLA.fail であり、これらの 4 MC には、色が黄色の Bullet 船、色が緑色の Ship2 というコードがないため、ランダム化と、クラス タレットを持つプレーヤーを確認できます。

したがって、FLA の MainClass は次のとおりです。

package  {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;

public class MainClass extends MovieClip {

    protected var mouseSpeed:Number = 20;
    protected var _thePlayer:Turret = new Turret();
    protected var shipCount:Number;
    protected var shipCount2:Number;
    protected var shipArray:Array = new Array();
    protected var counter:int = 0;

    //variables for bullets
    private var shootCooldown:Number = 0; //speed of the fire 
    private var firing:Boolean = false;//bullets triger
    private var numToShoot:int = 1; //bullets
    const MAX_COOLDOWN = 10; //bullets timer
    protected var _bulletsArray:Array = new Array();


    public function MainClass() {
        _thePlayer.x = stage.stageWidth/2
        _thePlayer.y = stage.stageHeight - _thePlayer.height/2
        addChild(_thePlayer)
        addEventListener(Event.ENTER_FRAME, everyFrame)
        stage.addEventListener(MouseEvent.MOUSE_DOWN, startFire);
        stage.addEventListener(MouseEvent.MOUSE_UP, stopFire);
    }
    private function startFire(ev:MouseEvent) {
        firing = true;
    }
    private function stopFire(ev:MouseEvent) {
        firing = false;
    }

    //every frame do this
    protected function everyFrame(ev:Event):void{
        //Moving The Turret
        moveTheTurret();
        //increase the counter every frame
        counter++;
        if(counter % 70 == 0){
            //position the ships on the stage
            positionShips();
        }
        //handle the ships when they are added on the stage
        doShips();
        //when to fire
        updateFire();
        //handle the bullets
        doBullets();
    }

    //Moving The Turret
    protected function moveTheTurret() {
        if (mouseX > _thePlayer.x +15) {
            _thePlayer.x +=  mouseSpeed;
        } else if (mouseX < _thePlayer.x - 15) {
            _thePlayer.x -=  mouseSpeed;
        } else {
            _thePlayer.x = mouseX;
        }
    }


    //createShips and position them
    protected function positionShips() {
        shipCount = 3;
        shipCount2 = 2;
        var gap = 10;
        for (var i:int = 0; i < shipCount; i++) {
            var s = new Ship();
            shipArray.push(s);
        }
        for (var j:int = 0; j < shipCount2; j++) {
            s = new Ship2();
            shipArray.push(s);
        }
        var array:Array=new Array();
        while (shipArray.length>0) {
            var index:uint = Math.floor(Math.random() * shipArray.length);
            array.push(shipArray[index]);
            shipArray.splice(index,1);
        }
        shipArray = array;
        //shipsArray has been randomized
        for (var k:int = shipArray.length - 1; k >= 0; k--) {
            addChild(shipArray[k]);
            shipArray[k].x = shipArray[k].width/2 + (shipArray[k].width * k) + (gap*k);
        }
    }


    //move the ships
    protected function doShips() {
        for (var i:int = shipArray.length - 1; i >= 0; i--) {
            shipArray[i].y +=3 //make the Ships fall down

            for (var bcount= _bulletsArray.length-1; bcount >= 0; bcount--) {
                //if the bullet is touching the ship
                if (shipArray[i].hitTestObject(_bulletsArray[bcount])) {
                    //if we get here it means there`s is a collision
                    removeChild(_bulletsArray[bcount]);
                    _bulletsArray.splice(bcount,1);
                    removeChild(shipArray[i]);
                    _bulletsArray.splice(i,1);
                }
            }
            //if it gets over 380 remove from stage and splice from the array
            if(shipArray[i].y  > 380){ // stage.stageHeight)
                removeChild(shipArray[i]);
                shipArray.splice(i,1);
            }
        }
    }


    //when to fire
    public function updateFire() {
        //if we are currently holding the mouse down
        if(firing == true){
            fire();
        }
        //reduce the cooldown by 1 every frame
        shootCooldown--;
    }


    //Shoot bullets
    private function fire() {
        if (shootCooldown <= 0) {
            //reset the cooldown 
            shootCooldown = MAX_COOLDOWN
            for (var i=0; i<numToShoot; i++){
                //spown a bullet
                var b = new Bullet();
                //set the rotation of the bullet
                b.rotation = -90
                b.x = _thePlayer.x;
                b.y = _thePlayer.y;
                //add the bullet to the list/Array of _bulletsArray
                _bulletsArray.push(b);
                //add the bullet to the perent object;
                addChild(b);
            }
        }
    }


    //handling the bullets
    protected function doBullets(){
        //make a for loop to iterate all  the _bulletsArray on the screen
        for (var bcount:int = _bulletsArray.length-1; bcount>=0; bcount--) {
            //make the bullets move Up
            _bulletsArray[bcount].y -=20;
            //if the bullet is beyond the screen remove from the stage and the Array
            if(_bulletsArray[bcount].y < 0){
                removeChild(_bulletsArray[bcount])
                _bulletsArray.splice(bcount,1);
            }
        }
    }

}   

}

2つの問題のどちらも修正する方法がわかりません。助けていただければ幸いです!!!

前もって感謝します。

4

0 に答える 0