因此,这有点难以解释,我将尽力而为,但请耐心等待。
好。因此,我正在创建一个涉及道路的游戏,汽车在随机时间(每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秒钟然后消失。
最佳答案
每次在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);