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