Hallo ihr,
sorry dass ich mal wieder ein Problem habe welches ich seit 3 Tagen nicht gelöst bekomme. Mittlerweile weiß ich auch nicht mehr wo ich ansetzen soll. Ich bitte euch darum um ein paar rettende Ideen.
Ich bastel immernoch an meinem Mini-Spielchen weiter, jedoch war mir das alles zu statisch und so wollte ich ein wenig Bewegung in die Sache bringen und mit scrollenden Background ein wenig Tiefe simulieren.
Das klappt soweit für die erste Version sehr gut, jedoch haben sich Probleme ergeben an welche ich vorher nicht gedacht habe.
Hier mal zum testen was ich mit der simulierten Tiefe und meinem Problem meine: eLapse_test_01.jar (Mit "Enter" könnt ihr starten)
Das Problem ist, dass im Grunde nur suggeriert wird sich in einem größeren Raum zu befinden, sobald aber andere Objekte dazukommen bleiben die logischerweise mit in meinem Frame und bewegen sich mit mir. Logisch da im Prinzip ja nur eine Ebene vorhanden ist.
Also wollte ich mir eine Art "Viewport" basteln und dazu layeredPane verwenden, wodurch ich mehrere Ebenen haben könnte und gleichzeitig auch das Level wirklich vergrößern könnte um mich dann nur noch mit meinem Port über den Hintergrund und die tatsächlichen Koordinaten scrolle.
Jedoch zeigen sich nun neue Probleme und ich weiss nichtmal ob ich das so richtig mache. Hier mal meine auf´s Minimum reduzierte Test-Klasse:
1. Problem:
Sobald ich in der Methode paint(g) ein zweites Objekt hinzufüge flackert dieses. Zu sehen auch hier: eLapse_problem.jar
Wenn ich "super.paint(g);" dazunehme flackert sogar alles. Woran liegt das und wie kann ich das umgehen?
2. Problem:
Wie kann ich gezielt über die Methode paint(g) auf die verschiedenen Layer Objekte malen? Woran erkenne ich dass sie wirklich auf der gewünschten Ebene gezeichnet werden? Ist da mein Ansatz richtig? Ich habe das Gefühl dass die Objekte zwar da sind aber nicht auf den gewünschten Layern.
Zum Testen hier nochmal der Source mit Bildern: Source
Ich danke schon einmal für eure Mühe das lesen und hoffe auf ein paar gute Ratschläge für einen motivierten Anfänger.
Grüße Maik
sorry dass ich mal wieder ein Problem habe welches ich seit 3 Tagen nicht gelöst bekomme. Mittlerweile weiß ich auch nicht mehr wo ich ansetzen soll. Ich bitte euch darum um ein paar rettende Ideen.
Ich bastel immernoch an meinem Mini-Spielchen weiter, jedoch war mir das alles zu statisch und so wollte ich ein wenig Bewegung in die Sache bringen und mit scrollenden Background ein wenig Tiefe simulieren.
Das klappt soweit für die erste Version sehr gut, jedoch haben sich Probleme ergeben an welche ich vorher nicht gedacht habe.
Hier mal zum testen was ich mit der simulierten Tiefe und meinem Problem meine: eLapse_test_01.jar (Mit "Enter" könnt ihr starten)
Das Problem ist, dass im Grunde nur suggeriert wird sich in einem größeren Raum zu befinden, sobald aber andere Objekte dazukommen bleiben die logischerweise mit in meinem Frame und bewegen sich mit mir. Logisch da im Prinzip ja nur eine Ebene vorhanden ist.
Also wollte ich mir eine Art "Viewport" basteln und dazu layeredPane verwenden, wodurch ich mehrere Ebenen haben könnte und gleichzeitig auch das Level wirklich vergrößern könnte um mich dann nur noch mit meinem Port über den Hintergrund und die tatsächlichen Koordinaten scrolle.
Jedoch zeigen sich nun neue Probleme und ich weiss nichtmal ob ich das so richtig mache. Hier mal meine auf´s Minimum reduzierte Test-Klasse:
Java:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class GameMainTest extends JFrame implements Runnable{
private static final long serialVersionUID = 1L;
JLayeredPane viewport;
JPanel backgroundPanel, actionPanel;
public static Integer LAYER_ONE = JLayeredPane.FRAME_CONTENT_LAYER + 1;
public static Integer LAYER_TWO = LAYER_ONE + 1;
Image background = loadTextures("textures/backgrounds/background.png");
Image logo = loadTextures("textures/logo/logo.png");
public static void main(final String[] args){
new GameMainTest(800, 600);
}
public GameMainTest(int w, int h) {
super("eLapse");
setSize(w, h);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
backgroundPanel = new JPanel();
backgroundPanel.setBounds(0, 0, 400, 300);
actionPanel = new JPanel();
actionPanel.setBounds(200, 150, 400, 300);
viewport = getLayeredPane();
viewport.add(backgroundPanel, LAYER_ONE, 0);
viewport.add(actionPanel, LAYER_TWO, 0);
Thread th = new Thread(this);
th.setName("MainGameThread");
th.start();
}
@Override
public void run() {
while (super.isVisible()) {
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
}
}
public void paint(Graphics g){//FIXME
//super.paint(g);
g.drawImage(background, 0, 0, backgroundPanel);
g.drawImage(logo, 100, 100, actionPanel);
}
private Image loadTextures(String path) {
java.net.URL pic_url = getClass().getClassLoader().getResource(path);
BufferedImage image = null;
try {
image = ImageIO.read(pic_url);
} catch (IOException e) {
}
return image;
}
}
1. Problem:
Sobald ich in der Methode paint(g) ein zweites Objekt hinzufüge flackert dieses. Zu sehen auch hier: eLapse_problem.jar
Wenn ich "super.paint(g);" dazunehme flackert sogar alles. Woran liegt das und wie kann ich das umgehen?
2. Problem:
Wie kann ich gezielt über die Methode paint(g) auf die verschiedenen Layer Objekte malen? Woran erkenne ich dass sie wirklich auf der gewünschten Ebene gezeichnet werden? Ist da mein Ansatz richtig? Ich habe das Gefühl dass die Objekte zwar da sind aber nicht auf den gewünschten Layern.
Zum Testen hier nochmal der Source mit Bildern: Source
Ich danke schon einmal für eure Mühe das lesen und hoffe auf ein paar gute Ratschläge für einen motivierten Anfänger.
Grüße Maik
Zuletzt bearbeitet: