Hi,
brauche unbedingt Hilfe bei meinem Programm, es hat soweit keine Fehler mehr, aba jetzt sagt er mir, dass die Referenz des Sprites (ship.png) nicht gefunden werden kann. Ich selbst beschäftige mich jetzt seit einem Jahr mit Java und das auch nicht sonderlich doll, aba ich versuch mein Bestes. Ich mache gerade Abitur und soll in Info ein Spiel programmieren.
Ich fühle mich jetzt son bisschen hilflos bei manchen Dingen , konnte aba soweit alle Probleme lösen . Jetzt is es soweit fertig will aba einfach nicht starten. Nun suche ich nach Hilfe, weil ich schon seit 1 Woche versuche das Problem zu lösen, bekommen es aba einfach nicht hin.
Hier mal der Code der Hauptklasse:
[HIGHLIGHT="Java"]import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferStrategy;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Game extends Canvas {
private static final long serialVersionUID = 1L;
private BufferStrategy strategy;
private boolean gameRunning = true;
private ArrayList<Entity> entities = new ArrayList<Entity>();
private ArrayList<Entity> removeList = new ArrayList<Entity>();
private Entity ship;
private double moveSpeed = 300;
private long lastFire = 0;
private long firingInterval = 300;
private int alienCount;
private String message = "";
private boolean waitingForKeyPress = true;
private boolean leftPressed = false;
private boolean rightPressed = false;
private boolean firePressed = false;
private boolean logicRequiredThisLoop = false;
public Game() {
JFrame container = new JFrame("Invasion Of The Celestians");
JPanel panel = (JPanel) container.getContentPane();
panel.setPreferredSize(new Dimension(800,600));
panel.setLayout(null);
setBounds(0,0,800,600);
panel.add(this);
setIgnoreRepaint(true);
container.pack();
container.setResizable(false);
container.setVisible(true);
container.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
addKeyListener(new KeyInputHandler());
requestFocus();
createBufferStrategy(2);
strategy = getBufferStrategy();
initEntities();
}
private void startGame() {
entities.clear();
initEntities();
leftPressed = false;
rightPressed = false;
firePressed = false;
}
private void initEntities() {
ship = new Spieler(this,"pics/ship.png",370,550);
entities.add(ship);
alienCount = 0;
for (int row=0;row<5;row++) {
for (int x=0;x<12;x++) {
Entity alien = new Alien(this,"pics/alien1.gif",100+(x*50),(50)+row*30);
entities.add(alien);
alienCount++;
}
}
}
public void updateLogic() {
logicRequiredThisLoop = true;
}
public void removeEntity(Entity entity) {
removeList.add(entity);
}
public void notifyDeath() {
message = "Oh nein! Sie haben dich nochmal?";
waitingForKeyPress = true;
}
public void notifyWin() {
message = "Super! Du hast gewonnen";
waitingForKeyPress = true;
}
public void notifyAlienKilled() {
alienCount--;
if (alienCount == 0) {
notifyWin();
}
for (int i=0;i<entities.size();i++) {
Entity entity = (Entity) entities.get(i);
if (entity instanceof Alien) {
entity.setHorizontalMovement(entity.getHorizontalMovement() * 1.5);
}
}
}
public void tryToFire() {
if (System.currentTimeMillis() - lastFire < firingInterval) {
return;
}
lastFire = System.currentTimeMillis();
Shot shot = new Shot(this,"pics/shot1.png",ship.getX()+10,ship.getY()-30);
entities.add(shot);
}
public void gameLoop() {
long lastLoopTime = System.currentTimeMillis();
while (gameRunning) {
long delta = System.currentTimeMillis() - lastLoopTime;
lastLoopTime = System.currentTimeMillis();
Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0,0,800,600);
if (!waitingForKeyPress) {
for (int i=0;i<entities.size();i++) {
Entity entity = (Entity) entities.get(i);
entity.move(delta);
}
}
for (int i=0;i<entities.size();i++) {
Entity entity = (Entity) entities.get(i);
entity.draw(g);
}
for (int p=0;p<entities.size();p++) {
for (int s=p+1;s<entities.size();s++) {
Entity ich = (Entity) entities.get(p);
Entity er = (Entity) entities.get(s);
if (ich.collidesWith(er)) {
ich.collidedWith(er);
er.collidedWith(ich);
}
}
}
entities.removeAll(removeList);
removeList.clear();
if (logicRequiredThisLoop) {
for (int i=0;i<entities.size();i++) {
Entity entity = (Entity) entities.get(i);
entity.doLogic();
}
logicRequiredThisLoop = false;
}
if (waitingForKeyPress) {
g.setColor(Color.white);
g.drawString(message,(800-g.getFontMetrics().stringWidth(message))/2,250);
g.drawString("Bitte eine Taste drücken!",(800-g.getFontMetrics().stringWidth("Bitte eine Taste drücken!"))/2,300);
}
g.dispose();
strategy.show();
ship.setHorizontalMovement(0);
if ((leftPressed) && (!rightPressed)) {
ship.setHorizontalMovement(-moveSpeed);
} else if ((rightPressed) && (!leftPressed)) {
ship.setHorizontalMovement(moveSpeed);
}
if (firePressed) {
tryToFire();
}
try { Thread.sleep(10); } catch (Exception e) {}
}
}
private class KeyInputHandler extends KeyAdapter {
private int pressCount = 1;
public void keyPressed(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
leftPressed = true;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
rightPressed = true;
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
firePressed = true;
}
}
public void keyReleased(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
leftPressed = false;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
rightPressed = false;
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
firePressed = false;
}
}
public void keyTyped(KeyEvent e) {
if (waitingForKeyPress) {
if (pressCount == 1) {
waitingForKeyPress = false;
startGame();
pressCount = 0;
} else {
pressCount++;
}
}
if (e.getKeyChar() == 27) {
System.exit(0);
}
}
}
public static void main(String argv[]) {
Game g =new Game();
g.gameLoop();
}
}
[/HIGHLIGHT]
dann noch die Klasse der Hauptfigur:
[HIGHLIGHT="Java"]
public class Spieler extends Entity
{
private Game Spiel;
public Spieler(Game Spiel,String ref,int x,int y)
{
super(ref,x,y);
this.Spiel = Spiel;
}
public void move(long delta)
{
if ((dx < 0) && (x < 10))
{
return;
}
if ((dx > 0) && (x > 750))
{
return;
}
super.move(delta);
}
public void collidedWith(Entity other)
{
if (other instanceof Alien)
{
Spiel.notifyDeath();
}
}
}
[/HIGHLIGHT]
und dann noch die Entity:
[HIGHLIGHT="Java"]
import java.awt.Graphics;
import java.awt.Rectangle;
public abstract class Entity
{
protected double x;
protected double y;
protected Sprite sprite;
protected double dx;
protected double dy;
private Rectangle ich = new Rectangle();
private Rectangle er = new Rectangle();
public Entity(String ref,int x,int y)
{
this.sprite = SpriteStore.get().getSprite(ref);
this.x = x;
this.y = y;
}
public void move(long delta)
{
x += (delta * dx) / 1000;
y += (delta * dy) / 1000;
}
public void setHorizontalMovement(double dx)
{
this.dx = dx;
}
public void setVerticalMovement(double dy)
{
this.dy = dy;
}
public double getHorizontalMovement()
{
return dx;
}
public double getVerticalMovement()
{
return dy;
}
public void draw(Graphics g)
{
sprite.draw(g,(int) x,(int) y);
}
public void doLogic()
{
}
public int getX()
{
return (int) x;
}
public int getY()
{
return (int) y;
}
public boolean collidesWith(Entity other)
{
ich.setBounds((int) x,(int) y,sprite.getWidth(),sprite.getHeight());
er.setBounds((int) other.x,(int) other.y,other.sprite.getWidth(),other.sprite.getHeight());
return ich.intersects(er);
}
public abstract void collidedWith(Entity other);
}
[/HIGHLIGHT]
vielen Dank schon mal im Voraus
mfg g0d3x
brauche unbedingt Hilfe bei meinem Programm, es hat soweit keine Fehler mehr, aba jetzt sagt er mir, dass die Referenz des Sprites (ship.png) nicht gefunden werden kann. Ich selbst beschäftige mich jetzt seit einem Jahr mit Java und das auch nicht sonderlich doll, aba ich versuch mein Bestes. Ich mache gerade Abitur und soll in Info ein Spiel programmieren.
Ich fühle mich jetzt son bisschen hilflos bei manchen Dingen , konnte aba soweit alle Probleme lösen . Jetzt is es soweit fertig will aba einfach nicht starten. Nun suche ich nach Hilfe, weil ich schon seit 1 Woche versuche das Problem zu lösen, bekommen es aba einfach nicht hin.
Hier mal der Code der Hauptklasse:
[HIGHLIGHT="Java"]import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferStrategy;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Game extends Canvas {
private static final long serialVersionUID = 1L;
private BufferStrategy strategy;
private boolean gameRunning = true;
private ArrayList<Entity> entities = new ArrayList<Entity>();
private ArrayList<Entity> removeList = new ArrayList<Entity>();
private Entity ship;
private double moveSpeed = 300;
private long lastFire = 0;
private long firingInterval = 300;
private int alienCount;
private String message = "";
private boolean waitingForKeyPress = true;
private boolean leftPressed = false;
private boolean rightPressed = false;
private boolean firePressed = false;
private boolean logicRequiredThisLoop = false;
public Game() {
JFrame container = new JFrame("Invasion Of The Celestians");
JPanel panel = (JPanel) container.getContentPane();
panel.setPreferredSize(new Dimension(800,600));
panel.setLayout(null);
setBounds(0,0,800,600);
panel.add(this);
setIgnoreRepaint(true);
container.pack();
container.setResizable(false);
container.setVisible(true);
container.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
addKeyListener(new KeyInputHandler());
requestFocus();
createBufferStrategy(2);
strategy = getBufferStrategy();
initEntities();
}
private void startGame() {
entities.clear();
initEntities();
leftPressed = false;
rightPressed = false;
firePressed = false;
}
private void initEntities() {
ship = new Spieler(this,"pics/ship.png",370,550);
entities.add(ship);
alienCount = 0;
for (int row=0;row<5;row++) {
for (int x=0;x<12;x++) {
Entity alien = new Alien(this,"pics/alien1.gif",100+(x*50),(50)+row*30);
entities.add(alien);
alienCount++;
}
}
}
public void updateLogic() {
logicRequiredThisLoop = true;
}
public void removeEntity(Entity entity) {
removeList.add(entity);
}
public void notifyDeath() {
message = "Oh nein! Sie haben dich nochmal?";
waitingForKeyPress = true;
}
public void notifyWin() {
message = "Super! Du hast gewonnen";
waitingForKeyPress = true;
}
public void notifyAlienKilled() {
alienCount--;
if (alienCount == 0) {
notifyWin();
}
for (int i=0;i<entities.size();i++) {
Entity entity = (Entity) entities.get(i);
if (entity instanceof Alien) {
entity.setHorizontalMovement(entity.getHorizontalMovement() * 1.5);
}
}
}
public void tryToFire() {
if (System.currentTimeMillis() - lastFire < firingInterval) {
return;
}
lastFire = System.currentTimeMillis();
Shot shot = new Shot(this,"pics/shot1.png",ship.getX()+10,ship.getY()-30);
entities.add(shot);
}
public void gameLoop() {
long lastLoopTime = System.currentTimeMillis();
while (gameRunning) {
long delta = System.currentTimeMillis() - lastLoopTime;
lastLoopTime = System.currentTimeMillis();
Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0,0,800,600);
if (!waitingForKeyPress) {
for (int i=0;i<entities.size();i++) {
Entity entity = (Entity) entities.get(i);
entity.move(delta);
}
}
for (int i=0;i<entities.size();i++) {
Entity entity = (Entity) entities.get(i);
entity.draw(g);
}
for (int p=0;p<entities.size();p++) {
for (int s=p+1;s<entities.size();s++) {
Entity ich = (Entity) entities.get(p);
Entity er = (Entity) entities.get(s);
if (ich.collidesWith(er)) {
ich.collidedWith(er);
er.collidedWith(ich);
}
}
}
entities.removeAll(removeList);
removeList.clear();
if (logicRequiredThisLoop) {
for (int i=0;i<entities.size();i++) {
Entity entity = (Entity) entities.get(i);
entity.doLogic();
}
logicRequiredThisLoop = false;
}
if (waitingForKeyPress) {
g.setColor(Color.white);
g.drawString(message,(800-g.getFontMetrics().stringWidth(message))/2,250);
g.drawString("Bitte eine Taste drücken!",(800-g.getFontMetrics().stringWidth("Bitte eine Taste drücken!"))/2,300);
}
g.dispose();
strategy.show();
ship.setHorizontalMovement(0);
if ((leftPressed) && (!rightPressed)) {
ship.setHorizontalMovement(-moveSpeed);
} else if ((rightPressed) && (!leftPressed)) {
ship.setHorizontalMovement(moveSpeed);
}
if (firePressed) {
tryToFire();
}
try { Thread.sleep(10); } catch (Exception e) {}
}
}
private class KeyInputHandler extends KeyAdapter {
private int pressCount = 1;
public void keyPressed(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
leftPressed = true;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
rightPressed = true;
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
firePressed = true;
}
}
public void keyReleased(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
leftPressed = false;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
rightPressed = false;
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
firePressed = false;
}
}
public void keyTyped(KeyEvent e) {
if (waitingForKeyPress) {
if (pressCount == 1) {
waitingForKeyPress = false;
startGame();
pressCount = 0;
} else {
pressCount++;
}
}
if (e.getKeyChar() == 27) {
System.exit(0);
}
}
}
public static void main(String argv[]) {
Game g =new Game();
g.gameLoop();
}
}
[/HIGHLIGHT]
dann noch die Klasse der Hauptfigur:
[HIGHLIGHT="Java"]
public class Spieler extends Entity
{
private Game Spiel;
public Spieler(Game Spiel,String ref,int x,int y)
{
super(ref,x,y);
this.Spiel = Spiel;
}
public void move(long delta)
{
if ((dx < 0) && (x < 10))
{
return;
}
if ((dx > 0) && (x > 750))
{
return;
}
super.move(delta);
}
public void collidedWith(Entity other)
{
if (other instanceof Alien)
{
Spiel.notifyDeath();
}
}
}
[/HIGHLIGHT]
und dann noch die Entity:
[HIGHLIGHT="Java"]
import java.awt.Graphics;
import java.awt.Rectangle;
public abstract class Entity
{
protected double x;
protected double y;
protected Sprite sprite;
protected double dx;
protected double dy;
private Rectangle ich = new Rectangle();
private Rectangle er = new Rectangle();
public Entity(String ref,int x,int y)
{
this.sprite = SpriteStore.get().getSprite(ref);
this.x = x;
this.y = y;
}
public void move(long delta)
{
x += (delta * dx) / 1000;
y += (delta * dy) / 1000;
}
public void setHorizontalMovement(double dx)
{
this.dx = dx;
}
public void setVerticalMovement(double dy)
{
this.dy = dy;
}
public double getHorizontalMovement()
{
return dx;
}
public double getVerticalMovement()
{
return dy;
}
public void draw(Graphics g)
{
sprite.draw(g,(int) x,(int) y);
}
public void doLogic()
{
}
public int getX()
{
return (int) x;
}
public int getY()
{
return (int) y;
}
public boolean collidesWith(Entity other)
{
ich.setBounds((int) x,(int) y,sprite.getWidth(),sprite.getHeight());
er.setBounds((int) other.x,(int) other.y,other.sprite.getWidth(),other.sprite.getHeight());
return ich.intersects(er);
}
public abstract void collidedWith(Entity other);
}
[/HIGHLIGHT]
vielen Dank schon mal im Voraus
mfg g0d3x