Autor
|
Tema: Problema de rendimiento con Java (Leído 2,720 veces)
|
diego_lp
Desconectado
Mensajes: 180
In a free world, who needs gates and windows?
|
Hola a todos, estoy empezando con programación de videojuegos en Java. Estoy empezando un remake clasico que va bien, el problema es que en mi sistema operativo (Kubuntu 10.04.1 x64) me tira apenas 25 fps, mientras que si lo ejecuto en una maquina virtual que tengo en el vmware con windows xp me tira 75 fps que son los que yo configuré en el juego. Primero que nada quisiera saber si es un problema mío o si será general para todos los sistemas Linux, por lo que publiqué el "juego" en un aplet para que quien pueda lo pruebe y me confirme si el problema de rendimiento es mio o no, y en caso de ser sólo yo tal vez alguien me pueda dar una mano. Para acceder al juego: http://juego.net46.net/web/juego.htmlEspero alguien pueda probarlo. Muchas gracias. Saludos.
|
|
|
En línea
|
Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!
|
|
|
BrusBilis
Desconectado
Mensajes: 28
|
Lo primero decir que me ha gustado, esta muy currado. Felicidades
Mis resultados
Con Linux10.10 64bits.... 55-60 fps constantes Con XP en Virtual Box sobre el mismo ordenador 90-100 fps Con W7 en Virtual Box sobre el mismo ordenador 95-100 fps
Aparte de lo de los fps que comentas algo debe no ir del todo correcto pues esta permanentente chupando CPU, como si estuviera por ahi haciendo bucles infinitos.
Si no te importa ¿ podrias compartir el codigo para echarle un ojo ?
Un saludo
|
|
« Última modificación: 26 Febrero 2011, 11:10 am por BrusBilis »
|
En línea
|
Perdona bonita, pero yo solo hablo dos idiomas: normal y con tacos
|
|
|
diego_lp
Desconectado
Mensajes: 180
In a free world, who needs gates and windows?
|
Bueno muchas gracias por las felicitaciones y por tomarte la molestia de probarlo para ver el rendimiento. Que raro la diferencia de rendimiento entre un sistema y otro Los juegos son todos bucles infinitos asi que creo que es relativamente normal que consuma CPU. El código no está optimizado hay muchas variables que se podrían agrupar en array's por ejemplo pero bueno, no me puse muy exquisito con el código recién empiezo con programación de videojuegos. import java.awt.image.*; import java.sql.*; import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import java.util.Random; // GTGE import com.golden.gamedev.*; import com.golden.gamedev.object.*; import com.golden.gamedev.object.background.*; import com.golden.gamedev.object.sprite.*; import com.golden.gamedev.object.collision.*; import com.golden.gamedev.util.ImageUtil; import com.golden.gamedev.engine.audio.*; //package salvaalcubo;
/** * * @author diego_lp */ public class Main extends Game { Timer tiempo; int puntos; Timer reloj; PlayField playfield; // the game playfield Background background; SpriteGroup PLAYER_GROUP; SpriteGroup MAPA_GROUP; SpriteGroup fuego_grupo; SpriteGroup grupo_lateral; SpriteGroup BLOQUES; SpriteGroup estrellas; AnimatedSprite caja; Sprite bloque; Sprite laterali; Sprite laterald; CollisionManager colision; CollisionManager colisionLateral; CollisionManager colisionfuego; CollisionManager colisionestrellas; GameFont fuente; double gravedad; int segundos=0; Sprite[] spritesBloques; int indice = 0; int x; int milisegundos = 0; double speedX = 0; double speedY = 0.1; Sprite piso; Sprite techo; Sprite estrella; AnimatedSprite rayo; AnimatedSprite rayo1; AnimatedSprite rayo2; AnimatedSprite rayo3; AnimatedSprite rayo4; AnimatedSprite rayo5; AnimatedSprite rayo6; AnimatedSprite rayo7; AnimatedSprite rayo8; AnimatedSprite rayo9; AnimatedSprite explosion; AnimatedSprite explosion1; AnimatedSprite explosion2; AnimatedSprite explosion3; AnimatedSprite explosion4; AnimatedSprite explosion5; AnimatedSprite explosion6; AnimatedSprite explosion7; String mensaje=""; boolean perdiste=false; String nombre=""; int estrellaX; int estrellaY;
/** * @param args the command line arguments */ // @Override protected void initEngine() { super.initEngine();
// set sound effect to use mp3 //bsSound.setBaseRenderer(new JavaLayerMp3Renderer()); //bsSound.setBaseRenderer(new JavaLayerMp3Renderer());
// set music to use mp3 bsMusic.setBaseRenderer(new JavaLayerMp3Renderer()); } public void initResources() { //setFPS(30); playMusic("resources/ridaz.mp3"); reloj= new Timer(20); fuente = fontManager.getFont(getImages("resources/font.png", 20, 3), " ! .,0123" + "456789: -? ABCDEFG" + "HIJKLMNOPQRSTUVWXYZ "); tiempo = new Timer(1000); spritesBloques = new Sprite[20]; playfield = new PlayField(); //background = new ColorBackground(Color.BLACK,800,600); background = new ImageBackground(getImage("resources/fondo.jpeg"), 800, 600); playfield.setBackground(background); //caja = new Sprite(getImage("resources/caja.jpeg"), 400, 100); caja = new AnimatedSprite(getImages("resources/blob_final.png",6,2), 400, 100); caja.setAnimate(true); caja.setLoopAnim(true); //bloque = new Sprite(getImage("resources/piso.jpeg"), 400, 500); laterali = new Sprite(getImage("resources/lateral.png"), 100, 0); BufferedImage img = ImageUtil.getImage( bsIO.getURL( "resources/estrella.png" ), Transparency.TRANSLUCENT ); estrella = new Sprite(img, 1000, 200); //estrella.setActive(false); laterald = new Sprite(getImage("resources/lateral.png"), 650, 0); explosion = new AnimatedSprite(getImages("resources/exp2_0.png",4,4), 150, 550); explosion.setAnimationFrame(0, 11); explosion.setAnimate(true); explosion.setLoopAnim(true); explosion1 = new AnimatedSprite(getImages("resources/exp2_0.png",4,4), 210, 550); explosion.setAnimationFrame(0, 11); explosion1.setAnimate(true); explosion1.setLoopAnim(true); explosion2 = new AnimatedSprite(getImages("resources/exp2_0.png",4,4), 270, 550); explosion.setAnimationFrame(0, 11); explosion2.setAnimate(true); explosion2.setLoopAnim(true); explosion3 = new AnimatedSprite(getImages("resources/exp2_0.png",4,4), 330, 550); explosion.setAnimationFrame(0, 11); explosion3.setAnimate(true); explosion3.setLoopAnim(true); explosion4 = new AnimatedSprite(getImages("resources/exp2_0.png",4,4), 390, 550); explosion.setAnimationFrame(0, 11); explosion4.setAnimate(true); explosion4.setLoopAnim(true); explosion5 = new AnimatedSprite(getImages("resources/exp2_0.png",4,4), 450, 550); explosion.setAnimationFrame(0, 11); explosion5.setAnimate(true); explosion5.setLoopAnim(true); explosion6 = new AnimatedSprite(getImages("resources/exp2_0.png",4,4), 510, 550); explosion.setAnimationFrame(0, 11); explosion6.setAnimate(true); explosion6.setLoopAnim(true); explosion7 = new AnimatedSprite(getImages("resources/exp2_0.png",4,4), 570, 550); explosion.setAnimationFrame(0, 11); explosion7.setAnimate(true); explosion7.setLoopAnim(true);
rayo = new AnimatedSprite(getImages("resources/shock.png",4,8), 150, 0); rayo.setAnimationFrame(0, 3); rayo.setAnimate(true); rayo.setLoopAnim(true); rayo1 = new AnimatedSprite(getImages("resources/shock.png",4,8), 200, 0); rayo1.setAnimationFrame(0, 3); rayo1.setAnimate(true); rayo1.setLoopAnim(true); rayo2 = new AnimatedSprite(getImages("resources/shock.png",4,8), 250, 0); rayo2.setAnimationFrame(0, 3); rayo2.setAnimate(true); rayo2.setLoopAnim(true); rayo3 = new AnimatedSprite(getImages("resources/shock.png",4,8), 300, 0); rayo3.setAnimationFrame(0, 3); rayo3.setAnimate(true); rayo3.setLoopAnim(true); rayo4 = new AnimatedSprite(getImages("resources/shock.png",4,8), 350, 0); rayo4.setAnimationFrame(0, 3); rayo4.setAnimate(true); rayo4.setLoopAnim(true); rayo5 = new AnimatedSprite(getImages("resources/shock.png",4,8), 400, 0); rayo5.setAnimationFrame(0, 3); rayo5.setAnimate(true); rayo5.setLoopAnim(true); rayo6 = new AnimatedSprite(getImages("resources/shock.png",4,8), 450, 0); rayo6.setAnimationFrame(0, 3); rayo6.setAnimate(true); rayo6.setLoopAnim(true); rayo7 = new AnimatedSprite(getImages("resources/shock.png",4,8), 500, 0); rayo7.setAnimationFrame(0, 3); rayo7.setAnimate(true); rayo7.setLoopAnim(true); rayo8 = new AnimatedSprite(getImages("resources/shock.png",4,8), 550, 0); rayo8.setAnimationFrame(0, 3); rayo8.setAnimate(true); rayo8.setLoopAnim(true); rayo9 = new AnimatedSprite(getImages("resources/shock.png",4,8), 585, 0); rayo9.setAnimationFrame(0, 3); rayo9.setAnimate(true); rayo9.setLoopAnim(true); techo = new Sprite(getImage("resources/fuego.png"), 150, 0); piso = new Sprite(getImage("resources/fire.jpg"), 150, 570); grupo_lateral = new SpriteGroup("lateral"); PLAYER_GROUP = new SpriteGroup("Player"); BLOQUES = new SpriteGroup("Bloques"); estrellas = new SpriteGroup("estrellas"); fuego_grupo = new SpriteGroup("fuego"); estrellas.add(estrella); playfield.addGroup(PLAYER_GROUP); playfield.addGroup(BLOQUES); playfield.addGroup(grupo_lateral); playfield.addGroup(fuego_grupo); playfield.addGroup(estrellas); PLAYER_GROUP.add(caja); grupo_lateral.add(laterali); grupo_lateral.add(laterald); fuego_grupo.add(piso); estrellas.add(estrella); // fuego_grupo.add(techo); fuego_grupo.add(rayo); fuego_grupo.add(rayo1); fuego_grupo.add(rayo2); fuego_grupo.add(rayo3); fuego_grupo.add(rayo4); fuego_grupo.add(rayo5); fuego_grupo.add(rayo6); fuego_grupo.add(rayo7); fuego_grupo.add(rayo8); fuego_grupo.add(rayo9); fuego_grupo.add(explosion); fuego_grupo.add(explosion1); fuego_grupo.add(explosion2); fuego_grupo.add(explosion3); fuego_grupo.add(explosion4); fuego_grupo.add(explosion5); fuego_grupo.add(explosion6); fuego_grupo.add(explosion7); //BLOQUES.add(bloque); spritesBloques[indice] = new Sprite(getImage("resources/piso.jpeg"), 300, 650); BLOQUES.add(spritesBloques[indice]); indice++; }
public void update(long elapsedTime) { if (tiempo.action(elapsedTime)){ segundos++; if ((estrella.getX()==1000 && (aleatorio(20,0)==5 || speedY>0.2)) ){ int x; do{ x=aleatorio(500,200); }while(x>caja.getX()-100 && x<caja.getX()+100); estrella.setX(x); estrella.setY(aleatorio(400,200)); playSound("resources/spell3.wav"); //estrella.setActive(true); // estrella.update(elapsedTime); } //System.out.println(speedY); System.out.println(estrella.getX()); if (estrella.isActive()){ System.out.println(); } } if (reloj.action(elapsedTime)){ if (!perdiste){ puntos++; }
if (indice>19){ indice=0; } //Random rand = new Random(); //int x = rand.nextInt(100);
if (keyDown(KeyEvent.VK_ENTER) && perdiste){ mensaje=""; perdiste=false; puntos=0; segundos=0; speedX = 0; //speedY = 0; speedY = 0.1; gravedad=0; milisegundos=0; initResources(); caja.setActive(true); }
if (aleatorio(9,0)==5 && puntos-milisegundos>50){ spritesBloques[indice] = new Sprite(getImage("resources/piso.jpeg"), aleatorio(500,150), 650); BLOQUES.add(spritesBloques[indice]); indice++; milisegundos=puntos; }
speedX = 0; speedY=speedY + 0.0001; gravedad = gravedad + 0.005; if (!keyDown(KeyEvent.VK_LEFT) && !keyDown(KeyEvent.VK_RIGHT)){ caja.setAnimate(false); caja.setFrame(0); } if (keyDown(KeyEvent.VK_LEFT)){ speedX = -0.15; caja.setAnimationFrame(6, 11); caja.setAnimate(true); caja.setLoopAnim(true); } if (keyDown(KeyEvent.VK_RIGHT)){ speedX = 0.15; caja.setAnimationFrame(0, 5); caja.setAnimate(true); caja.setLoopAnim(true); } //bloque.setVerticalSpeed(-speedY); int i; for (i=0;i<spritesBloques.length;i++){ if (spritesBloques[i] != null){ spritesBloques[i].setVerticalSpeed(-speedY); } } colision=new ColisionEntreCajaYBloque(); colision.setCollisionGroup(PLAYER_GROUP, BLOQUES); colision.checkCollision();
colisionLateral=new ColisionEntreCajaYPared(); colisionLateral.setCollisionGroup(PLAYER_GROUP, grupo_lateral); colisionLateral.checkCollision(); colisionfuego=new ColisionEntreCajaYfuego(); colisionfuego.setCollisionGroup(PLAYER_GROUP, fuego_grupo); colisionfuego.checkCollision(); colisionfuego=new ColisionEntreCajaYestrella(); colisionfuego.setCollisionGroup(PLAYER_GROUP, estrellas); colisionfuego.checkCollision();
caja.setHorizontalSpeed(speedX); caja.setVerticalSpeed(gravedad); leernombre();
playfield.update(elapsedTime); } }
public void render(Graphics2D g) { playfield.render(g); if (segundos<60){ fuente.drawString(g, String.valueOf(segundos), 5, 30); }else{ int seg=0; int min=0; min=Math.round(segundos / 60); seg=segundos-(min*60); fuente.drawString(g, "TIEMPO: " + String.valueOf(min) + ":" + String.valueOf(seg), 5, 30); } fuente.drawString(g, "PUNTOS: " + String.valueOf(puntos) , 5, 50); fuente.drawString(g, mensaje , 100, 300); fuente.drawString(g, nombre , 10, 500); } public static void main(String[] args) { // TODO code application logic here GameLoader game = new GameLoader(); game.setup(new Main(), new Dimension(800,600), false); game.start(); } public class ColisionEntreCajaYBloque extends CollisionGroup { public void collided (Sprite s1, Sprite s2){ this.pixelPerfectCollision = true; if (getCollisionSide()==8){ s1.setY(s2.getY()-30); gravedad=0; // if (keyDown(KeyEvent.VK_SPACE)){ // gravedad=-0.15; // } } } } public class ColisionEntreCajaYfuego extends BasicCollisionGroup { public void collided (Sprite s1, Sprite s2){ this.pixelPerfectCollision = true; //cuando entra aca pierde perdiste=true; mensaje="PUNTOS: " + String.valueOf(puntos) + ", PRESIONA ENTER PARA REINICIAR"; caja.setActive(false); } } public class ColisionEntreCajaYestrella extends BasicCollisionGroup { public void collided (Sprite s1, Sprite s2){ this.pixelPerfectCollision = true; //cuando entra aca pierde s2.setX(1000); speedY=0.1; } } public class ColisionEntreCajaYPared extends CollisionGroup { public void collided (Sprite s1, Sprite s2){ this.pixelPerfectCollision = true; if (getCollisionSide()==2){ speedX=0; s1.setX(s1.getOldX()); } if (getCollisionSide()==1){ speedX=0; s1.setX(s1.getOldX()); } } } public static int aleatorio(int max,int min){ return (int)(Math.random()*(max-min))+min; } public void leernombre(){ if (keyPressed(KeyEvent.VK_A)){ nombre=nombre + "A"; } if (keyPressed(KeyEvent.VK_B)){ nombre=nombre + "B"; } if (keyPressed(KeyEvent.VK_C)){ nombre=nombre + "C"; } if (keyPressed(KeyEvent.VK_D)){ nombre=nombre + "D"; } if (keyPressed(KeyEvent.VK_E)){ nombre=nombre + "E"; } if (keyPressed(KeyEvent.VK_F)){ nombre=nombre + "F"; } if (keyPressed(KeyEvent.VK_G)){ nombre=nombre + "G"; } if (keyPressed(KeyEvent.VK_H)){ nombre=nombre + "H"; } if (keyPressed(KeyEvent.VK_I)){ nombre=nombre + "I"; } if (keyPressed(KeyEvent.VK_J)){ nombre=nombre + "J"; } if (keyPressed(KeyEvent.VK_K)){ nombre=nombre + "K"; }if (keyPressed(KeyEvent.VK_L)){ nombre=nombre + "L"; } if (keyPressed(KeyEvent.VK_M)){ nombre=nombre + "M"; } if (keyPressed(KeyEvent.VK_N)){ nombre=nombre + "N"; } if (keyPressed(KeyEvent.VK_O)){ nombre=nombre + "O"; } if (keyPressed(KeyEvent.VK_P)){ nombre=nombre + "P"; } if (keyPressed(KeyEvent.VK_Q)){ nombre=nombre + "Q"; } if (keyPressed(KeyEvent.VK_R)){ nombre=nombre + "R"; } if (keyPressed(KeyEvent.VK_S)){ nombre=nombre + "S"; } if (keyPressed(KeyEvent.VK_T)){ nombre=nombre + "T"; } if (keyPressed(KeyEvent.VK_U)){ nombre=nombre + "U"; } if (keyPressed(KeyEvent.VK_V)){ nombre=nombre + "V"; } if (keyPressed(KeyEvent.VK_W)){ nombre=nombre + "W"; } if (keyPressed(KeyEvent.VK_X)){ nombre=nombre + "X"; } if (keyPressed(KeyEvent.VK_Y)){ nombre=nombre + "Y"; } if (keyPressed(KeyEvent.VK_Z)){ nombre=nombre + "Z"; } if (keyPressed(KeyEvent.VK_DELETE)){ nombre=nombre.substring(0, nombre.length()-1); } } } De nuevo muchas gracias por tomarte la molestia, no debe ser problema de mi pc entonces.
|
|
|
En línea
|
Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con el rendimiento del portatil
« 1 2 »
Seguridad
|
Zmbrz
|
10
|
6,281
|
6 Junio 2011, 05:33 am
por Zmbrz
|
|
|
Rendimiento de Java, C++ y python
Programación General
|
bien1
|
2
|
3,799
|
15 Enero 2012, 16:41 pm
por H1jack
|
|
|
Java SE 6 Update 32 disponible con mejoras en el rendimiento. Actualiza Java
Noticias
|
wolfbcn
|
0
|
3,613
|
27 Abril 2012, 22:35 pm
por wolfbcn
|
|
|
Rendimiento aplicaciones Java
Java
|
Mr. Shell
|
1
|
2,525
|
13 Septiembre 2012, 03:50 am
por sapito169
|
|
|
problema rendimiento cpu 100%
Windows
|
nightcode
|
2
|
2,635
|
14 Septiembre 2020, 16:45 pm
por Randomize
|
|