Jag surfade in på http://bodytag.org och gillade det jag såg.
Så jag tänkte varför inte testa att göra det som är gjort med javascript + vml i java. Man kan ju se koden och jag behöver träna lite.
Jag valde Gravity som finns här .
Nu har jag kodat lite och åstadkommet något som liknar den sidan. Men problemet är att den är grymt långsam. Är det någon som vet varför?
Här är min kod:
import java.awt.*;
import java.applet.Applet;
public class gravity extends Applet implements Runnable{
Thread runner;
int wApplet, hApplet;
Image offscreenImg;
Graphics offscreen;
Point mouse = new Point(0,0);
double birdObj[] = {0, 200, 0, 10, 0};
double katetX = 0, katetY = 0, hypotenusan = 0;
int grav = 1;
int diameter = 10;
Color bgColor = new Color(100,100,100);
Color objColor = new Color(34,34,34);
public void init(){
// ta reda på höjden på appleten
wApplet = this.getSize().width;
hApplet = this.getSize().height;
// Ritbuffer...
offscreenImg = createImage(wApplet, hApplet);
offscreen = offscreenImg.getGraphics();
}
public void start(){
if(runner==null)
runner = new Thread(this);
runner.start();
}
public void stop(){
runner = null;
}
public void run(){
Thread dennaTrad = Thread.currentThread();
while(runner==dennaTrad){
trackFlock();
repaint();
try{
Thread.sleep(10);
}catch (InterruptedException e){}
}
}
public boolean mouseDown(Event evt, int x, int y){
grav = -grav;
return true;
}
public boolean mouseUp(Event evt, int x, int y){
grav = Math.abs(grav);
return true;
}
public boolean mouseMove(Event evt, int x, int y){
mouse.x = x;
mouse.y = y;
return true;
}
//Huvudslingan
void trackFlock(){
katetX = mouse.x - birdObj[0];
katetY = mouse.y - birdObj[1];
hypotenusan = Math.sqrt(katetX * katetX + katetY * katetY);
birdObj[3] += grav*(katetX/hypotenusan); // (cost[angle]*20)/hypotenusan;
birdObj[4] += grav*(katetY/hypotenusan); // (sint[angle]*20)/hypotenusan;
if(birdObj[3] > 10) {
birdObj[3] = 10;
}else if(birdObj[3] < -10){
birdObj[3] = -10;
}
if(birdObj[4] > 10) {
birdObj[4] = 10;
}else if(birdObj[4] < -10){
birdObj[4] = -10;
}
birdObj[0] += birdObj[3]*.5;
birdObj[1] += birdObj[4]*.5;
}
//överlagra update (nu suddar den inte)
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g){
//bakgrunden
offscreen.setColor(bgColor);
offscreen.fillRect(0, 0, wApplet, hApplet);
//objektet
offscreen.setColor(objColor);
offscreen.fillOval((int)birdObj[0]+(diameter/2), (int)birdObj[1]+(diameter/2), diameter, diameter);
//HUD
offscreen.setColor(Color.green);
offscreen.drawString("mouse x: "+mouse.x, 10, 20);
offscreen.drawString("mouse y: "+mouse.y, 10, 30);
offscreen.drawString("hypotenusan: "+hypotenusan, 10, 40);
//Rita ut allt på skärmen
g.drawImage(offscreenImg, 0, 0, this);
}
public void destroy(){
offscreen.dispose();
}
}