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);
    }

同样,这很好用,当您将建筑物悬停在汽车上方时,汽车会停留在其下方。(应该是这样)

当您将汽车放置在道路附近时会出现问题,并且对于第一座建筑物它工作正常,但是如果您添加第二座建筑物,汽车将在最新的建筑物下方并在最旧的建筑物上方。

我不知道如何才能将放置的建筑物保持在顶部或将汽车保持在底部

这是放置代码:

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();
                }
            }
        }

提前感谢您所做的一切,以帮助将建筑物保持在顶部或汽车始终在底部。

伊莱


*以防您想知道我目前在补间时遇到的这个问题是每次都没有(而且我还没有弄清楚原因)一两辆车会停止移动 5 秒钟然后消失。

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);

由于您添加buildingContainerafter 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 这样的连续深度,因此您以后可以在现有深度之间添加新层。例如使用深度=150。

要了解如何为 mc 设置深度,请使用http://www.foundation-flash.com/tutorials/changedepths/

于 2012-09-12T21:51:26.660 回答