Guidance on tile loading


Sorry for the stupid question though it seems I’m not seeing the picture :frowning:

I’m using Tiled Map Editor to create my maps, wrote a tiny handler to get most of the needed data

      
  TMXHandler test = new TMXHandler("DA");
            TMX_MapData data = test.getMapData();
            HashMap<Integer,BufferedImage> tiled = new HashMap<Integer, BufferedImage>();
            Graphics2D g2 = (Graphics2D) g;
            try {
            BufferedImage img = ImageIO.read(new File("src/com/prinnyware/resources/grasslandv6_0.png"));
            
            ArrayList<TMX_Layer> layers = data.getLayers();
            ArrayList<BufferedImage> mi = new ArrayList<BufferedImage>();
                for (Iterator<TMX_Layer> it = layers.iterator(); it.hasNext();) {
                    TMX_Layer layer = it.next();
                    System.out.println(layer.getLayerName());
                    ArrayList<Integer> tiles = layer.getTiles(); // tiles loaded in layer
                        int columns = (506 / data.getTileWidth());
                        int lines = (768 / data.getTileHeight());
                        int counter = 1;
                        
                        for (int incrlines = 0; incrlines < lines; incrlines++) {
                            for (int i = 0; i < columns; i++) {
                                
                                
                                   // System.out.println(i * incrlines);
                                   
                                           tiled.put(counter,img.getSubimage(i*32, incrlines*32, 32, 32));
                                           
                                            
                                            //g2.drawImage(img.getSubimage(i*32, incrlines*32, 32, 32), null, i*32, incrlines*32);
                                           counter++;
                                          // System.out.println(counter);
                                           
                            }
                        }

With that code I can output pretty much the tileset image and store it (to match the gid later on). But I got stuck! now I kinda don’t know how to progress on how to load my tiles so I don’t know if I’m doing it right with my current approach or if I should take another route.

Googling around I got some matches and saw some people wrote another tmx handler though I saw something different

some had this:

  drawClip: function(gid, scrollX, scrollY, offsetX, offsetY) {
        var gid = parseInt(gid);
        gid--; //tmx is 1-based, not 0-based.  We need to subtract 1 to get to a proper mapping.

        var tw = TILE_WIDTH;
        var th = TILE_HEIGHT;
        
        // # of tiles per row in tileset image
        var perRow = this._width / tw;

        // x and y in tileset image from where to copy
        var sx = (gid % perRow) * tw;
        var sy = Math.floor(gid / perRow) * th;
        
        // x and y in canvas to copy to.
        var dx = scrollX * tw + offsetX;
        var dy = scrollY * th + offsetY;
        
        // alert("sx: " + sx + " sy: " + sy + " dx: " + dx + " dy: " + dy);

        mapCtx.drawImage(this._img, sx, sy, tw, th, dx, dy, tw, th);
    }   

so I wondered where do I take scrollX/Y from?

Thanks

The Scroll X/Y would be from the view screen. If you scroll over 20 pixels and down 30 pixels, you need to offset by that what will be displayed on the screen.

I use a 2D array to store my map. e.g. BufferImage[][]. Then I can get to the images that need to be displayed with the offset, instead of going through the whole list.