2011-04-06 101 views
0

我正試圖在Flash CS4中創建多級地牢冒險。佈局是創建一個名爲Level的符號的實例,符號內有多個牆子符號(牆),牆的實例。有一個碰撞程序阻止玩家穿過牆壁,從Wall.As呼叫。 關於中心點(0,0)繪製等級。 當我在Level(level)的舞臺上創建一個實例時,碰撞測試儀將使用xy座標繪製大約0,0的牆,而不是在舞臺上出現的「真實」xy座標。 所以我需要知道的是,如何使用現場舞臺信息「更新」每個牆體子標誌的xy,覆蓋在父級繪製的XY。它不得不被更新(我不能保持靜態),因爲水平很大,所以必須滾動。符號內的Flash CS4/AS3符號

感謝您的建議。

回答

1

在所有應有的尊重忘記你的方法,你重新發明輪子,可能會導致性能下降。你需要的是像素完美的碰撞檢測,可能包括基礎物理,所以我們已經在談論大量的工作。試圖回答的問題時,

http://www.gotoandlearn.com/play.php?id=135

+0

實際上使用bitmapData進行像素完美衝突並且點數更快,它在大多數PC上都不是很明顯,但如果將Flash應用程序移植到移動設備上,您將看到差異。 – Saad 2011-04-06 21:05:43

+0

我不太確定我是否收到您的評論,我的回答是否意味着像素完美的基於位圖的碰撞更慢?如果你只是在發表聲明,我同意,bitmapdata類在flash中速度非常快。 – 2011-04-07 01:30:54

0

它總是一個猜測:如果你想建立一個設計方式級別遊戲,利用這一點,它會打擊你的心如何真棒/易/酷,這是像這樣,因爲有很多未知數。這就是說,在編程中,總是有不止幾種方法來解決問題。檢查你的碰撞檢測例程 - 如果你使用hitTestPoint,以及正在測試的點(mouseX,Y或你的主要演員)localToGlobal,你可能不需要測試x,y變量你的碰撞物體。閱讀這兩個主題,這個問題可能會變得沒有意義。

在任何情況下,你可以通過利用globlaToLocal更新您的Wall.as實例相對座標:

public function get curLoc():Point 
{ 
    return globalToLocal(new Point(this.x, this.y)); 
} 

,並從父類檢索它們作爲一個點,你可以再試着:

trace(_wall.curLoc); 

希望有幫助

+0

做localToGlobal工作不管如何「深」的精靈(精靈obj是創建也許在另一個精靈對象是在舞臺上? – Saad 2011-04-06 21:10:09

+0

@Saad我相信它,但localToGlobal和globalToLocal是挑剔的方法,必須在具體方式http://www.emanueleferonato.com/2010/06/22/understanding-as3-localtoglobal-method/。 – 2011-04-07 01:33:15

0

我想你可以通過操縱牆符號的transform屬性來完成你想要做的事,但老實說,我會與Ascension Systems一致並放棄您的碰撞測試程序以尋找不同的東西。

您可能不需要爲您的遊戲全力以赴地使用物理引擎,在這種情況下只需使用hitTestObject來執行碰撞檢測。