2012-02-08 258 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的。

你应该很容易找到一个没有你所需要的。