2013-03-27 35 views
3

我自學C++並玩2D瓦片映射。居中精靈或移動相機? C++/Opengl

我一直在讀通過這個scrollinghere,這是基於這個tiling tutorial

使用上面的教程和Pearson, Computer Graphics with OpenGL書的一些幫助我寫了一個小程序,繪製了一個40x40平鋪的世界和一個Sprite(也是一個瓷磚)。

就繪圖/渲染順序而言,地圖(或世界)本身就是背層,而Sprite是最前面的層(或頂層)。我認爲這是一個很好的方式,因爲它比2個拼貼塊更容易互動,而不是拼貼圖和自定義精靈或矩形。那是對的嗎?

我實現了一個Keyhandling()功能,您可以使用keyboards arrow keys移動mapviewport內。我有一個名爲offsetx, offsety的變量,當按下某個鍵時會增加或減少。根據我是否將變量分配給mapsprite,我可以在屏幕上的任意方向更多或另一個。

這兩者似乎都不能很好地工作,所以我將變量分配給(地圖和精靈),但是精靈正值,地圖負值。所以在按鍵時,這允許我的Sprite在一個方向上移動,而地圖在相反的方向上移動。

我的問題是,小精靈很快就會移動到足以離開窗口,並不足以將更多的地圖帶入場景中。 (該窗口在任何時候只顯示瓷磚的1/8th)。

我一直在想整天,我認爲一個有效的方法來解決這個問題將固定sprite到屏幕的中心,當一個按鍵被按下map移動...我我不確定如何實現這個。

這是一個好方法嗎?還是預計會移動視口或相機呢?

回答

1

你不想在角色移動時將所有相對於Sprite的東西都移動。考慮一個更復雜的世界,你在地圖上也有其他東西,例如其他精靈。固定地圖最簡單,並將每個精靈相對於地圖移動(如果它是可移動的精靈)。只要你的角色在世界上移動,移動世界上的所有東西就沒有多大意義。

如果您想讓自己的角色始終處於中心位置,那完全沒問題。最好的辦法是移動相機。這也使您能夠在保持跟蹤世界上所有物體的情況下輕鬆地放大/縮小相機,旋轉相機等。

小心使用「視口」一詞。這意味着在OpenGL中非常具體的事情。 (即看功能glViewport)。如果你的書有不同的使用方式,那很好。我只是指出了這一點,因爲它不是100%清楚你的意思。