Perspektive animiert

Das ist ein Ausbau des Persketiven Applets, den ich noch gamcht habe, weil ich Zeit hatte (schöne Begründung, gell ;) )



Code

Bitte beachten, für die Animation habe ich hier auf eine Klasse meines Infromatiklehrers zurück. Ich muss ihn zuerst fragen ob ich die zum downladen hinstellen kann.

import java.awt.*;
import java.applet.*;

public class PerspektiveAnim extends Anim
{
    
    final Color cBg = Color.black; // Hintergrundfrabe
    final Color cFg = Color.red; // Vordergrundfarbe
    
    int xs = 0; // Start des Steckungszentrums
    int ys = 0; // Wird in der Initmethode gefuellt
    
    int seite = 10; // Seitenlnge der kleinesten Figur
    int startvx = -130; // Verschiebungsstrecke zum kleinesten
     int startvy = 30; // Quadrat
     
    Image offPict; // Offscreen
     Graphics off;
     int oldAppletWidth = 0; // Hilfsvariabel zum erkennen ob sich
     int oldAppletHeight = 0; // die Appletgroesser veraender hat
     
     boolean animDir = false; // Sagt aus, ob der Vector incrementier
            // oder dectrementiert werden muss.
     
     // Init Methode:
     //=============================
     
     public void init()
 {
  setBackground(cBg);
  Dimension w = getSize();
  
  // Steckungszentrum festlegen:
  xs = w.width / 2;
  ys = w.height / 2;
  
  offPict = createImage(w.width,w.height);
  off = offPict.getGraphics();
  oldAppletWidth = w.width;
  oldAppletHeight = w.height;
  setPaintPeriod(100);
 }
    
    // Paint Methode (zeichnet die Animation):
     //=============================
     
 public void paint(Graphics g)
 {
  Dimension w = getSize();

  // OffScreen nur neu erstellen, wenn sich
  // Appletgroesse geaendert hat:
  if(w.width > oldAppletWidth || w.height > oldAppletHeight)
  {
   offPict = createImage(w.width,w.height);
   off = offPict.getGraphics();
   oldAppletWidth = w.width;
   oldAppletHeight = w.height;
   
   // Steckungszentrum neu festlegen:
   xs = w.width / 2;
   ys = w.height / 2;
  }
  
  // Altes Bild loeschen:
  off.setColor(cBg);
  off.fillRect(0,0,w.width,w.height);
  
  // Perspektivische Figur zeichnen:
  drawPerspektive(off,startvx,startvy,seite);
  
  // X und Y Komponente des Verschiebungsvectors anpassen:
  if(!animDir) startvx += 10;
  else startvx -= 10;
  if(startvx > 130) animDir = true;
  if(startvx < -130) animDir = false;
  
  // Bild ausgeben:
  g.drawImage(offPict,0,0,null);
 }
    
    
    // Methode die einen Mitteltpunkt und die Seitenlaenge eines
    // Quadrat bekommt und dieses Zeichnet.
    //=============================
    
    void drawFigur(Graphics g,int mx, int my,int a)
    {
        int x = mx - (a / 2);
        int y = my - (a / 2);
        
        g.setColor(cFg);
        g.drawRect(x,y,a,a);
    }
    
    
   // Zeichnet eine Perspektivische Figur
   //=============================
   
    void drawPerspektive(Graphics g,int vx, int vy, int a)
    {
        for(int i = 0;i <= 6;i++)
        {
            // Neuen Mittelpunkt berechnen:
            drawFigur(g,xs + vx,ys + vy,a);
            // Neuen Verschiebungsvektor berechnen:
            vx = 3 * vx / 2;
            vy = 3 * vy / 2;
            a = 3 * a /2;
        }
    }
}