【问题标题】:Loading a subimage from a tile map从瓦片地图加载子图像
【发布时间】:2013-07-25 07:15:26
【问题描述】:

我正在尝试开发我的第一款游戏。我在加载从地图中提取的瓷砖时遇到了严重的问题。 这是我到目前为止编写的代码,只是愿意显示第一个图块。

public class TileMap {

    //FIELDS
    public int Tilemapx;
    public int Tilemapy;
    private int nRows = 8;
    private int nColumns = 8;
    public int TileWidth = Panel.WIDTH / nColumns;
    public int TileHeight = Panel.HEIGHT / nRows;
    public BufferedImage EntireMap;
    public BufferedImage SingleTile;

    public TileMap (){
        String EntireMappath = "res/Tiles.png";
        try {
            EntireMap = ImageIO.read(new File (EntireMappath));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void drawTile (){
        for (int Tilemapx = 0; Tilemapx < Panel.WIDTH / nColumns; Tilemapx++){
            for (int Tilemapy = 0; Tilemapy < Pannel.HEIGHT / nRows; Tilemapy++){
                BufferedImage SingleTile = EntireMap.getSubimage(100, 100, Tilemapx, Tilemapy);

            }
        }
    }
}

并且,在 Panel 类中,我正在尝试绘制磁贴,但没有出现任何内容(前两个图像按预期工作)

public void draw() {
    BufferStrategy bs = getBufferStrategy();
    if (bs == null) {
        createBufferStrategy(3);
        return;
    }

    Graphics g = bs.getDrawGraphics();
    g.drawImage(bg, 0, 0, getWidth(), getHeight(), null);
    g.drawImage(heroImg1, hero.cordX, hero.cordY, hero.diameter, hero.diameter, null);
    g.drawImage(tiles.SingleTile, 100, 200, tiles.Tilemapx, tiles.Tilemapx, null);
    g.dispose();
    bs.show();
}

【问题讨论】:

  • 在TileMap.drawTile() 中,您声明了一个局部变量SingleTile 并为其分配了子图像。您没有分配到字段SingleTile。
  • 如需尽快获得更好的帮助,请发帖 SSCCE。热链接到图像或在代码中生成一个。

标签: java arrays image awt 2d


【解决方案1】:

您应该在TileMap 中提供一个方法,该方法返回给定图块的适当子图像。然后,在draw中,你可以调用那个方法,获取一张图片,然后在图形上绘制。如果您想画出整个棋盘,只需使用循环即可。

【讨论】:

    【解决方案2】:
    public void drawTile (){
    
    // THIS IMAGE SingleTile SHOULD BE GLOBAL AND THIS IMAGE SHOULD BE RETURNED GLOBAL FROM A METHOD
    
    BufferedImage SingleTile = EntireMap.getSubimage(100, 100, Tilemapx, Tilemapy);
    
    
    // get the graphics context from what you want to paint onto
    Graphics ga = OTHERIMAGE_OR_BUFFERSTRATEGY_OR_PANEL.getGraphics(); //or getDrawGraphics() for bufferstrategy
    
    //then draw on it ga.drawImge(....................
    
    
    }//END METHOD
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2014-06-13
      • 1970-01-01
      • 2015-03-03
      相关资源
      最近更新 更多