Hallo,
ich mache gerade das Spiele Tutorial von Quaxli weil ich das Spiel irgendwie lustig fand und das einfach mal schreiben wollte um noch viele Sachen zu lernen.
Bin gerade bei Seite 20 und nun sollte eigentlich ein Bild angezeigt werden.
Leider macht er dies bei mir nicht.. das Bild wird aber definitiv gefunden, weil wenn er es nicht finden würde dann würde ich Input == null oder so in der Exception erhalten.
Naja ich denke es hängt eher damit zusammen das meine FPS die ich ja am oberen rechten Bildschirmrand 0 ist... ?!
Wieso ?
Ich schreibe einfach mal den Code der bisher 4 Klassen hierrein, auch wenn man den aus dem Tutorial entnehmen kann... vielleicht habe ich ja doch irgendein kleinen Schreibfehler drin....
Vielen Dank!
GamePanel:
Drawable:
Movable:
Sprite:
EDIT:
Falls es hilft: ich habe einen iMac also sollte er die Grafikleistung eigentlich packen, außerdem kann es somit auch nicht an Treibern liegen.
Das fertige Tutorial von Quaxli läuft außerdem auf meinem Mac das heißt es kann nur ein Problem mit meinem Programm geben.
Auf Windows habe ich es auch schon getestet dort ist FPS ebenfalls 0.
ich mache gerade das Spiele Tutorial von Quaxli weil ich das Spiel irgendwie lustig fand und das einfach mal schreiben wollte um noch viele Sachen zu lernen.
Bin gerade bei Seite 20 und nun sollte eigentlich ein Bild angezeigt werden.
Leider macht er dies bei mir nicht.. das Bild wird aber definitiv gefunden, weil wenn er es nicht finden würde dann würde ich Input == null oder so in der Exception erhalten.
Naja ich denke es hängt eher damit zusammen das meine FPS die ich ja am oberen rechten Bildschirmrand 0 ist... ?!
Wieso ?
Ich schreibe einfach mal den Code der bisher 4 Klassen hierrein, auch wenn man den aus dem Tutorial entnehmen kann... vielleicht habe ich ja doch irgendein kleinen Schreibfehler drin....
Vielen Dank!
GamePanel:
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.ListIterator;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GamePanel extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
JFrame f;
long delta; //Zeit des letzten Durchgangs
long fps; //Bildrate
long last; //letzte Systemzeit
Sprite heroObject;
Vector <Sprite> actors;
Vector <Sprite> painter;
public static void main(String[] args) {
new GamePanel(800,600);
}
public GamePanel(int w, int h) {
this.setPreferredSize(new Dimension(w,h));
f = new JFrame("JEscape");
f.setLocation(100,100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setVisible(true);
doInitializations();
Thread th = new Thread(); //Spielschleife in eigenem Thread
th.start();
}
private void doInitializations() { //Methode für "einmalige Aktionen" - Laden von Images etc..
last = System.nanoTime();
BufferedImage[] hero = loadPics("pics/hero.gif",4);
actors = new Vector<Sprite> ();
painter = new Vector<Sprite> ();
heroObject = new Sprite(hero,400,300,100,this);
actors.add(heroObject);
}
private void computeDelta() { //Errechnung des Schleifendurchlaufes
delta = System.nanoTime()-last;
last = System.nanoTime();
fps = ((long) 1e9)/delta;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.drawString("FPS: "+Long.toString(fps), 20, 10);
if(painter!=null) {
for(ListIterator<Sprite> it = painter.listIterator();it.hasNext();) {
Sprite r = it.next();
r.drawObjects(g);
}
}
}
private void checkKeys() {
}
private void doLogic() {
for(ListIterator<Sprite> it = actors.listIterator(); it.hasNext();) {
Sprite r = it.next();
r.doLogic(delta);
}
}
private void moveObjects() {
for(ListIterator<Sprite> it = actors.listIterator(); it.hasNext();) {
Sprite r = it.next();
r.move(delta);
}
}
@Override
public void run() {
while(f.isVisible()) {
computeDelta();
checkKeys();
doLogic();
moveObjects();
cloneVectors();
repaint();
try {
Thread.sleep(10);
} catch(InterruptedException e) {}
}
}
@SuppressWarnings("unchecked")
private void cloneVectors() {
painter = (Vector<Sprite>) actors.clone();
}
private BufferedImage[] loadPics(String path, int pics) {
BufferedImage[] anim = new BufferedImage[pics];
BufferedImage source = null;
URL pic_url = getClass().getClassLoader().getResource(path);
try {
source = ImageIO.read(pic_url);
} catch(IOException e) {}
for(int x=0; x<pics;x++) {
anim[x] = source.getSubimage(x*source.getWidth()/pics, 0, source.getWidth()/pics, source.getHeight());
}
return anim;
}
}
Drawable:
Java:
import java.awt.Graphics;
public interface Drawable {
public void drawObjects(Graphics g);
}
Movable:
Java:
public interface Movable {
public void doLogic(long delta); //Kollisionserkennung
public void move(long delta);//Bewegung
}
Sprite:
Java:
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
public class Sprite extends Rectangle2D.Double implements Drawable, Movable {
private static final long serialVersionUID = 1L;
long delay; //Umschalten der einzelnen Bilder
long animation = 0;
GamePanel parent;
BufferedImage[] pics; //Speichern der Einzelbilder für die Animation
int currentPic = 0;
protected double dx; //horizontale Veränderung
protected double dy; //vertikale Veränderung
public Sprite(BufferedImage[] i, double x, double y, long delay, GamePanel p) {
pics = i;
this.x = x;
this.y = y;
this.delay = delay;
this.width = pics[0].getWidth();
this.height = pics[0].getHeight();
parent = p;
}
public void drawObjects(Graphics g) {
g.drawImage(pics[currentPic], (int) x, (int) y,null);
}
private void computeAnimation() {
currentPic++;
if(currentPic > pics.length) {
currentPic = 0;
}
}
public void doLogic(long delta) {
animation += (delta/1000000);
if(animation > delay) {
animation = 0;
computeAnimation();
}
}
public void move(long delta) {
if(dx != 0) {
x += dx*(delta/1e9);
}
if(dy != 0) {
y += dy*(delta/1e9);
}
}
public double getHorizontalSpeed() {
return dx;
}
public void setHorizontalSpeed(double dx) {
this.dx = dx;
}
public double getVerticalSpeed() {
return dy;
}
public void setVerticalSpeed(double dy) {
this.dy = dy;
}
}
EDIT:
Falls es hilft: ich habe einen iMac also sollte er die Grafikleistung eigentlich packen, außerdem kann es somit auch nicht an Treibern liegen.
Das fertige Tutorial von Quaxli läuft außerdem auf meinem Mac das heißt es kann nur ein Problem mit meinem Programm geben.
Auf Windows habe ich es auch schon getestet dort ist FPS ebenfalls 0.
Zuletzt bearbeitet: