मैंने एक कण प्रणाली एप्लेट लिखा है; वर्तमान में मैं बना रहा हूं, और प्रत्येक कण को अलग से खींच रहा हूं। (यहाँ कोड है)कुशलतापूर्वक बहुत सारे कणों को चित्रित करना
BufferedImage backbuffer;
Graphics2D g2d;
public void init(){
backbuffer = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
g2d = backbuffer.createGraphics();
setSize(WIDTH, HEIGHT);
//creates the particles
for (int i = 0; i < AMOUNTPARTICLES; i++) {
prtl[i] = new particleO();
prtl[i].setX(rand.nextInt(STARTX));
prtl[i].setY(rand.nextInt(STARTY));
prtl[i].setVel(rand.nextInt(MAXSPEED)+1);
prtl[i].setFAngle(Math.toRadians(rand.nextInt(ANGLESPREAD)));
}
//other code
}
public void update(Graphics g) {
g2d.setTransform(identity);
//set background
g2d.setPaint(BGCOLOUR);
g2d.fillRect(0,0,getSize().width,getSize().height);
drawp();
paint(g);
}
public void drawp() {
for (int n = 0; n < AMOUNTPARTICLES; n++) {
if (prtl[n].getAlive()==true){
g2d.setTransform(identity);
g2d.translate(prtl[n].getX(), prtl[n].getY());
g2d.setColor(prtl[n].getColor());
g2d.fill(prtl[n].getShape());
}
}
}
यह प्रदर्शन ठीक था मुझे 20,000 कणों (हालांकि, मैं एक सभ्य लैपटॉप) के साथ 40fps मिल सकता है ~। लेकिन उसके बाद मैं (नीचे देखें) टक्कर पता लगाने कहा, उस नंबर, कम से कम 2000 तक गिर
public void particleUpdate(){
for (int i = 0; i < AMOUNTPARTICLES; i++) {
//other update code (posx, posy, angle etc etc)
for (int j = 0; j < AMOUNTPARTICLES; j++) {
if (i!=j && prtl[j].getAlive()==true){
if(hasCollided(i, j)){
prtl[i].setcolor(Color.BLACK);
prtl[j].setcolor(Color.BLACK);
}
}
}
public boolean hasCollided(int prt1, int prt2){
double dx = prtl[prt1].getX() - prtl[prt2].getX();
double dy = prtl[prt1].getY() - prtl[prt2].getY();
int edges = prtl[prt1].getRadius() + prtl[prt2].getRadius();
double distance = Math.sqrt((dx*dx) + (dy*dy));
return (distance <= edges);
}
मैं स्क्रीन पर कणों ड्राइंग का एक बेहतर तरीका के लिए काफ़ी खोज की है, लेकिन उदाहरण या तो मुझे उलझन में , या लागू नहीं थे।
मैं गणना की नाव भार (बहुत अधिक) कर रहा हूं। लेकिन मैं इसे करने का एक और तरीका नहीं सोच सका, सुझावों का स्वागत है।
http://stackoverflow.com/questions/13046033/an- कुशल-way-to-simulate-many-particle-collisions –
एक बार यह स्वीकार करने के बाद मत भूलना कि किसने आपको सबसे ज्यादा मदद की है। – PearsonArtPhoto