LostOblivion Skrevet 22. september 2007 Del Skrevet 22. september 2007 (endret) Hei, Det virker som programmet mitt kjører saktere i Windows enn i Ubuntu. Er det noe med måten Windows og Ubuntu tegner på? Hva kan jeg gjøre for å få dette programmet til å funke med Windows? Det er skrevet i Ubuntu, hvor det kjører med rundt 80 FPS, og 3 FPS i Windows XP på maskinen min... 3.4 GHz Conroe prosessor. Hm, går tydeligvis ikke an å laste opp .jar filer. Legger ved vesentlig kode under. Klikk for å se/fjerne innholdet nedenfor public void paintComponent(Graphics g) { // call original function super.paintComponent(g); // convert to "advanced" graphics object (more options) Graphics2D g2 = (Graphics2D)g; // set background g2.setColor(Color.BLACK); g2.fillRect(0, 0, viewPort.size.width, viewPort.size.height); // draw floor g2.setColor(floor.color); for (i = 0; i < floor.localLines.length; i++) { pointOnScreenStart = viewPort.getPointOnScreen(floor.localLines[i].start); pointOnScreenEnd = viewPort.getPointOnScreen(floor.localLines[i].end); if (pointOnScreenStart != null && pointOnScreenEnd != null) g2.drawLine(pointOnScreenStart.x, pointOnScreenStart.y, pointOnScreenEnd.x, pointOnScreenEnd.y); } // draw world coord system origo = viewPort.getPointOnScreen(new Vector(0, 0, 0)); // x g2.setColor(Color.BLUE); xPoint = viewPort.getPointOnScreen(new Vector(worldAxisLen, 0, 0)); if (origo != null && xPoint != null) { g2.drawLine(origo.x, origo.y, xPoint.x, xPoint.y); g2.drawString("x", xPoint.x, xPoint.y); } // y g2.setColor(Color.GREEN); yPoint = viewPort.getPointOnScreen(new Vector(0, worldAxisLen, 0)); if (origo != null && yPoint != null) { g2.drawLine(origo.x, origo.y, yPoint.x, yPoint.y); g2.drawString("y", yPoint.x, yPoint.y); } // z g2.setColor(Color.RED); zPoint = viewPort.getPointOnScreen(new Vector(0, 0, worldAxisLen)); if (origo != null && zPoint != null) { g2.drawLine(origo.x, origo.y, zPoint.x, zPoint.y); g2.drawString("z", zPoint.x, zPoint.y); } // draw model objects for (i = 0; i < models.length; i++) { g2.setColor(models[i].color); for (j = 0; j < models[i].localPoints.length; j++) { pointOnScreen = viewPort.getPointOnScreen(models[i].totalRot.getVector(models[i].localPoints[j]).getAdd(models[i].center)); if (pointOnScreen != null) // if not behind camera g2.fillRect(pointOnScreen.x, pointOnScreen.y, 1, 1); } } // draw point model objects' local coord system for (i = 0; i < models.length; i++) { modelCenterPoint = viewPort.getPointOnScreen(models[i].center); // x g2.setColor(Color.BLUE); xPoint = viewPort.getPointOnScreen(models[i].xAxis.getMultiply(models[i].axisLen).getAdd(models[i].center)); if (modelCenterPoint != null && xPoint != null) { g2.drawLine(modelCenterPoint.x, modelCenterPoint.y, xPoint.x, xPoint.y); g2.drawString("x", xPoint.x, xPoint.y); } // y g2.setColor(Color.GREEN); yPoint = viewPort.getPointOnScreen(models[i].yAxis.getMultiply(models[i].axisLen).getAdd(models[i].center)); if (modelCenterPoint != null && yPoint != null) { g2.drawLine(modelCenterPoint.x, modelCenterPoint.y, yPoint.x, yPoint.y); g2.drawString("y", yPoint.x, yPoint.y); } // z g2.setColor(Color.RED); zPoint = viewPort.getPointOnScreen(models[i].zAxis.getMultiply(models[i].axisLen).getAdd(models[i].center)); if (modelCenterPoint != null && zPoint != null) { g2.drawLine(modelCenterPoint.x, modelCenterPoint.y, zPoint.x, zPoint.y); g2.drawString("z", zPoint.x, zPoint.y); } } // varius data output g2.setColor(Color.WHITE); g2.drawString("framerate: " + framerate, 25, 25); g2.drawString("time accel: " + timeAccel, 25, 35); g2.drawString("active: " + models[activeModel].name, 25, 45); } } Ok, det ble veldig rotete. Men uansett, det jeg gjør er at man bruker fillRect(...) rundt 80000 ganger hver gang. Går fint i Ubuntu, men ikke i Windows, noen andre funksjoner jeg burde bruke, eller gjør jeg noe galt? Endret 22. september 2007 av LostOblivion Lenke til kommentar
LostOblivion Skrevet 24. september 2007 Forfatter Del Skrevet 24. september 2007 Jeg fant svaret mitt i BufferedImage. Brukte det i stedet, da gikk alt mye fortere, kan noen forklare meg hvor bruken av XORMode er nyttig? Eventuelt hvordan jeg kan bruke det i animasjonsprogrammet mitt som viser noen bevegende figurer på skjermen. Takk! Lenke til kommentar
pgdx Skrevet 27. september 2007 Del Skrevet 27. september 2007 Bruker du samme Java-versjon? 1.5 / 1.6? Lenke til kommentar
LostOblivion Skrevet 28. september 2007 Forfatter Del Skrevet 28. september 2007 Jepp, JDK/JRE 1.6 i både i Windows og Ubuntu. Nå kjører de like kjapt. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå