diff --git a/Zoelda/src/main/Player.java b/Zoelda/src/main/Player.java index 8245eeb..8a3efdc 100644 --- a/Zoelda/src/main/Player.java +++ b/Zoelda/src/main/Player.java @@ -5,10 +5,10 @@ import ea.Taste; public class Player extends LivingEntity { private Malin main; // Referenz auf die main Klasse. Wird später für den Keyboardinput verwendet - private static PlayerSheetLoader loader = new PlayerSheetLoader(); + private static SheetLoader loader = new SheetLoader("/res/images/player_sprite_sheet.png", 64, 32, new int[] {5, 8, 7, 6, 2, 5, 4, 7}); public Player(Malin main) { - super(loader.getPlayer(0), "idle_left"); + super(loader.getFigur(0), "idle_left"); this.main = main; // Entity-Eigenschaften werden festgelegt @@ -21,16 +21,16 @@ public class Player extends LivingEntity { // unterschiedliche Animationsgeschwindigkeiten // für idle - loader.getPlayer(0).animationsGeschwindigkeitSetzen(200); + loader.getFigur(0).animationsGeschwindigkeitSetzen(200); // fürs laufen - loader.getPlayer(1).animationsGeschwindigkeitSetzen(50); + loader.getFigur(1).animationsGeschwindigkeitSetzen(50); // Zustände werden hinzugefügt - actionFigur.neuerZustand(loader.getPlayer(0), "idle"); - actionFigur.neuerZustand(loader.getPlayer(1), "walk"); - actionFigur.neuerZustand(loader.getPlayer(2), "strike"); - actionFigur.neuerZustand(loader.getPlayer(3), "swipe"); - actionFigur.neuerZustand(loader.getPlayer(4), "die"); + actionFigur.neuerZustand(loader.getFigur(0), "idle"); + actionFigur.neuerZustand(loader.getFigur(1), "walk"); + actionFigur.neuerZustand(loader.getFigur(2), "strike"); + actionFigur.neuerZustand(loader.getFigur(3), "swipe"); + actionFigur.neuerZustand(loader.getFigur(7), "die"); } @Override @@ -70,6 +70,9 @@ public class Player extends LivingEntity { if (main.tasteGedrueckt(Taste.Q)) { zustandSetzen("strike"); } + if (main.tasteGedrueckt(Taste.F)) { + zustandSetzen("die"); + } } // auf Kollisionen prüfen diff --git a/Zoelda/src/main/PlayerSheetLoader.java b/Zoelda/src/main/PlayerSheetLoader.java deleted file mode 100644 index a639556..0000000 --- a/Zoelda/src/main/PlayerSheetLoader.java +++ /dev/null @@ -1,61 +0,0 @@ -package main; - -import java.awt.Color; -import java.awt.image.BufferedImage; -import java.io.IOException; - -import javax.imageio.ImageIO; - -import ea.Figur; -import ea.internal.gra.PixelFeld; - -public class PlayerSheetLoader { - - private static Figur[] player; - - public PlayerSheetLoader() { - try { - BufferedImage sheet = ImageIO.read(Tile.class.getResourceAsStream("/res/images/player_sprite_sheet.png")); - - PixelFeld[][] sprites = new PixelFeld[5][]; - sprites[0] = new PixelFeld[5]; - sprites[1] = new PixelFeld[8]; - sprites[2] = new PixelFeld[7]; - sprites[3] = new PixelFeld[6]; - sprites[4] = new PixelFeld[7]; - - loadSprites(sprites[0], 0, 64, 32, sheet); - loadSprites(sprites[1], 1, 64, 32, sheet); - loadSprites(sprites[2], 2, 64, 32, sheet); - loadSprites(sprites[3], 3, 64, 32, sheet); - loadSprites(sprites[4], 4, 64, 32, sheet); - - Figur fig; - player = new Figur[5]; - for (int i = 0; i < player.length; i++) { - fig = new Figur(); - fig.animationSetzen(sprites[i]); - player[i] = fig; - } - - } catch (IOException e) { - e.printStackTrace(); - } - } - - public Figur getPlayer(int y) { - return player[y]; - } - - private void loadSprites(PixelFeld[] sprites, int row, int w, int h, BufferedImage sheet) { - for (int s = 0; s < sprites.length; s++) { - sprites[s] = new PixelFeld(w, h, 1); - for (int x = 0; x < w; x++) { - for (int y = 0; y < h; y++) { - Color clr = new Color(sheet.getRGB((s * w + x), (row * h + y)), true); - sprites[s].farbeSetzen(x, y, clr); - } - } - } - } -} diff --git a/Zoelda/src/main/SheetLoader.java b/Zoelda/src/main/SheetLoader.java new file mode 100644 index 0000000..26feaca --- /dev/null +++ b/Zoelda/src/main/SheetLoader.java @@ -0,0 +1,68 @@ +package main; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.io.IOException; + +import javax.imageio.ImageIO; + +import ea.Figur; +import ea.internal.gra.PixelFeld; + +public class SheetLoader { + + private static Figur[] figures; + + /** + * Macht aus einem Spritesheet Figuren. + * @param path - Der pfad zum sheet + * @param width - die Breite von einem Bild + * @param height - die Höhe von einem Bild (nicht das ganze sheet) + * @param lengths - die Anzahl der Frames der verschiedenen Animationen + */ + public SheetLoader(String path, int width, int height, int[] frames) { + + try { + // Bild laden + BufferedImage sheet = ImageIO.read(Tile.class.getResourceAsStream(path)); + + // Anzahl der Animationen + int rows = frames.length; + + // Sprites anordnen *magie* + PixelFeld[][] sprites = new PixelFeld[rows][]; + for (int i = 0; i < frames.length; i++) { + sprites[i] = new PixelFeld[frames[i]]; + } + for (int i = 0; i < sprites.length; i++) { + loadSprites(sprites[i], i, width, height, sheet); + } + Figur fig; + figures = new Figur[rows]; + for (int i = 0; i < figures.length; i++) { + fig = new Figur(); + fig.animationSetzen(sprites[i]); + figures[i] = fig; + } + + } catch (IOException e) { + e.printStackTrace(); + } + } + + public Figur getFigur(int y) { + return figures[y]; + } + + private void loadSprites(PixelFeld[] sprites, int row, int w, int h, BufferedImage sheet) { + for (int s = 0; s < sprites.length; s++) { + sprites[s] = new PixelFeld(w, h, 1); + for (int x = 0; x < w; x++) { + for (int y = 0; y < h; y++) { + Color clr = new Color(sheet.getRGB((s * w + x), (row * h + y)), true); + sprites[s].farbeSetzen(x, y, clr); + } + } + } + } +}