Hallo, ich habe vor etwa 4 Monaten mit Java Programmierung angefangen und auch bissel rumexperimentiert und bin jetzt bei Grafiken und Animation angekommen. Also mein Problem ist folgendes: Ich habe halt durch google und Tutorials bloss erfahren wie man Images animieren kann aber irgendwie krieg ich das nicht mit meinen eigenen Grafiken hin die ich mit hilfe von AWT oder auch swing versuche zu zeichnen. Ich habe auch einen kleinen Fullscreenwindow gebastelt und das flakern eliminiert mit hilfe eines Tutorial aber eben die Animation eines Grafik objekt das ich selber zeichne in Java bekomme ich irgendwie nicht hilf. Würde mich freuen wenn mir jemand das genauer erklären kann was ich falsch mache.
Hier mein jetztiges Programm:
Also meiner Meinung nach sollte alles funktionieren bis auf die Animationsklasse.
Hier mein jetztiges Programm:
Also meiner Meinung nach sollte alles funktionieren bis auf die Animationsklasse.
Java:
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class Main extends JFrame{
private ScreenManager s;
private Animation a;
public static void main(String[] args) {
DisplayMode dm = new DisplayMode(1024, 768, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
Main m = new Main();
m.run(dm);
}
public void run(DisplayMode dm){
setBackground(Color.BLACK);
setForeground(Color.WHITE);
setFont(new Font("Arial", Font.PLAIN, 24));
s = new ScreenManager();
try{
s.setFullScreen(dm, this);
try{
Thread.sleep(5000);
}catch(Exception ex){}
}finally{
s.restoreScreen();
}
}
public void paint(Graphics g){
Graphics gi = image.getGraphics();
image.getGraphics().drawString("This is gonna be awesome", 200, 200);
gi.drawString("This is gonna be lame", 200, 200);
a = new Animation();
// This is gonna be awesome string wird übermittelt
a.addScene(gi, 250);
// This is gonna be lame string wird übermittelt
a.addScene(gi, 250);
}
}
Java:
import java.awt.*;
import javax.swing.JFrame;
public class ScreenManager {
private GraphicsDevice vc;
public ScreenManager(){
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
vc = env.getDefaultScreenDevice();
}
public void setFullScreen(DisplayMode dm, JFrame window){
window.setUndecorated(true);
window.setResizable(false);
vc.setFullScreenWindow(window);
if(dm != null && vc.isDisplayChangeSupported()){
try{
vc.setDisplayMode(dm);
}catch(Exception e){}
}
}
public Window getFullScreenWindow(){
return vc.getFullScreenWindow();
}
public void restoreScreen(){
Window w = vc.getFullScreenWindow();
if(w != null){
w.dispose();
}
vc.setFullScreenWindow(null);
}
}
Java:
import java.util.ArrayList;
import java.awt.Graphics;
public class Animation {
private ArrayList scenes;
private int sceneIndex;
private long movieTime;
private long totalTime;
public Animation(){
scenes = new ArrayList();
totalTime = 0;
start();
}
public synchronized void addScene(Graphics g, long t){
totalTime += t;
scenes.add(new OneScene(g, totalTime));
}
public synchronized void start(){
movieTime = 0;
sceneIndex = 0;
}
public synchronized void update(long timePassed){
if(scenes.size() > 1){
movieTime += timePassed;
if(movieTime >= totalTime){
movieTime = 0;
sceneIndex = 0;
}
while(movieTime > getScene(sceneIndex).endTime){
sceneIndex++;
}
}
}
public synchronized Graphics getGraphic(){
if(scenes.size() == 0){
return null;
}else{
return getScene(sceneIndex).gr;
}
}
private OneScene getScene(int x){
return(OneScene)scenes.get(x);
}
private class OneScene{
Graphics gr;
long endTime;
public OneScene(Graphics gr, long endTime){
this.gr = gr;
this.endTime = endTime;
}
}
}