optimized player model scaling

This commit is contained in:
2025-11-28 15:22:15 +01:00
parent d294d76ca5
commit a17ca8853c
3 changed files with 33 additions and 19 deletions

View File

@@ -0,0 +1,14 @@
package de.miaurizius.jgame2d.core;
import java.awt.image.BufferedImage;
public class Utility {
public static BufferedImage scaleImage(BufferedImage img, int width, int height) {
BufferedImage scl = new BufferedImage(width, height, img.getType());
scl = new BufferedImage(width, height, img.getType());
scl.createGraphics().drawImage(img, 0, 0, width, height, null);
return scl;
}
}

View File

@@ -1,9 +1,6 @@
package de.miaurizius.jgame2d.entity; package de.miaurizius.jgame2d.entity;
import de.miaurizius.jgame2d.core.Boot; import de.miaurizius.jgame2d.core.*;
import de.miaurizius.jgame2d.core.Direction;
import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.core.KeyHandler;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.*; import java.awt.*;
@@ -47,18 +44,23 @@ public class Player extends Entity {
} }
public void getPlayerImage() { public void getPlayerImage() {
up1 = initPlayerImage("boy_up_1");
up2 = initPlayerImage("boy_up_2");
down1 = initPlayerImage("boy_down_1");
down2 = initPlayerImage("boy_down_2");
left1 = initPlayerImage("boy_left_1");
left2 = initPlayerImage(("boy_left_2"));
right1 = initPlayerImage(("boy_right_1"));
right2 = initPlayerImage(("boy_right_2"));
}
public BufferedImage initPlayerImage(String name) {
try { try {
up1 = ImageIO.read(new FileInputStream("assets/player/boy_up_1.png")); return Utility.scaleImage(ImageIO.read(new FileInputStream("assets/player/" + name + ".png")), panel.tileSize, panel.tileSize);
up2 = ImageIO.read(new FileInputStream("assets/player/boy_up_2.png"));
down1 = ImageIO.read(new FileInputStream("assets/player/boy_down_1.png"));
down2 = ImageIO.read(new FileInputStream("assets/player/boy_down_2.png"));
left1 = ImageIO.read(new FileInputStream("assets/player/boy_left_1.png"));
left2 = ImageIO.read(new FileInputStream("assets/player/boy_left_2.png"));
right1 = ImageIO.read(new FileInputStream("assets/player/boy_right_1.png"));
right2 = ImageIO.read(new FileInputStream("assets/player/boy_right_2.png"));
} catch (IOException e) { } catch (IOException e) {
Boot.logger.log(Level.SEVERE, "Could not load image", e); Boot.logger.log(Level.SEVERE, "Could not load player-image", e);
} }
return null;
} }
public void update() { public void update() {
@@ -132,7 +134,7 @@ public class Player extends Entity {
case LEFT -> (spriteNum == 1) ? left1 : left2; case LEFT -> (spriteNum == 1) ? left1 : left2;
case RIGHT -> (spriteNum == 1) ? right1 : right2; case RIGHT -> (spriteNum == 1) ? right1 : right2;
}; };
graphics2d.drawImage(image, screenX, screenY, panel.tileSize, panel.tileSize, null); graphics2d.drawImage(image, screenX, screenY, null);
} }
} }

View File

@@ -2,6 +2,7 @@ package de.miaurizius.jgame2d.tile;
import de.miaurizius.jgame2d.core.Boot; import de.miaurizius.jgame2d.core.Boot;
import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.GamePanel;
import de.miaurizius.jgame2d.core.Utility;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.*; import java.awt.*;
@@ -44,10 +45,7 @@ public class TileManager {
BufferedImage scaledImage; BufferedImage scaledImage;
for (Tile tile : tile) { for (Tile tile : tile) {
if(tile == null) continue; if(tile == null) continue;
scaledImage = new BufferedImage(panel.tileSize, panel.tileSize, tile.image.getType()); tile.image = Utility.scaleImage(tile.image, panel.tileSize, panel.tileSize);
Graphics2D g2d = scaledImage.createGraphics();
g2d.drawImage(tile.image, 0, 0, panel.tileSize, panel.tileSize, null);
tile.image = scaledImage;
} }
} }
@@ -92,7 +90,7 @@ public class TileManager {
worldX - panel.tileSize < panel.player.worldX + panel.player.screenX && worldX - panel.tileSize < panel.player.worldX + panel.player.screenX &&
worldY + panel.tileSize > panel.player.worldY - panel.player.screenY && worldY + panel.tileSize > panel.player.worldY - panel.player.screenY &&
worldY - panel.tileSize < panel.player.worldY + panel.player.screenY worldY - panel.tileSize < panel.player.worldY + panel.player.screenY
) graphics2D.drawImage(tile[tileNum].image, screenX, screenY, panel.tileSize, panel.tileSize, null); ) graphics2D.drawImage(tile[tileNum].image, screenX, screenY, null);
worldCol++; worldCol++;