elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  GNU/Linux (Moderador: MinusFour)
| | |-+  Problema de rendimiento con Java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema de rendimiento con Java  (Leído 2,720 veces)
diego_lp

Desconectado Desconectado

Mensajes: 180


In a free world, who needs gates and windows?


Ver Perfil WWW
Problema de rendimiento con Java
« en: 24 Febrero 2011, 00:18 am »

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.html
Espero 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 Desconectado

Mensajes: 28



Ver Perfil
Re: Problema de rendimiento con Java
« Respuesta #1 en: 26 Febrero 2011, 11:06 am »

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 Desconectado

Mensajes: 180


In a free world, who needs gates and windows?


Ver Perfil WWW
Re: Problema de rendimiento con Java
« Respuesta #2 en: 26 Febrero 2011, 16:05 pm »

Bueno muchas gracias por las felicitaciones y por tomarte la molestia de probarlo para ver el rendimiento. ;D
Que raro la diferencia de rendimiento entre un sistema y otro  :huh:
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.
Código:
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!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con el rendimiento del portatil « 1 2 »
Seguridad
Zmbrz 10 6,281 Último mensaje 6 Junio 2011, 05:33 am
por Zmbrz
Rendimiento de Java, C++ y python
Programación General
bien1 2 3,799 Último mensaje 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 Último mensaje 27 Abril 2012, 22:35 pm
por wolfbcn
Rendimiento aplicaciones Java
Java
Mr. Shell 1 2,525 Último mensaje 13 Septiembre 2012, 03:50 am
por sapito169
problema rendimiento cpu 100%
Windows
nightcode 2 2,635 Último mensaje 14 Septiembre 2020, 16:45 pm
por Randomize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines