2013-01-18 72 views
0

我目前工作的一個突破風格的遊戲,但是我只迄今爲止硬編碼一個級別使用下面的方法:在基於畫布的遊戲中創建「關卡/地圖」?

for (int i = 0; i < 6; i++) { 
      for (int j = 0; j < 7; j++) { 
       int y_coordinate = (i * (blockHeight + spacing)) + topOffset; 
       int x_coordinate = j * (blockWidth + spacing); 

所以基本上它放置7塊在屏幕的寬度,然後6層疊下來,形成一個「方塊」,然而這對用戶來說並不有趣或吸引人,我希望能夠做到這一點。實現某種級別的進展,如果這是通過外部文件完成的?以及我如何去確保項目被放置在屏幕上的正確座標相對於屏幕大小/密度,其次,我的主要問題,我怎麼可以去做與塊的某些形狀,即一張臉,沒有硬編碼每個屏幕的個人協作?

對一個問題的分類只有兩種說法,真的很抱歉,如果這太模糊了嗎?

回答

1

如果你只是想要不同的水平,那麼你可以隨機生成它們。對於每個塊的位置,有一個隨機的機會,那裏會有一個塊。從不相同的水平兩次(或多或少)。如果你想要特定模式的模塊,比如一張臉,那麼你必須想出一些方法將一個關卡的塊佈局存儲在一個文件中,然後當關卡開始時,遊戲將加載文件當前水平,讀取塊位置並以正確的排列創建它們。除非你喜歡用數學公式來描述你的關卡形狀並用它們來程序化地生成它們,否則沒有辦法做到這一點。

[編輯] 至於座標問題,你說得對,不同的設備有不同的屏幕分辨率,像素密度等等。但是,這並不一定非得影響你的遊戲。

一個常見的解決方法是有兩個座標系:代表一個物體在遊戲世界中的位置的「世界」座標和代表目標位置的「屏幕」座標哪個對象正在繪製。你所有的物理和遊戲邏輯代碼都應該使用世界合唱團,它可以是任何你喜歡的音階(我推薦選擇比你的遊戲最大屏幕像素尺寸更大的尺寸)。我之前提到的關卡文件當然也應該在世界座標中。唯一一次你對屏幕座標感興趣的是當你在屏幕上繪畫的時候。那時,你有一個小函數可以將一個座標系映射到另一個座標系。通常這只是一個簡單的比例因子。所以,當你的遊戲啓動時,它會詢問手機或平板電腦的屏幕分辨率,計算這個特定實例的比例因子,並將其存儲起來,然後在繪製事物時只需要查看它,然後使用它轉換。例如,如果您的遊戲正在使用座標爲10,000點的座標系,並且您的遊戲在768像素的屏幕上運行,則遊戲會計算比例因子爲10,000/768 = 13.021ish。然後,每當你畫出球時,你知道它的屏幕x座標是它的實際x座標除以13.021。

這不僅會讓您的遊戲獨立於屏幕尺寸,還意味着您可以在內部使用更準確的位置,從而實現更準確的行爲(碰撞檢測等)。只要您的內部「世界」座標集大於屏幕上的像素數量,但不是太大以至於需要大量內存(如果必須存儲每個位置的數據)或處理能力(如果你在每個循環的許多位置上進行連續的碰撞檢測),那麼它會正常工作。對於Android遊戲,考慮到普通Android設備的功能和他們常用的屏幕類型,我想說你應該沒有問題,只需要一個兩三千點的「世界」座標系。你必須決定的唯一的事情就是當比賽不匹配時要做什麼 - 例如,你的比賽有一個比例爲4:3的邊長的網格,並且在16: 9屏幕。你可以切掉邊緣(並且記得在那裏增加一個屏障,以便球不會離開屏幕)或者只是扭曲它以匹配(這對某些事情不起作用,但可能在突圍中不明顯風格的遊戲)。也許試試看看你最喜歡哪一個。

+0

好吧,這聽起來不錯,但是,肯定對於像面部這樣的東西,我給它的合作社的塊,使臉只會在我正在測試的設備上有效?因爲屏幕尺寸不同? – Broak

+0

啊,現在我明白你問題的另一半是什麼意思了。你是對的,屏幕協調人可能會從一臺設備變成另一臺設備。評論不允許我足夠的角色來回答這個問題,所以我會將其編輯到我的答案中。 – anaximander

+0

絕對精彩的答案感謝你,很有可能是我收到的最有幫助和最徹底的答案,我很樂意隨時關注遊戲開發的大腦,直到現在我專注於行業和實際應用 – Broak