在哪里实现瓷砖的纹理?

所以我刚刚学习了Java的基础知识,并准备尝试创建一个类似于Civ风格的原型游戏。 所以一个平铺和回合制的游戏。

我为不同的瓷砖创建了一个枚举:

public enum TerrainTile{ WATER(1), GRASSLAND(1), HILL(2), FORREST(2), BLANK(99); private final int id; private final int moveCost; private boolean hidden = true; private TerrainTile(int moveCost) { this.id = this.ordinal(); this.moveCost = moveCost; } 

我做了一个JFrame:

 public class MainFrame extends JFrame { private MapPanel pnlMap; public MainFrame(Terrain map) { setTitle("MyGame"); setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().setPreferredSize(new Dimension(500, 500)); pnlMap = new MapPanel(map); pnlMap.setPreferredSize(new Dimension(500, 500)); add(pnlMap); pack(); setLocationRelativeTo(null); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { BufferedImage mapImg = null; try { mapImg = ImageIO.read(MainFrame.class.getClassLoader().getResourceAsStream("frames/resources/map2.png")); } catch (IOException e) { e.printStackTrace(); } Terrain map = new Terrain(mapImg); System.out.println("Terrain created:"); map.printTerrain(); JFrame frame = new MainFrame(map); frame.setVisible(true); } 

和一个JPanel的地图:

 public class MapPanel extends JPanel { private final Terrain map; public MapPanel(Terrain map) { this.map = map; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); } 

当我不知道在哪里保存瓷砖的纹理。 我应该只读出地图数组,并做一个switch语句来在MapPanel类中定义要绘制的纹理,还是应该在枚举中更好地实现纹理?

看看这个 。
对于所有的瓷砖都有一个单一的图像,并在渲染时绘制不同的部分。
然后你可以像这样绘制你的瓷砖:

 int mx = tileId % numberOfTileCols; int my = tileId / numberOfTileRows; graphics.drawImage(image, x, y, x + tileWidth, y + tileHeight, mx * tileWidth, my * tileHeight, mx * tileWidth + tileWidth, my * tileHeight + tileHeight, this); 

这样你就可以在MapPanel中存储一个纹理,但是却不需要巨大的switch语句。