3

ですから、これを説明するのは少し難しいです。最善を尽くすつもりですが、ご容赦ください。

わかった。だから私は、道路を含むゲームを作成しており、車がランダムな時間 (約 5 秒ごと) に道路を横切って移動します。

以下のコードを使用して、車と車が移動する方向を作成し、画面全体のトゥイーンが終了したら削除します。

 public function animateCars()
    {
        CarMC = Random_Car();

        if (CarLeft)
        {
            CarMC.x = 0;
            CarMC.y = 245;
            CarMC.name = "CarNumber_"+CarNumber;
            addChildAt(CarMC,numChildren - 1);
            MoveCar = new Tween(CarMC,"x",None.easeNone,-60,900,12,true);
            MoveCar.addEventListener(TweenEvent.MOTION_FINISH, CarFinished);
            MoveCar.start();
        }
        else
        {
            CarMC.x = 0;
            CarMC.y = 258;
            CarMC.name = "CarNumber_"+CarNumber;
            CarMC.scaleX *=  -1;
            addChildAt(CarMC,numChildren - 1);
            MoveCar = new Tween(CarMC,"x",None.easeNone,800,-260,12,true);
            MoveCar.addEventListener(TweenEvent.MOTION_FINISH, CarFinished);
            MoveCar.start();
        }
        CarNumber++;
    }

    // Loads another car when finished
    function CarFinished(e:TweenEvent):void
    {
        removeChild(getChildByName("CarNumber_"+CarNumberR));
        CarNumberR++;
    }

これはすべて完璧に機能します(まあまあですが、これは現在の問題ではありません)*

このゲームでは、オブジェクトを拾って配置することもできます。以下のコードを使用します。

    function addBuilding(Text:String)
    {
        HoldingBuilding = true;
        CursorPointer.visible = false;
        CursorGrab.visible = true;
        Building = new CarWash();
        Building.x = MouseX - MouseX % size;
        Building.y = MouseY - MouseY % size2;
        Building.rotation = 0;
        addChildAt(Building,numChildren);
    }

繰り返しますが、これは問題なく機能します。建物を車の上に置くと、車はその下にとどまります。(そうあるべきように)

車を道路に近づけすぎると問題が発生し、最初の建物では問題なく動作しますが、2 番目の建物を追加すると、車は最も新しい建物の下に移動し、最も古い建物の上に移動します。

配置された建物を上に、車を下に保つ方法がわかりません

これは配置コードです:

function DropBuilding(e:MouseEvent):void
        {
            if (HoldingBuilding)
            {
                if (BuildingPlacement)
                {
                    HoldingBuilding = false;
                    BuildingPlacement = false;
                    CursorPointer.visible = true;
                    CursorGrab.visible = false;

                    Building.x = MouseX - MouseX % size;
                    Building.y = MouseY - MouseY % size2;
                    Building.rotation = 0;
                    Building.transform.colorTransform = NoColour;
                    Building.removeChild(BuildingBase);
                    BuildingBase = new Sprite();
                    BuildingShaddow = new Sprite();
                    ShakeTimer.stop();
                }
                else
                {
                    ShakeTimer.start();
                }
            }
        }

建物を上に保つか、車を常に下に保つためにできることは何でも前もって感謝します.

エリ


*念のために言っておきますが、現在、車のトゥイーンで発生しているこの問題は何度も何度も発生しています (その理由はまだわかりません)。

4

2 に答える 2

5

関数で車を生成するたびに、animateCars()すべての子を反復処理して建物を車の上に配置できますが、これは少し面倒で不必要です (そしてあまり効率的ではありません)。

これははるかに優れた方法です。

//create a container for the cars
var carContainer:Sprite = new Sprite();
addChild(carContainer);

//create a container for the buildings
var buildingContainer:Sprite = new Sprite();
addChild(buildingContainer);

buildingContainerの後に追加したのでcarContainer、常に一番上になります(入れたものすべてを含む)

だから今あなたのanimateCars方法:

public function animateCars()
{
    CarMC = Random_Car();
    carContainer.addChild(CarMC);

    if (CarLeft)
    {
        CarMC.x = 0;
        CarMC.y = 245;
        MoveCar = new Tween(CarMC,"x",None.easeNone,-60,900,12,true);
    }
    else
    {
        CarMC.x = 0;
        CarMC.y = 258;
        CarMC.scaleX *=  -1;
        MoveCar = new Tween(CarMC,"x",None.easeNone,800,-260,12,true);
    }


    MoveCar.addEventListener(TweenEvent.MOTION_FINISH, CarFinished);
    MoveCar.start();
}

次に、あなたのcarFinished方法:

function CarFinished(e:TweenEvent):void
{
    carContainer.removeChild((e.currentTarget as Tween).obj as Random_Car);
}

次に、addBuildingメソッドで次のように変更addChildAt(Building,numChildren);します。

buildingContainer.addChild(Building);
于 2012-09-12T22:24:48.913 に答える
1

コンテナ mcs を使用して、すべてのオブジェクトを内部に配置するだけです。これはレイヤーのように機能します。

mc1 地面の深さ = 100
mc2 建物の深さ = 200
mc3 車の深さ = 300
mc4 オーバーレイ (スコア用) = 1000

深度の高いクリップは、深度の低いクリップの上に表示されます。1、2、3 のような連続した深さを選択しなかったので、後で既存のレイヤーの間に新しいレイヤーを追加できます。たとえば、depth=150 を使用します。

MC の深度を設定する方法については、http: //www.foundation-flash.com/tutorials/chingdepths/ を使用してください。

于 2012-09-12T21:51:26.660 に答える