2010-01-19 59 views
0

在我的比赛中,我有飞机从俯视图飞过屏幕。当飞机坠毁时,我将它们缩小以使它看起来好像正在离地面越来越近并远离屏幕。我也有这些工艺的炮塔。他们是从空气计划分离的物体。我也缩小了它们。唯一的问题是他们不正确地重新定位。即使他们正在缩小,他们仍然处于x和y位置,看起来好像他们正在从飞机上撤离。是否有可能根据它们坐在的对象(即飞机)上的尺寸正确地重新定位它们基于比例重新定位对象

我刚刚从另一篇文章中得到了很好的答案,将它们放入动画片本身。这是伟大的,但为了记录,如果有人知道这个答案,这将是伟大的。

回答

1

您应该将每个平面的所有内容保留在自己的MovieClip中。但是,如果没有内置的scaleX/scaleY,知道如何做到这一点仍然很有用。按照你目前的设置,它可以这样完成(如果飞机是你的飞机,比例尺是你要缩放飞机的因素(0-1之间),而炮塔是一个相对于飞机):

function scalePlane(plane, turret, scale:Number):void { 

    //scaling coordinates: 
    var relativeX:Number = turret.x - plane.x; 
    var relativeY:Number = turret.y - plane.y; 
    var newRelativeX:Number = relativeX*scale; 
    var newRelativeY:Number = relativeY*scale; 
    turret.x = plane.x + newRelativeX; 
    turret.y = plane.y + newRelativeY; 
    //scaling size: 
    turret.scaleX *= scale; 
    turret.scaleY *= scale; 
    plane.scaleX *= scale; 
    plane.scaleY *= scale; 
} 

scalePlane(plane1, turret1, 0.9); 
//overall scale is 0.9; 
//next frame: 
scalePlane(plane1, turret1, 0.9); 
//now the overall scale is 0.81 because you are multiplying the scales 

我还没有测试过,但它应该工作,只要飞机和炮塔有相同的父母。请注意,在这种情况下比例是相对的,所以您可能需要稍微改变一下计算。 (如果您将这个代码以0.5的比例调用这个代码两次,那么这个飞机就会有0.5 * 0.5 = 0.25的比例)

+0

谢谢。我确实把所有内容都放在了movieclip里面,但是当我这样做时,它似乎听不到我的炮塔班。它应该是什么?我是否做错了 – numerical25 2010-01-19 03:17:17

+0

没关系,我现在知道为什么。我已经在我的游戏引擎中设置了只有一个循环的地方。所有类都使用updateObject方法来更新每个帧的状态。因为我把我的炮塔放在movieclip里面,而不是以这种方式添加它,它不能正常工作 – numerical25 2010-01-19 03:19:26

+0

唯一的原因是我这样做是因为我不必担心销毁所有displayobjects eventlisteners和循环。如果我在炮塔类中添加一个事件侦听器,并将它们直接添加到我的飞机动画片段中。当我摧毁飞机 – numerical25 2010-01-19 03:24:53