2012-11-08 43 views
0

我使用AS2,我有一個人可以動態構建的火車。用戶點擊舞臺上的一個對象並創建一個副本。當用戶單擊並拖動該複製到另一個對象時,它將捕捉到目標對象的右側,現在創建或添加數組。因此,用戶基本上可以根據汽車的數量(或者您喜歡的孩子)來搭建列車。如何重新定位mc的孩子排列並指向相同的方向?

我添加的一個功能是當用戶點擊並釋放父母,並且座標沒有變化時,整列火車將知道排隊並指向一個新的方向。所以如果它們全部排成一行並指向3點鐘位置並且用戶點擊父母,則父母將指向6點鐘位置,並且孩子將全部排隊到12點,並且所有點到六個。如果用戶不斷點擊,整列火車將繼續旋轉。

這是我與(希望這是不夠的)工作代碼:

function rotate(_index,_angle):Void 
{ 
    for(var _i in _linkArray[_index]) 
    { 
     var _mcy:Number = this[_linkArray[_index][_i]]._y; 
     var _mcx:Number = this[_linkArray[_index][_i]]._x; 
     var _degree:Number = Math.atan2(_mcy,_mcx)*(180/Math.PI) + _angle; 
     /* if not the first element line up and rotate */ 
     if(_i != 0) 
     { 
      this[_linkArra[_index][_i]._rotation += _degree; 
     } 
    } 
} 

希望有足夠的信息。

編輯

我想嘗試和澄清什麼,我想要的目的。我沒有一個例子,但要更好地解釋。在圖書館裏有一個叫做「鐵路車」的電影片段。當SWF啓動時,「鐵路車」連接到舞臺上,並且該對象現在將成爲創建無限重複副本的主人。這裏的最終目標是用戶將使用這些重複項目來構建訓練輔助系統的列車。因此,如果用戶想要開始構建該列車,他們將重複並將其拖放到另一個對象的頂部,然後將這兩個對象鏈接在一起。用戶可以做到這一點,並建立一個他們想要的火車。

當構建列車中的所有的汽車將被堆疊到每個父對象的像正確,以便:(箭頭所示的方向上,並且每個○表示列車的單個車)

ooo-> 

當用戶點擊第一輛整列火車應該旋轉點在另一個直接的,這裏有一個例子:

^ 
o 
o 
o 

,並再次點擊前車的時候它會再次旋轉:

<-oooo 

因此,如果您有一列列車全部排好隊並指向3'oclock位置,並且您希望它指向9點位置,則您將點擊前車兩次(因爲每次輪換是90度),並且整個列車將朝那個方向旋轉指向前車。

我希望我的高清的例子,但我不這樣做,所以希望這有助於:)

+0

很難理解你想要完成什麼。也許圖表或模型會有所幫助? – BadFeelingAboutThis

+0

嘿倫敦,沒問題。我正在開會,有點匆忙。尋找編輯。 – Mike

回答

0

所以,如果你立足於項目的角度「0」,你不保持周圍。當你經過循環時,你總是使用當前項目'我'。將角度計算移到循環外部並將其賦值爲0.您還必須調整汽車的x和y點,但這取決於方向。

function rotate(_index,_angle):Void { 
    var _mcy:Number = this[_linkArray[_index][0]]._y; 
    var _mcx:Number = this[_linkArray[_index][0]]._x; 
    var _degree:Number = Math.atan2(_mcy,_mcx)*(180/Math.PI) + _angle; 

    for(var _i in _linkArray[_index]) { 
     /* if not the first element line up and rotate */ 
     if(_i != 0) { 
      this[_linkArra[_index][_i]._rotation += _degree; 
      // hypothetical hook code for a sprite attached to the car 
      this[_linkArra[_index][_i]._x = this[_linkArra[_index][_i-1].hook._x; 
      this[_linkArra[_index][_i]._y = this[_linkArra[_index][_i-1].hook._y; 
     } 
    } 
} 
+0

嘿走了,謝謝你的時間:)現在所有的汽車都會旋轉,但它們不會在同一方向上的鉛車後面的單個文件行中重新定位。他們總是保持在鉛車的右側。 – Mike

+0

這就是我所說的。你將需要計算汽車的新x,y位置。基本上,確定前一輛車的連接點並將其設置爲新車。但是定位可能會變得棘手,並且有很多方法可以讓代碼更簡單。在每個汽車物體的末端添加一個小的1x1像素精靈作爲汽車的小孩,並將其用作連接點。只要每輛車的中心位於中央前方,就可以將前一輛車的「掛鉤」位置分配到當前車輛的位置,並且一切都將排隊。 – Gone3d

+0

如果您事先知道它會是什麼,那麼您也可以爲汽車分配一個掛鉤點屬性,這可以在不添加額外精靈的情況下運行。困難的方法是根據旋轉計算新的x,y點。簡單一點。祝你好運! – Gone3d

相關問題