class Zeichner extends Component{
Graphics window;
Graphics doubbleBuffer;
BufferedImage bufferImage;
Image bgpic;
Dimension screenSize;
Thread zeichnerThread;
GraphicalEnvironment environment;
MediaTracker tracker;
Image penta[];
ImageIcon prePenta[];
Zeichner(Graphics g,GraphicalEnvironment ge){
super();
window=g;
environment=ge;
screenSize=Toolkit.getDefaultToolkit().getScreenSize();
zeichnerThread=Thread.currentThread();
tracker=new MediaTracker(this);
initEnvironment();
initPictures();
initBufferImage();
}
public void initEnvironment(){
environment.addMouseListener(
new MouseListener(){
public void mouseClicked(MouseEvent e){
if(e.getButton()==e.BUTTON3)
System.exit(0);
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
});
}
public void initPictures(){
bgpic= new ImageIcon(ClassLoader.getSystemResource("image/bgpic.jpg")).getImage();
this.prepareImage(bgpic, this);
while (((checkImage(bgpic, this) & ALLBITS)!= ALLBITS)) {
try{
// Pause, um dem Ladevorgang keine Ressourcen zu nehmen
zeichnerThread.sleep(5);
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
//Pentagifs initialisieren, damit es aus einer Jar gestartet werrden kann
prePenta= new ImageIcon[10];
for(int i=0;i<prePenta.length;i++){
String nr=""+(1+i);
prePenta[i]=new ImageIcon(ClassLoader.getSystemResource("image/gif/penta"+nr+".GIF"));
}
}
public void loadTracker(){
penta= new Image[10];
// Die Bilder werden einem Image zugewiesen und dem Tracker bekannt gemacht.
// Dieser erhält zusätzlich noch eine ID zu jedem Bild
for(int i=0;i<penta.length;i++){
penta[i]=prePenta[i].getImage();
tracker.addImage(penta[i],i);
}
// Beim Videoplayer soll nun so lange gewartet werden, bis alle Bilder geladen wurden.
// Hierfür definiert die Klasse MediaTracker die Methode waitForID(int id):
for (int i=0; i < penta.length; i++) {
try{
tracker.waitForID(i);
}
catch (InterruptedException e){
System.err.println("Error: "+e);
}
// Fehlerüberprüfung
if(tracker.isErrorID(i)){
Object[] errors = tracker.getErrorsID(i);
for(int n=0;n<errors.length;n++)
System.err.println("Debug: "+errors[n]+" errorslength"+errors.length+"imagenumbr"+i);
}
}
}
public void paintpenta(){
loadTracker();
int x=490, y=300;//Startposition des Gifs
for(int i=0;i<penta.length;i++) {
Point p=environment.getMousePosition();// Mouse Position
if(x!=p.x-25) //Bewegung auf der X-Achse (-25 damit das gif das 50x50 beträgt in zentriert zum stehen kommt)
if(x<p.x-25)
x=x+1;
else
x=x-1;
if(y!=p.y-25) //Bewegung auf der X-Achse
if(y<p.y-25)
y=y+1;
else
y=y-1;
doubbleBuffer.drawImage(penta[i],x,y,this); // Hier wird jedes einzelne Bild des Gifs gezeichnet
sleepd(35,0); // Die 35ms Beeinflussen die abspielgeschwindigkeit des gifs
up2date();
if(i==penta.length-1)
i=0;
}
}
public void initBufferImage()
{
// Initialisierung des DoubleBuffers
if (bufferImage == null){
bufferImage = new BufferedImage(screenSize.width,screenSize.height, BufferedImage.TYPE_INT_RGB);
doubbleBuffer = bufferImage.getGraphics();
}
// Hintergrundbild laden
doubbleBuffer.drawImage(bgpic,0,0,this);
}
public void up2date(){
// Den Buffer auf den Bildschirmausgeben
window.drawImage(bufferImage,0,0,this);
doubbleBuffer.drawImage(bgpic,0,0,this);
}
public void sleepd(int i,int x){
try{
zeichnerThread.sleep(i,x);
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}
class GraphicalEnvironment extends Frame
{
GraphicalEnvironment(){
super("Testzeichnen");
this.setSize(Toolkit.getDefaultToolkit().getScreenSize());
this.setUndecorated(true);
this.setVisible(true);
}
}
class GraphicalEnvironment extends Frame
{
GraphicalEnvironment(){
super("Testzeichnen");
this.setSize(Toolkit.getDefaultToolkit().getScreenSize());
this.setUndecorated(true);
this.setVisible(true);
}
}
public class Starter
{
GraphicalEnvironment ge;
Zeichner d;
Starter(){
ge = new GraphicalEnvironment();
d = new Zeichner(ge.getGraphics(),ge);
}
public void start(){
d.paintpenta();
}
public static void main( String args[] ) throws Exception{
Starter t=new Starter();
t.start();
}
}