………
Une animation
Inspirée de celle écrite par Arthur van Hoff qui se trouve à se trouve :
http://www.javaworld.com/jw-03-1996/animation/Example7Applet.html
écrite par Arthur van Hoff extrait de son article sur la programmation d’animations en Java disponible à :
http://www.javaworld.com/jw-03-1996/animation J’ai ajouté le chargement par le MediaTracker, une réécriture de update() et paint().
applet d’animation
import java.awt.*;
public
class Example7Applet extends
java.applet.Applet implements Runnable {
int frame;
int delay;
Thread animator;
Dimension offDimension;
Image offImage;
Graphics offGraphics;
Image world;
Image car;
/**
* Initialisation de l’applet et calcul du delai
* entre « trames ».
*/
public void init() {
String str = getParameter(« fps »);
int fps = (str != null) ? Integer.parseInt(str) : 10;
delay = (fps > 0) ? (1000 / fps) : 100;
tracker = new MediaTracker(this);
world = getImage(getCodeBase(),
« world.gif »);
car = getImage(getCodeBase(), « car.gif »);
tracker.addImage(world, 0);
tracker.addImage(car, 0);
}
Morphing 2D en Java
Une applet écrite par Pat Niemeyer (pat@pat.net) utilisable à :
http://www.ooi.com/tween/editor.html
On fait 2 dessins et le programme passe de l’un à l’autre par « morphing ».
« … feel free to use it for your class but please don’t redistribute it »
code morphing P.Niemeyer
L’applet utilise essentiellement 2 classes dans le paquetage tween : la classe Editor et la classe Canvas. L’applet présente tout
d’abord un éditeur de dessin :
dont une partie du code est :
package tween;
•••
class Editor extends Panel {
tween.Canvas canvas;
Graphics canvasGr;
int xpos, ypos, oxpos, oypos;
private int [][] track = new int [2048][2];
private int trackEnd = 0;
private Vector tracks = new Vector();
static boolean standalone;
Editor() {
•••
add( « Center », canvas = new tween.Canvas() );
Panel p = •••
p.add( new Button(« Clear ») );
p.add( new Button(« Tween ») );
add( « South », p );
}
morphing P. Niemeyer (suite)
L’éditeur est un code classique de « rubber band » avec les 3 cas à traiter de bouton souris : appui, déplacer bouton enfoncé,relachement. À chaque manipulation, le code remplit un tableau track (indice trackEndincrémenté) qui va « contenir la courbe tracé par l’utilisateur ».
Lorsque le tracé est fini ce tableau est alors mis dans le vecteur tracksqui constitue alors le premier élément du vecteur. Le tracé suivant sera le second élément du vecteur, (etc. car on peut mettre plusieurs tracés).
Un tracé est constitué d’un ensemble de points qui ont eux-mêmes deux coordonnées d’où la déclaration de tableau à deux indices de la forme :
track[numeroDuPoint][0 pour x, 1 pour y]
package tween;
import java.awt.*;
import java.util.Vector;
import java.io.*;
class Canvas extends java.awt.Canvas implements Runnable
{
private Vector tracks = new Vector();
private Thread runner;
private Image drawImg;
private Graphics drawGr;
private boolean loop;
void setTracks( Vector tracks ) {
if ( runner != null )
stopTweening();
this.tracks = tracks;
}
synchronized public void startTweening( ) {
if ( runner != null )
stopTweening();
if ( tracks == null || tracks.size() == 0 )
return;
runner = new Thread( this );
runner.setPriority( runner.getPriority() + 1 );
this.loop = false;
runner.start();
}
synchronized public void stopTweening() {
if ( runner == null )
return;
runner.stop();
runner = null;
}
public void run() {
do {
tweenTracks();
} while ( loop );
}