Witam, przygodę z Javą zacząłem około 3 tygodnie temu, i dziś postanowiłem napisać prostą gre platformową bez żadnych skomplikowanych rzeczy. Problem polega na tym że chce pobrać z tilesheet wygląd jednego elementu i robie to w ten sposób:

Tutaj pobieram cały obraz ze wszystkimi elementami wyglądu do gry:

import java.awt.image.*;
import java.io.*;
import javax.imageio.*;

public class LoadSprites {
	
	public static BufferedImage tiles;
	
	public LoadSprites(){
		LoadSprites2();
	}
	
	public void LoadSprites2(){
		try{
			tiles = ImageIO.read(new File("res/tiles.png"));
		}catch(Exception ex){}
	}
	
	
}

Następnie chce z jednego elementu utworzyć plansze:

public void render(Graphics g){
		for(int x=0; x<15; x++){
			for(int y=0; y<15; y++){
				if (Map[y].substring(x, x + 1).equals("G")){
					//g.fillRect(x * 32, y * 32, 32, 32);
					g.drawImage(LoadSprites.tiles, x * 32, y * 32, 32, 32, 32, 0, 0, 32, null);
					
				}
			}
		}
	}

I kiedy używam g.fillRect mapa wygląda tak
user image

Czyli tak jak powinna.

A kiedy użyje g.drawImage (Tym samym od razu pobierając element że tak to nazwę podłogi gry) tworzy się coś takiego

user image

Czyli zamiast 225 małych kwadracików tak jak przy użyciu g.fillRect tworzą się 3 duże prostokąty i 1 duży kwadrat.
Dlatego moje pytanie jest takie gdzie tkwi problem, że tak się dzieje, głowie się już od dłuższego czasu.

I jeszcze dodam metode Double Buffering:

public void DoubleBuffering(){
		BufferStrategy bs = getBufferStrategy();
		
		if(bs == null){
			createBufferStrategy(2);
			return;
		}
		
		Graphics g = bs.getDrawGraphics();
		
		map.render(g);
		g.dispose();
			
		g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
		bs.show();
	}

Ps
Używam Canvas. Za pomoc dziękuje.