This commit is contained in:
Maxim Derksen 2021-06-30 13:33:45 +02:00
commit a5eed792e7
8 changed files with 61 additions and 41 deletions

View File

@ -12,44 +12,46 @@ import ea.internal.gra.PixelFeld;
public class SheetLoader {
private Figur[] figures;
private BufferedImage sheet;
/**
* 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 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) {
public SheetLoader(String path) {
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;
}
sheet = ImageIO.read(Tile.class.getResourceAsStream(path));
} catch (IOException e) {
e.printStackTrace();
}
}
public void generateFigures(int width, int height, int[] frames) {
// 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;
}
}
public Figur getFigur(int y) {
return figures[y];
}

View File

@ -25,6 +25,7 @@ public class Tile extends Knoten {
public static final int STONE_FLOOR_SHADOW_LEFT = 6;
public static final int DOOR_LEFT_BOTTOM = 7;
public static final int DOOR_LEFT_TOP = 8;
public static final int DISCO = 9;
private Bild img; // Bild, das gerendert wird
private int id; // Die id dises Tiles//
@ -98,6 +99,8 @@ public class Tile extends Knoten {
return "/res/images/tiles/door_left_bottom.png";
case DOOR_LEFT_TOP:
return "/res/images/tiles/door_left_top.png";
case DISCO:
return "/res/images/tiles/disco_sprite_sheet.png";
}
return null;
}

View File

@ -1,7 +1,10 @@
package main.entities;
import java.awt.Color;
import ea.ActionFigur;
import ea.Figur;
import ea.internal.gra.PixelFeld;
import main.worlds.World;
/*
@ -16,12 +19,25 @@ public abstract class LivingEntity extends Entity {
protected float hp = 1f; //hp des Entitys
protected boolean mirrored;
private static Figur noTexture = new Figur();
static {
PixelFeld[] img = new PixelFeld[1];
img[0] = new PixelFeld(16, 16, 1);
for (int x = 0; x < 16; x++) {
for (int y = 0; y < 16; y++) {
img[0].farbeSetzen(x, y, Color.MAGENTA);
}
}
noTexture.animationSetzen(img);
}
/**
* @param figur - erstes (standart) Sprite
* @param name - name des Zustands
*/
public LivingEntity(Figur figur, String name) {
actionFigur = new ActionFigur(figur, name) {
public LivingEntity() {
actionFigur = new ActionFigur(noTexture, "undefined") {
// DEBUG: render boxes
// @Override

View File

@ -7,15 +7,13 @@ import main.entities.player.Player;
public class Snake extends LivingEntity {
private static SheetLoader loader = new SheetLoader("/res/images/snake_spritesheet_calciumtrice.png", 32, 32,
new int[] { 10, 10, 10, 10, 13, 8 });
private static SheetLoader loader = new SheetLoader("/res/images/snake_spritesheet_calciumtrice.png");
private float damage = 0.1f;
private boolean attackOnce;
public Snake() {
super(loader.getFigur(0), "idle");
loader.generateFigures(32, 32, new int[] { 10, 10, 10, 10, 13, 8 });
posX = 9f;
posY = 9f;
accelleration = 0.006f;
@ -24,6 +22,7 @@ public class Snake extends LivingEntity {
height = 0.8f;
mirrored = true;
actionFigur.neuerZustand(loader.getFigur(0), "idle");
actionFigur.neuerZustand(loader.getFigur(1), "lost_sight");
actionFigur.neuerZustand(loader.getFigur(2), "walk");
actionFigur.neuerZustand(loader.getFigur(3), "attack");

View File

@ -7,10 +7,10 @@ import main.entities.player.Player;
public class Spider extends LivingEntity {
private static SheetLoader loader = new SheetLoader("/res/images/spider_sprite_sheet.png", 32, 32, new int[] { 5, 3, 6, 9, 9, 8 });
private static SheetLoader loader = new SheetLoader("/res/images/spider_sprite_sheet.png");
public Spider() {
super(loader.getFigur(0), "idle");
loader.generateFigures(32, 32, new int[] { 5, 3, 6, 9, 9, 8 });
width = 0.7f;
height = 0.8f;
@ -19,7 +19,8 @@ public class Spider extends LivingEntity {
posX = 4f;
posY = 4f;
mirrored = true;
actionFigur.neuerZustand(loader.getFigur(0), "idle");
actionFigur.neuerZustand(loader.getFigur(1), "lost_sight");
actionFigur.neuerZustand(loader.getFigur(2), "walk");
actionFigur.neuerZustand(loader.getFigur(3), "attack");

View File

@ -11,13 +11,12 @@ import main.entities.LivingEntity;
public class Player extends LivingEntity {
private static SheetLoader loader = new SheetLoader("/res/images/player_sprite_sheet.png", 64, 32,
new int[] { 5, 8, 7, 6, 2, 5, 4, 7 });
private static SheetLoader loader = new SheetLoader("/res/images/player_sprite_sheet.png");
private boolean onlyAttackOnceTrigger;
private float range = 1.2f; // die reichweite der Attacke
public Player() {
super(loader.getFigur(0), "idle");
loader.generateFigures(64, 32, new int[] { 5, 8, 7, 6, 2, 5, 4, 7 });
// Entity-Eigenschaften werden festgelegt
width = 0.7f;

View File

@ -6,11 +6,11 @@ import main.maps.Map;
public class TestWorld extends World {
public TestWorld() {
super(5);
super(4);
Map m2 = maps[7].clone();
Map m2 = maps[3].clone();
getCurrentMap().connectDoors(getCurrentMap().leftDoor, m2.leftDoor);
getCurrentMap().addLivingEntity(new Snake());
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB