所以这有点难以解释,我会尽力而为,但请耐心等待。
行。因此,我正在创建一个涉及道路的游戏,并且汽车会随机移动(每隔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秒然后消失。
答案 0 :(得分: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);
答案 1 :(得分:1)
只需使用容器mcs并将所有对象放入其中。这将像层一样。
mc1地面深度= 100
mc2建筑深度= 200
mc3汽车深度= 300
mc4叠加(分数)= 1000
深度较高的剪辑将位于深度较低的剪辑上方。我没有选择连续的深度,如1,2,3,所以你以后可以在现有的之间添加新的图层。例如,使用depth = 150。
要了解如何使用http://www.foundation-flash.com/tutorials/changingdepths/
设置mc的深度