Animation

matthew

Mitglied
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.

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;
		}
	}
}
 

Steev

Bekanntes Mitglied
Hi matthew ,

da sind noch ein paar Böcke drin:
1. Wieso um alles in der Welt erstellst du pro zeichnung ein neues Animationsobjekt??? Das sind ja bis zu 100 Objekte pro Sekunden!!!
2. Was für eine Funktion hat die Animationsklasse??? Man kann Grafikobjekte nicht speichern, Grafikobjekte sind flüchtig und müssen per Referenz an untergeordnete Methoden weitergeleitet werden.

Unter diesem Link findest du ein kleines KSKB zum ansehen.
http://www.java-forum.org/attachmen...355-frage-huetchenspielprogrammierung-hat.zip
 

matthew

Mitglied
Also erstmal danke für die schnelle Antwort. Ich habe mir dieses Hatspiel mal angesehen und studiert und auch die Seite über zeichnen mit swing und awt. Dabei bin ich zu folgendem Ergebnis gekommen und komme hier nicht mehr weiter, ich habe es nach der vorlage von dem Hatspiel aufgebaut aber irgendwie bewegt sich das Graphics objekt nur hin und her aber nicht flüssig von Punkt A zu Punkt B:

Java:
import java.awt.Color;
import java.awt.Graphics;

public class Note {
	
	
	private static final long serialVersionUID = 1L;
	private int           x          = 600;
    private int           rand         = 200;
    
    public int getX() {
        return x;
    }

    public void paint(Graphics g) {
           g.setColor(Color.BLACK);
           g.fillOval(x, 200, 30, 40);
    	
    }

    public int getRand() {
        return rand;
    }

    public void setX(int x) {
        this.x = x;
    }
}

Java:
import java.awt.Graphics;
import javax.swing.JPanel;


public class NotenGamePanel extends JPanel implements Runnable {
	private static final long serialVersionUID  = 3417260400929981558L;


    private int  SPEED             = 3;
    private boolean EndLoop = false;
    private Note               note = new Note();

    public NotenGamePanel() throws Exception {
        new Thread(this).start();

    }

    public void run() {
// ich weiss es ist momentan noch eine endlosschleife sollte es aber nicht beeinflussen
    	while (!EndLoop) {
    		
        try {
        	 update();
         	repaint();
        	
            Thread.sleep(10);
        } catch (Exception e) {
        }
    }
    }

    private void update() {
		if (note.getX() - SPEED >= note.getRand()){
			note.setX(getX() - SPEED);
		} else {
			note.setX(600);
		}
	}
    
    
    public void paintComponent(Graphics g){
    	super.paintComponent(g);
    	
    	note.paint(g);
    }
}

Java:
import java.awt.Dimension;

import java.awt.Toolkit;
import javax.swing.JFrame;



public class NotenGame extends JFrame {
	public static void main(String[] args) {
        NotenGame game = new NotenGame("NoteGame");
        game.setVisible(true);
    }


private static final long serialVersionUID = 8013474420287224267L;

private NotenGamePanel      ga               = null;

public NotenGame(String title) {
    super(title);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    Toolkit tk = Toolkit.getDefaultToolkit();
    Dimension d = tk.getScreenSize();
    setSize(640, 480);
    setLocation((d.width - getWidth()) / 2, (d.height - getHeight()) / 2);
    try {
        ga = new NotenGamePanel();
        add(ga);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}
 
Zuletzt bearbeitet:

matthew

Mitglied
Achso ja jetzt funktioniert es. Ich hasse so kleine flüchtigkeits Fehler und dann werden sie nichtmal angezeigt. xD Habe die ganze Zeit bei meiner paint Methode gesucht. :oops:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Minecraft Casino EinarmigerBandit Animation Spiele- und Multimedia-Programmierung 5
B Animation Spiele- und Multimedia-Programmierung 4
Meeresgott Morph Targets und Skeleton Animation Spiele- und Multimedia-Programmierung 2
J (Libgdx) animation nur einmal in einem Event aufrufen Spiele- und Multimedia-Programmierung 1
N Animation funktioniert icht wie sie soll Spiele- und Multimedia-Programmierung 10
K Animation fliegendes JLabel Spiele- und Multimedia-Programmierung 1
R [LWJGL] Skeletal Animation Spiele- und Multimedia-Programmierung 5
F [LWJGL] Skeletal Animation 3D Spiele- und Multimedia-Programmierung 1
R Animation mit Interpolator starten wenn Key pressed Spiele- und Multimedia-Programmierung 0
kaoZ Animation in eigenen Thread auslagern..... Spiele- und Multimedia-Programmierung 1
S Animation zieht "Spur" hinter sich her Spiele- und Multimedia-Programmierung 2
H [ANIMATION] Hintergrundbild nur einmal zeichnen Spiele- und Multimedia-Programmierung 3
A LwJGL - Animation Stockt Spiele- und Multimedia-Programmierung 5
0 Sprung Animation Spiele- und Multimedia-Programmierung 10
M [Java3D] Animation von mehreren Objekten Spiele- und Multimedia-Programmierung 7
C Java3D Interaktion während Animation Spiele- und Multimedia-Programmierung 3
StrikeTom .gif animation als image abspielen Spiele- und Multimedia-Programmierung 2
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
baddestpoet Animation startet bei gedrückter Taste immer wieder von vorn Spiele- und Multimedia-Programmierung 12
aze Animation an TransformGroup anpassen Spiele- und Multimedia-Programmierung 5
S Animation mit repaint Spiele- und Multimedia-Programmierung 2
K "Animation" funktioniert nur bedingt. Spiele- und Multimedia-Programmierung 8
W Flüssige Animation Spiele- und Multimedia-Programmierung 8
B Animation durch Button auslösen Spiele- und Multimedia-Programmierung 2
J Animation hinter transparentem Bild auf der GlassPane Spiele- und Multimedia-Programmierung 6
D Problem mit Animation bei Little Fighter Spiele- und Multimedia-Programmierung 5
R Double Buffering in Animation ich bekomms einfach nicht hin? Spiele- und Multimedia-Programmierung 3
G GL4Java Animation erstellen Spiele- und Multimedia-Programmierung 2
T Geschwindigkeit einer Animation aendern Spiele- und Multimedia-Programmierung 6
S 3ds animation einbinden Spiele- und Multimedia-Programmierung 3
A Animation mit jmonkeyengine Spiele- und Multimedia-Programmierung 10
S Gif Animation aus Prog heraus erstellen Spiele- und Multimedia-Programmierung 11

Ähnliche Java Themen


Oben