Java-ImageIcon problem
Hej, jag har försökt jobba med en version av det klassiska spelet Space Invaders och stött på ett problem.
Jag försöker använda en bakgrundsbild istället för en helt svart bakgrund samt använda en bild på en alien som fiende i spelet men detta verkar inte fungera.
Bakgrunden fortsätter bara vara svart och fienderna blir osynliga, bilderna jag vill använda läses inte in av programmet vilket lämnar mig oerhört konfunderad.
Skulle vara oerhört tacksam om någon kunde se felet i min kod och hjälpa mig
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.BufferedImage;
public class SpaceInvaders extends JFrame implements Runnable {
public static int WIDTH = 600;
public static int HEIGHT = 400;
private int gameSpeed = 100;//Try 500
AlienArmy army = null;
Ship ship = null;
private boolean paused = false;
private int score = 0;
Graphics offscreen_high;
BufferedImage offscreen;
Image backGroundImage = null;
Image alienImage = null;
public SpaceInvaders(String frameTitle) {
super(frameTitle);
backGroundImage = new javax.swing.ImageIcon("Bakgrund.jpg").getImage();
alienImage = new javax.swing.ImageIcon("alien.jpg").getImage();
ship = new Ship(this);
army = new AlienArmy(ship, this, alienImage);
addMouseListener(ship);
addMouseMotionListener(ship);
offscreen = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);
offscreen_high = offscreen.createGraphics();
setBackground(Color.black);
setSize(WIDTH, HEIGHT);
setVisible(true);
startGame();
}
public void pauseGame(boolean state) {
paused = state;
}
public void hitAlienScore() {
score += 5;
System.out.println("Current Score = "+score);
}
public void shotShip() {
score -= 20;
System.out.println("Current Score = "+score);
}
public void startGame() {
Thread thread = new Thread(this);
thread.start();
}
public void paint(Graphics g) {
offscreen_high.setColor(Color.black);
offscreen_high.fillRect(0,0, WIDTH, HEIGHT);
offscreen_high.drawImage(backGroundImage, 0, 0, this);
army.drawArmy(offscreen_high);
ship.drawShip(offscreen_high);
g.drawImage(offscreen,0,0,this);
}
public void update(Graphics g) {
paint(g);
}
public void moveAliens() {
army.moveArmy();
}
public void run() {
int count = 0;
while(true) {
try {
Thread.sleep(gameSpeed);
} catch(InterruptedException ie) {
}
if (!paused) {
if (count >= 5) {
moveAliens();
count = 0;
}
}
repaint();
count ++;
}
}
public AlienArmy getAlienArmy() {
return army;
}
public static void main(String []args) {
SpaceInvaders invaders = new SpaceInvaders("Space Invaders");
}
}
import java.awt.*;
public class Alien {
public static int ALIEN_HEIGHT = 25;
public static int ALIEN_WIDTH = 15;
private int leftPosition = 0;
private int heightPosition = 0;
private boolean hitState = false;
private Image alienImage = null;
SpaceInvaders spaceInvaders = null;
public Alien(Image ai, SpaceInvaders si) {
alienImage = ai;
spaceInvaders = si;
}
public boolean hasBeenHit() {
return hitState;
}
public boolean hitAlien(int x, int y) {
if (hitState) {
return false;
}
if ((x >= leftPosition) && (x <= (leftPosition+ALIEN_WIDTH))) {
//X is ok, now lets check the Y range
if ((y >= heightPosition) && (y <= (heightPosition+ALIEN_HEIGHT))) {
hitState = true;
return true;
}
}
return false;
}
public void setPosition(int x, int y) {
leftPosition = x;
heightPosition = y;
}
public int getXPos() {
return leftPosition;
}
public int getYPos() {
return heightPosition;
}
public void drawAlien(Graphics g) {
if (!hitState) {
g.drawImage(alienImage, leftPosition, heightPosition, spaceInvaders);
}
}
}