Hallo,
ich bin grad dabei eine Art 2D-Spiele-Engine zu erstellen.
Ich habe keine Exception oder sonst was, es wird nur meine paintComponent Methode nicht aufgerufen?!
Habe schon was ausgeben wollen, passiert aber nichts.
Da ich noch am Anfang bin kann ich ja mal meine Klassen zeigen...
Und wenn ihr schon dabei seid, könntet ihr mir ja vllt. ein paar andere Tipps noch geben.
Vielen Dank
Main(test):
Window:
Display:
Object2D:
List:
Reader:
ich bin grad dabei eine Art 2D-Spiele-Engine zu erstellen.
Ich habe keine Exception oder sonst was, es wird nur meine paintComponent Methode nicht aufgerufen?!
Habe schon was ausgeben wollen, passiert aber nichts.
Da ich noch am Anfang bin kann ich ja mal meine Klassen zeigen...
Und wenn ihr schon dabei seid, könntet ihr mir ja vllt. ein paar andere Tipps noch geben.
Vielen Dank
Main(test):
Java:
package Test;
import com.engine.Object2D;
import com.engine.Reader;
import com.engine.Window;
public class Main {
public static void main(String[] args) {
Window window = new Window("2D Game Engine", 800, 600);
window.setIcon(Reader.getImage("ICON.png"));
Object2D o = new Object2D(1);
o.setPoint(50, 50);
o.setRectangle(100, 100);
window.add(o);
window.run();
}
}
Window:
Java:
package com.engine;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferStrategy;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Window {
private JFrame window;
private boolean isRunning = false;
private Display display;
private BufferStrategy BUFFER_STRATEGY;
public Window(String TITLE, int WIDTH, int HEIGHT) {
window = new JFrame(TITLE);
window.setSize(WIDTH, HEIGHT);
window.setLocationRelativeTo(null);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
window.setLayout(null);
display = new Display(WIDTH, HEIGHT);
window.add(display.getDisplay());
}
public void setDisplayVisible(boolean b) {
display.setVisible(b);
}
public void run() {
window.setVisible(true);
try {
SwingUtilities.invokeAndWait (
new Runnable() {
public void run() {
window.createBufferStrategy(2);
BUFFER_STRATEGY = window.getBufferStrategy();
}
});
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
display.setVisible(true);
isRunning = true;
while(isRunning) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
} repaint();
}
}
public void add(Object2D object) {
display.setObject(object);
}
private void repaint() {
Graphics g = BUFFER_STRATEGY.getDrawGraphics();
window.paintAll(g);
g.dispose();
BUFFER_STRATEGY.show();
}
public void stop() {
window.setVisible(false);
isRunning = false;
}
public void destroy() {
window.dispose();
isRunning = false;
}
public void setIcon(Image ICON) {
window.setIconImage(ICON);
}
public Image getIcon() {
return window.getIconImage();
}
public boolean isRunning() {
return isRunning;
}
}
Display:
Java:
package com.engine;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JPanel;
public class Display {
private JPanel display;
private static List<Object2D> object = new List<Object2D>(new Object2D[256]);
public Display(int WIDTH, int HEIGHT) {
display = new JPanel();
display.setSize(WIDTH, HEIGHT);
display.setVisible(false);
}
public void setVisible(boolean b) {
display.setVisible(b);
}
public JPanel getDisplay() {
return display;
}
public void setObject(Object2D object) {
Display.object.add(object);
}
public static void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
for(int i = 0; i < object.size(); i++) {
Object2D o = object.get(i);
if(o.getID() == 1) {
Rectangle rec = o.getRectangleObject();
g.drawRect(rec.x, rec.y, rec.width, rec.height);
}
}
}
}
Object2D:
Java:
package com.engine;
import java.awt.Rectangle;
public class Object2D {
private int WIDTH, HEIGHT, X, Y, ID;
public Object2D(int ID) {
this.ID = ID;
}
public void setRectangle(int WIDTH, int HEIGHT) {
this.WIDTH = WIDTH;
this.HEIGHT = HEIGHT;
}
public void setPoint(int X, int Y) {
this.X = X;
this.Y = Y;
}
public Rectangle getRectangleObject() {
return new Rectangle(X, Y, WIDTH, HEIGHT);
}
public int getID() {
return ID;
}
}
List:
Java:
package com.engine;
public class List<O> {
private O[] os;
private int size = 0;
public List(O[] os) {
this.os = os;
}
public int size() {
return size;
}
@SuppressWarnings("unchecked")
public void add(Object o) {
os[size] = (O) o;size++;
}
public O get(int index) {
return os[index];
}
@SuppressWarnings("unchecked")
public void remove(int index) {
Object[] o = new Object[os.length-1];
int f = 0; size-=1;
for(int i = 0; i < os.length-1; i++) {
if(i == index) {
f+=1;
}
o[i] = (Object)os[i+f];
}
os = (O[]) o;
}
}
Reader:
Java:
package com.engine;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Reader {
public static BufferedImage getImage(String name) {
BufferedImage img = null;
try {
img = ImageIO.read(Reader.class.getClassLoader().getResourceAsStream("res/textures/" + name));
} catch (IOException e) {
e.printStackTrace();
}
return img;
}
}