1

前もって感謝します...

ゲーム内で敵にダメージ レベルを設定するロジックに少し疑問があります。以下は私の敵のクラスです

package scripts.enemy
{
    import flash.display.MovieClip;
    import flash.events.*;
    import flash.display.Stage;

    public class Enemy1 extends MovieClip
    {
        private var BG:MovieClip;
        private var speed:Number = 0.5;
        private var ease:Number = .005;
        private var rad:Number = 57.2957795;

        public function Enemy1(BG:MovieClip) : void
        {
            var RandomX:Array = new Array(-150,-200,-250,-300,-350,-400,-450,-500,-550,150,200,250,300,350,400,450,500,550);
            var RandomY:Array = new Array(-150,-200,-250,-300,-350,-400,150,200,250,300,350,400);
            var r:int = (Math.random() * 18);
            var s:int = (Math.random() * 12);

            x = RandomX[r];
            y = RandomY[s];

            this.BG = BG;

            addEventListener(Event.ENTER_FRAME, moveEnemy); //false, 0, true);.
        }
        private function moveEnemy(e:Event):void
        {
            var dx:Number = x - 10;
            var dy:Number = y - 10;

            this.x -= dx * ease;
            this.y -= dy * ease;

            this.rotation = (Math.atan2(dy,dx) * rad) + 180;

        }

    }

}

そして、メインクラスから問題を引き起こすコードの一部を次に示します

// ......... Function for Checking the Collision between Bullet And Enemy...........
        private function checkCollision(mc:MovieClip):Boolean
        {
            var test:Point = mc.localToGlobal( new Point());
            for (var i = 0; i < enemies1.length; i++)
            {
                tempEnemy1 = enemies1[i];
                if (kill == true)
                {
                    if (tempEnemy1.hitTestPoint(test.x,test.y,true))
                    {
                        enemies1.splice(i, 1);
                        bg_mc.removeChild(tempEnemy1);
                        createDead(Dead1,deadArray1,tempEnemy1.x,tempEnemy1.y,tempEnemy1.rotation);
                        Score +=  10;
                        Scr_txt.text = String(Score);
                        bugsKill +=  1;
                        kill = false;
                        return true;
                    }
                }
            }
            if (Level >= 2)
            {
                for (var j = 0; j < enemies2.length; j++)
                {
                    tempEnemy2 = enemies2[j];
                    if (kill == true)
                    {
                        if (tempEnemy2.hitTestPoint(test.x,test.y,true))
                        {
                            bug2HitCount -= 1;
                            if (bug2HitCount == 0)
                            {
                                enemies2.splice(j, 1);
                                bg_mc.removeChild(tempEnemy2);
                                createDead(Dead2,deadArray2,tempEnemy2.x,tempEnemy2.y,tempEnemy2.rotation);
                                Score +=  20;
                                Scr_txt.text = String(Score);
                                bugsKill +=  1;
                                kill = false;
                                //bug2HitCount = bug2HitRate;
                                return true;
                            }
                            kill = false;
                            return true;
                        }

                    }
                }
            }

            return false;
        }

        private function removeElement(removeList:Array):void
        {
            for (var i = 0; i < removeList.length; i++)
            {
                bg_mc.removeChild(removeList[i]);
            }
        }
        //...........Function Checking the Collission Between Bunker And Enemy..............
        private function collideEnemy(deadArray:Array,enemyArray:Array,rate:Number):void
        {
            var enemy:MovieClip;
            for (var i = 0; i < enemyArray.length; i++)
            {
                enemy = enemyArray[i];
                if (enemy.hitTestObject(bunker_mc))
                {
                    life_mc.scaleX -=  rate;
                    if (life_mc.scaleX <= 0.05)
                    {
                        stage.removeEventListener(Event.ENTER_FRAME,updateCollission);
                        Timer1.stop();
                        Mouse.show();
                        stage.removeEventListener(MouseEvent.MOUSE_UP,mouseUpFun);
                        stage.removeEventListener(Event.ENTER_FRAME,updateStage);
                        stage.removeEventListener(MouseEvent.MOUSE_DOWN,mouseDownFun);
                        (player.parent).removeChild(player);
                        (bunker_mc.parent).removeChild(bunker_mc);
                        (life_mc.parent).removeChild(life_mc);
                        (sniper_mc.parent).removeChild(sniper_mc);
                        removeElement(bullets);
                        EndFun();
                        gunFire = false;
                        gotoAndStop("end");
                        Level = 1;
                    }
                }
            }
        }
        //...........function of Timer Complete Event.....................
        private function TimerEnd(e:TimerEvent):void
        {
            EndBug();
            gotoAndStop("end");
        }
        //...........function of Timer Complete Event.....................
        private function EndBug():void
        {
            HelpTimer = new Timer(1000,1);
            HelpTimer.addEventListener(TimerEvent.TIMER_COMPLETE,HelpFun);
            HelpTimer.start();
            stage.removeEventListener(Event.ENTER_FRAME,updateStage);
            stage.removeEventListener(Event.ENTER_FRAME,updateCollission);
            function HelpFun(Event:TimerEvent)
            {
                stage.removeEventListener(MouseEvent.MOUSE_UP,mouseUpFun);
                stage.removeEventListener(MouseEvent.MOUSE_DOWN,mouseDownFun);
                gunFire = false;
                bg_mc.removeChild(player);
                bg_mc.removeChild(bunker_mc);
                (life_mc.parent).removeChild(life_mc);
                bg_mc.removeChild(sniper_mc);
                EndFun();
                Score = 0;
                Level +=  1;
                totalBugs += 5;
            }
        }
        //..................Function for ending the Game And removing the Reamining Enemies.................
        private function EndFun():void
        {
            Mouse.show();
            removeElement(dustArray);
            if (Level == 1)
            {
                removeElement(enemies1);
                removeElement(deadArray1);
                gotoAndStop("level2");
            }
            if (Level == 2)
            {
                removeElement(enemies1);
                removeElement(deadArray1);
                removeElement(enemies2);
                removeElement(deadArray2);
                gotoAndStop("level3");
            }
            if (Level == 3)
            {
                ......
            }

            .....................
            .....................



        }
    }
}

このコードでは、レベル 2 に新しいタイプの敵を追加し、その HitTest プロパティのコードも記述しました.レベル 2 の各敵を殺すには複数の弾丸が必要です..しかし、弾丸を 1 つに撃つと、敵と同じタイプの別の敵に別の弾丸を撃ち、別の敵が殺されます。これは、2 番目の敵がたった 1 発の弾丸で殺されていることを意味します..では、どうすればこの問題を解決できますか..?

助けてください..よろしくお願いします..

4

1 に答える 1