Hallo,
bei meinem Programm wird zurzeit nur erkannt ob eine Kollision stattgefunden hat oder nicht.
Im moment ist es einfach so, das der Spieler wenn er in der Luft ist in richtung Boden bewegt wird und nicht durch den Boden fallen kann, da einfach wenn eine Kollision erkannt wird ein boolean auf false gesetzt wird.
Nun möchte ich aber unterscheiden, wo eine Kollision stattgefunden hat.
Also ob eine Hitbox von rechts, links, oben oder unten berührt wurde.
Hier die Klasse, in der eine kollision ermittelt wird:
Wie mache ich das?
bei meinem Programm wird zurzeit nur erkannt ob eine Kollision stattgefunden hat oder nicht.
Im moment ist es einfach so, das der Spieler wenn er in der Luft ist in richtung Boden bewegt wird und nicht durch den Boden fallen kann, da einfach wenn eine Kollision erkannt wird ein boolean auf false gesetzt wird.
Nun möchte ich aber unterscheiden, wo eine Kollision stattgefunden hat.
Also ob eine Hitbox von rechts, links, oben oder unten berührt wurde.
Hier die Klasse, in der eine kollision ermittelt wird:
Java:
package map2;
import java.io.IOException;
//import java.io.IOException;
import org.newdawn.slick.*;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.geom.Shape;
public class Hauptfenster extends BasicGame {
private Editor editor;
private Input in;
private int ypos = 200;
private int xpos = 40;
private SpriteSheet spriteSpieler;
private Animation animationSpieler;
private SpriteSheet spriteSpieler1;
private Animation animationSpieler1;
private int animieren;
protected Shape spielerHitbox;
private boolean kolision = true;
public Hauptfenster() {
super("Game");
}
@Override
public void init(GameContainer gc) throws SlickException {
editor = new Editor ();
try {
editor.load("Level.txt");
} catch (IOException e) {
e.printStackTrace();
}
in = gc.getInput();
spriteSpieler = new SpriteSheet("spieler.png", 40, 40);
animationSpieler = new Animation(spriteSpieler, 100);
spriteSpieler1 = new SpriteSheet("Rauchen.png", 40, 40);
animationSpieler1 = new Animation(spriteSpieler1, 1);
}
@Override
public void update(GameContainer gc, int arg1) throws SlickException {
if(in.isKeyDown(in.KEY_W)){
ypos -= 2;
animieren = 1;
}
else if(in.isKeyDown(in.KEY_S)){
ypos += 1;
animieren = 1;
}
else if(in.isKeyDown(in.KEY_D)){
xpos += 1;
animieren = 1;
}
else if(in.isKeyDown(in.KEY_A)){
xpos -= 1;
animieren = 1;
}
else
animieren = 0;
for(int i=0; i<20; i++){
for(int j=0; j<20; j++){
if(editor.getarrayHitboxen()[i][j] != null){
if(editor.getarrayHitboxen()[i][j].intersects (spielerHitbox)){
kolision=false;
}
}
}
}
if(kolision == true){
ypos++;
}
else{
kolision = true;
}
}
@Override
public void render(GameContainer gc, Graphics g) throws SlickException {
editor.render(g);
spielerHitbox = new Rectangle (xpos, ypos, 25, 40);
g.setColor(Color.red);
g.draw(spielerHitbox);
if(animieren == 1){
animationSpieler.draw(xpos, ypos);
}
if(animieren == 0){
animationSpieler1.draw(xpos, ypos);
}
}
public static void main(String[] args) throws SlickException {
AppGameContainer container = new AppGameContainer(new Hauptfenster());
container.setDisplayMode(500, 500, false);
container.setShowFPS(true);
container.setVSync(true);
container.start();
}
}
Wie mache ich das?