2012-02-08 170 views
0

我將開始使用Java2D在Java平臺上進行2D遊戲,並試圖設計一種創建世界的方式。在過去的幾個小時裏,我一直在閱讀這些內容,並且據我所知,一種相對有效的方法是創建一個帶有「矩陣」值的文本文件,該文件由程序讀入爲了創建地圖(存儲在二維數組中)。瓷磚地圖的起點

現在,我的計劃是讓多個JComponents爲世界各種紋理顯示ImageIcons; JComponent對象將取決於給定數組索引中的字符。

  1. 有什麼我可能忽略了嗎?
  2. 該示意圖是否可以與背景圖像一起工作,即當有字符表示空白時,會顯示背景的一部分?

道歉,如果這看起來像一個懶惰的問題,我可以向你保證它不是懶惰。我只是試圖在黑客一起編寫代碼之前做出計劃。

回答

0

除非你有充分的理由,否則爲每個瓷磚配置不同的組件可能不是一個好的方法。看看一個畫布,並在不同的偏移量顯示加載的圖像。

例子: 480×640帆布 128x16映像文件(包含8個16×16平鋪圖像) 所以你的文件有一串數字(字符等),我們會說0-7圖像中的8瓦。該文件具有30x40數字,與網格佈局相同。所以

1 2 1 3 4 8 2 ... ...

並顯示該代碼最終像(未測試的基礎上,docs

Graphics g = //initialize graphics; 
Image yourTileImage = //load your image; 
for (int xpos = 0; xpos < maxX; xpos++) 
    for (int ypos = 0; ; ypos < maxY; ypos++) 
     int number = //get number from map file 
     g.drawImage(Image yourTileImage, 
      xpos * 16, ypos * 16, xpos * 16 + 15, ypos * 16 + 15, 
      number*16, 0, number+15, 15, 
      ImageObserver observer) 

這基本上映射將數字添加到您的平鋪圖像中,然後將該平鋪圖像放入平鋪的(x,y)座標*大小的正確位置。

+0

首先,感謝您的答覆。我已經看到你在這裏做什麼,似乎合乎邏輯的,謝謝,但是我打算把tile作爲獨立的組件,這樣我就可以用我自己的方法編寫碰撞檢測,並且可以重新繪製一個對象 – 2012-02-08 22:28:08

+0

這可以通過擴展Image類來實現嗎? – 2012-02-08 22:28:30

+0

這只是一種顯示世界的方法,碰撞檢測等應該可以處理實際的座標而不是顯示的座標,因此與用於顯示的方法無關,作爲附加說明,如果您使用的是Swing你想看看JPanel的awt而不是Canvas。 如果通過重畫你的意思是屏幕刷新,那麼是的,整個畫布會刷新。如果你的意思是你希望能夠改變畫面的部分內容,那麼你需要進一步調查。 – Thomas 2012-02-08 23:00:16

0

有很多很好的2d圖形引擎可用於Java。你最好使用其中的一種,而不是試圖重新發明輪子。 (從別的且不說,他們將利用GPU的。

你應該很容易找到一個沒有你所需要的。