1

男の子の魚と女の子の魚が衝突すると再生する仮想生命シミュレーションを作成しようとしています。外部クラス ファイルを使用するのはこれが初めてで、かなり混乱しています。

package {

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

public class Main extends MovieClip
{
    var numBalls:Number = 3;
    var bFishList:Array = new Array();
    var gFishList:Array = new Array();

    public static var bFish:BoyFish = new BoyFish  ;
    public static var gFish:GirlFish = new GirlFish  ;
    var fishName:Object = bFish.name;

    public function Main()
    {
        addEventListener(Event.ADDED_TO_STAGE, enterFrameNow);
        function enterFrameNow(event:Event):void {
            // constructor code
            for (var i = 0; i < numBalls; i++) {
                var bFish:MovieClip = new BoyFish();
                bFish.name = "bFish"+i;
                addChild(bFish);

                //variable ball a movieclip is a new instance of Ball

                var gFish:MovieClip = new GirlFish();
                // ball x and y value was in the middle of the stage
                bFish.x = stage.stageWidth / 2;
                bFish.y = stage.stageHeight / 2;
                // add ball to stage

                bFishList.push(bFish);

                // ball x and y value was in the middle of the stage
                gFish.x = stage.stageWidth / 2;
                gFish.y = stage.stageHeight / 2;

                // add ball to stage
                addChild(gFish);
                gFishList.push(gFish);

                addEventListener(Event.ENTER_FRAME, hitTest);
                function hitTest(event:Event):void {
                    for (i = 0; i < bFishList.length; i++) {
                        if (gFish.hitTestObject(bFishList[i]) == true) {
                            addChild(gFish);
                            gFishList.push(gFish);
                            trace("hit");
                        }
                    }
                }
            }

        }
        trace(bFishList);
        trace(gFishList);
    }

}
}

Main.as ファイルのコードは次のとおりです。私はそのhitTestObjectことを長い間試してきましたが、うまくいきません。

誰でも私を助けることができますか?bFishaと a がgFish衝突したときにステージに別のインスタンスを追加したい。

4

1 に答える 1

0

多くの enterFrame イベントを追加しないでください。

ローカル関数としてではなく、クラスに enterFrame ハンドラーを 1 つだけ追加し、ネストされたループをそれに追加します。

//Somewhere in your Main() function :
addEventListener(Event.ENTER_FRAME, this.hitTest);

//In class Main
public function hitTest(event:Event):void
{
    for (var i = 0; i < bFishList.length; i++)
    {
        for (var j = 0; j < gFishList.length; j++)
        {
            if (gFishList[j].hitTestObject(bFishList[i]))
            {
                var newFish:MovieClip = new GirlFish(); //Create it.
                addChild(newFish);
                gFishList.push(newFish);
            }
        }
    }
}

これ以上アクションを行わないと、フレームごとに多くの女の子の魚が作成され、最終的にフラッシュ プレーヤーがフリーズする可能性があることに注意してください。

于 2012-10-02T09:24:48.297 に答える