2010-01-19 60 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