webForumDet fria alternativet

Slö kod?

1 svar · 436 visningar · startad av MMats

MMatsMedlem sedan sep. 200061 inlägg
#1

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();
	}
}
MMatsMedlem sedan sep. 200061 inlägg
#2

Ingen som kunde svaret på den här? Alternativt peka på var jag får tag på information om det?

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)