Simple motionblur effect:
Make Image ( for buffer ) with Type =TYPE_INT_ARGB
On this image draw all graphic.
And for clear screen(=buffer image) use:
g.setColor(new Color(0, 0, 0, 70));//alpha color-it is our motion blur
g.fillRect(0, 0, width, heyght);
Samples:
http://img822.imageshack.us/img822/2392/qwe2.th.png
http://img339.imageshack.us/img339/2696/qwek.th.png
Code(applet):
package motionblur;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
/**
*
* @author Danil
*
*
*/
public class motion extends Applet implements Runnable {
int delay = 30;
int heyght = 300;
int width = 500;
public void start() {
new Thread(this).start();
}
public void run() {
int x = 170, y = 120;
int xc[] = {0, 100, 200};
int yc[] = {0, 0, 0};
double cnt = 0;
boolean d = true;
setSize(width, heyght);
BufferedImage screen = new BufferedImage(width, heyght, BufferedImage.TYPE_INT_ARGB);
Graphics g = screen.getGraphics();
Graphics appletGraphics = getGraphics();
appletGraphics.setColor(Color.white);
appletGraphics.fillRect(0, 0, width, heyght);
appletGraphics.setColor(Color.black);
appletGraphics.drawString("loading...", heyght / 2 - 5, width / 2 - 80);
BufferedImage r = new BufferedImage(15, 15, BufferedImage.TYPE_INT_ARGB);
BufferedImage gr = new BufferedImage(15, 15, BufferedImage.TYPE_INT_ARGB);
BufferedImage b = new BufferedImage(15, 15, BufferedImage.TYPE_INT_ARGB);
Graphics rg = r.getGraphics();
Graphics grg = gr.getGraphics();
Graphics bg = b.getGraphics();
rg.setColor(Color.red);
rg.fillOval(0, 0, 15, 15);
grg.setColor(Color.green);
grg.fillOval(0, 0, 15, 15);
bg.setColor(Color.blue);
bg.fillOval(0, 0, 15, 15);
int tick = 0, fps = 0, acc = 0;
long lastTime = System.nanoTime();
appletGraphics.setColor(Color.black);
appletGraphics.fillRect(0, 0, width, heyght);
while (true) {
long now = System.nanoTime();
acc += now - lastTime;
tick++;
if (acc >= 1000000000L) {
acc -= 1000000000L;
fps = tick;
tick = 0;
}
lastTime = now;
//motion blur :)
g.setColor(new Color(0, 0, 0, 70));
g.fillRect(0, 0, width, heyght);
g.drawImage(r, x, y, this);
g.drawImage(r, xc[0], yc[0], this);
g.drawImage(gr, x + 15, y + 15, this);
g.drawImage(gr, xc[1], yc[1], this);
g.drawImage(b, x + 30, y + 30, this);
g.drawImage(b, xc[2], yc[2], this);
x = 170 + (int) (50 * Math.cos(cnt));
y = 120 + (int) (50 * Math.sin(cnt));
if (d) {
if (cnt < 180) {
cnt += 0.09;
} else {
d = false;
}
} else if (cnt > 0) {
cnt -= 0.09;
} else {
d = true;
}
if (xc[0] < 300) {
for (byte i = 0; i < 3; i++) {
xc[i] += 3;
yc[i] += 3;
}
} else {
for (byte i = 0; i < 3; i++) {
xc[i] = 0 + i * 100;
yc[i] = 0;
}
}
g.setColor(Color.white);
g.drawString("FPS " + String.valueOf(fps), 20, 30);
appletGraphics.drawImage(screen, 0, 0, null);
try {
Thread.sleep(delay);
} catch (Exception e) { /* best practice */ }
if (!isActive()) {
return;
}
}
}
}
Sorry for my English