2013-04-27 60 views
-2

在我正在創建的遊戲中,我想讓遊戲者拿着槍。將對象加在一起

現在我有槍和玩家作爲一個圖像,它的工作原理,但它會更好地擁有槍和玩家作爲單獨的圖像,因爲現在看起來像玩家從它的前額彈出子彈,如果我會把槍作爲一個單獨的物體,這會讓子彈射出槍更容易。稍後我還會實施一個武器切換系統,那麼把槍作爲單獨的物體也會更容易。

問題是,因爲我使用了AffineTransform和Vector2d旋轉玩家總是面對鼠標光標,所以我無法設法使它看起來像玩家持槍。有時槍更多的是在玩家的內部,有時看起來很好,有時槍會浮在空中,無論是玩家的前面還是玩家的側面。

有沒有簡單的方法可以讓槍「粘」到玩家對象的一部分?

回答

0

在我們的遊戲中,我們使劍和盾粘到播放器/敵人的精靈此時,相應的位置具有像下面的那些helpermethods:

public int getPlayerLeftHand() 
public int getPlayerRightHand() 

而且每次玩家繪製(在我們的遊戲中他總是有一把盾牌和一把劍),他的劍/盾分別通過調用上述方法在他的右手/左手上劃出。執行者(玩家/敵人)決定他們的手在哪裏,因此您不必擔心他們是否輪換或不旋轉,您知道每次您調用該方法時,執行者都會負責爲您提供正確的座標,在我們的情況下,通過檢查他們面對的方向然後適當地移動座標。

另外,如果你想要更多的面向對象的方法,你可以將玩家/敵人傳遞給武器,讓他們決定如何以及在何處渲染。

2

您可能「只是」需要使用正確的錨點,例如在rotate。爲了簡化操作,可以設想Gun位圖(或Shape?)與播放器尺寸相同。

我試圖說明,在此圖中:

anchor of a rotation

左邊的圖像是玩家,而右邊的圖像是槍。請注意,槍形圖像與玩家圖像具有相同的尺寸,但當然幾乎是空的。紅點將成爲旋轉的錨點 - 例如在圖像的中心,即使這並不重要。如果您將槍疊加在播放器上並使用相同的錨點旋轉,槍將始終位於正確的位置。

如果你知道你的線性代數,你當然也可以解析這個分析。但我會建議先讓它按照你想要的方式工作,然後從那裏探索更優雅的解決方案。我發現一個很好的快速閱讀是這四個部分blog post。第3部分和第4部分涉及你的問題。如果你想要更全面的介紹任何linear algebra textbook會做,或​​者你可能會喜歡這個free online course

0

你可以通過積累變換矩陣來解決這個問題。

首先,你有一個轉換矩陣來定位玩家。接下來,您定義一個矩陣,將槍放在未轉換球員的手中。將這兩個矩陣相乘,你就有一個將槍放在轉換後的玩家手中。最後,當你在它的時候,寫一個轉換矩陣來定位一個子彈相對於槍管的位置。將所有三個矩陣相乘,你的子彈就是它的所在。

你的3D圖形庫將有例程爲你做這一切。

雖然我不得不坦率地說:如果你還不知道所有這一切,你可能會咬掉更多的東西而不是咀嚼。