Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con la velocidad...

Iniciado por Puyover, 05 de Diciembre de 2007, 09:34:07 PM

« anterior - próximo »

Puyover

Hola a todos!

Bueno veréis estoy intentando mostrar un mapa de tiles de 32x32, de 64 tiles de ancho y 20 tiles de alto. Lo muestro en la función que se le pasa a SetRenderCallback(...) para luego poder hacer un scroll horizontal, ya que si muestro el mapa una vez, el scroll no funciona.

La cuestión es que lo hago así, y el juego me va a unos 43 ~ 45 frames, por lo que al mover el personaje, éste se mueve bastante lento.

Aquí os dejo el contenido de la función que renderiza todo en pantalla y la que muestra el mapa:

// Renderizado de los graficos
void RenderAll(int bLogicUpdate) {
   // Dibuja el mapa de tiles
   DibujarMapa();

   // Realiza los calculos de movimiento
   MoverTombi();
   if(Tombi.saltando) Saltar();

   // Funcion que dibuja a Tombi
   Koka.gfx->Draw();
   Tombi.gfx->Draw();

   // Muestra los frames por segundo
   ShowFPS();
}


// Dibuja los mapas segun convenga
void DibujarMapa() {
   short x, y;

   for(x = 0; x < 64; x++) {
    for(y = 0; y < 20; y++) {
        Level1.tile->SetPosition(x * TILE_SIZE, y * TILE_SIZE);
        Level1.tile->Draw(NULL, stage1[Level1.posY + y][Level1.posY + x]);
    }
}
}


Y por si acaso os dejo la estructura Map:

struct Map {
   CRM32Pro_CTile* tile;
   int posX, posY;
   int posX_off, posY_off;
} Level1;


Las variables posX_off y posY_off aun no las he usado xD.

Bueno salu2 y gracias!
Vivimos en la era de la televisión. Una sola toma de una enfermera bonita ayudando a un viejo a salir de una sala dice más que todas las estadísticas sanitarias. -Margaret Thatcher

perrofeo307

Hola.
no se si te sea de ayuda, usas el MSSE (el scroll engine de theazazel8) ) en he usado mapas de 100*600 y 64pix el tile y pues siempre me anda en mas de 300fps
uso una estructura algo similar a la tuya

class MDatosMapa : public cMSSE_MapBase{
   short **PropiedadesMapa;
public:   
   // Constructor (MANDATORY)
   MDatosMapa(int height,int width);
   MDatosMapa(char *nombreArchivoMapa);
   // Method to be used by our maps factory to create an instance of this class (MANDATORY)
   static cMSSE_MapBase *createInstance(int y,int x);

   // Destructor (OPTIONAL)
   //~MDatosMapa();

   // My custom methods (OPTIONAL)
   int SaveCSV(char *maptype, char *&szCSV);
   int LoadCSV(char *maptype, char *szCSV);
   void Load(char *nombreArchivo);
CRM32Pro_CTile *tile, SDL_Surface *dst);
   short GetTileProperties(unsigned x, unsigned y);
};

bueno no se...
pero deberias intentar usar el MSSE ademas te renderiza todo :D
un saludo jeje :D

Puyover

Pues me gustaría poder usarlo pero ningun ejemplo me compila :S
Puse el archivo MSScrollEngine.lib en la carpeta lib del code blocks y aun asi me dice 'undefined reference to `cMSSE::cMSSE()' y asi con todas las funciones que hagan uso de ellas.

¿Me podrías decir que ide usas?

Gracias.
Vivimos en la era de la televisión. Una sola toma de una enfermera bonita ayudando a un viejo a salir de una sala dice más que todas las estadísticas sanitarias. -Margaret Thatcher

perrofeo307

Hola!
Uso el Visual studio Express
tienes que agregar la siguiente linea en las opciones del vinculador para que puedas compilar con CRM32Pro
/nodefaultlib:uuid.lib
y en las opciones del vinculador.. agregar las siguientes dependencias
CRM32Pro.lib sdlmain.lib MSScrollEngine.lib

y para el codeblocks
en "linker settings" tengo las siguientes lineas

CRM32Pro
SDLMain
MSScrollEngine

y agregar los directorios donde descomprimiste el MSSE
ejemplo...
..\MegaStormSystems\CRM32Pro
..\MegaStormSystems\MSSE v0.90

Espero te sirva  8)

Puyover

Perfecto.

Muchas gracias, ya me funcionan los ejemplos :D

Salu2!!!
Vivimos en la era de la televisión. Una sola toma de una enfermera bonita ayudando a un viejo a salir de una sala dice más que todas las estadísticas sanitarias. -Margaret Thatcher

Puyover

Pff madre mia esto me sigue yendo lento:

SE = new cMSSE;
   SE->Init("Acto_1");
   SE->SetRenderTarget(CRM32Pro.screen);
   SE->ImportImage(0, "mapa_fg.png", 32, 32);  
   SE->SetLayerStatus(0, SE_LAYERSTATUS_EXECUTE_SPEED);
   SE->SetLayerLoop(0, SE_LAYERLOOP_X);


Cargo el mapa con la funcion import, desde una imagen de 2048x640, para hacer un scroll de forma horizontal, pero me sigue funcionando a la misma velocidad (unos 40 fps) :S

Si alguien me pudiera decir que hago mal.

Grcias y salu2!
Vivimos en la era de la televisión. Una sola toma de una enfermera bonita ayudando a un viejo a salir de una sala dice más que todas las estadísticas sanitarias. -Margaret Thatcher

perrofeo307

Saludos!
mmm, y no has probado los ejemplos que van compilados con el demo del MSSE??

podria ser tu procesador...
cuando yo probe esos ejemplos en un pentium3 de 800MHZ
en el ejemplo 4 y 5 que son si mal no recuerdo los de como guardar y cargar los mapas...
me andaba en 1.5fps... la unica solucion fue activarle openGL al CRM32Pro
con lo que la cantidad de fps subio considerablemente(a cerca de 150)

con un AMD 64 X2 3800+ los mismos demos andan en 1200 fps sin openGL

y ya para un proyecto mas pesado graficamente

· Timer information:
     -> Execution time: 43.96s (50078 ticks)
     -> Total Logic Frames: 3755 - Total Rendering Frames: 19228
     -> Rendering Frame Rate: Unlimited - Last second 431 - Average 435.09.
     -> Logic Frame Rate: Desired 75 - Last second 75 - Average 85.01

· Graphics renderer info:
  -> Renderer: windib
  -> Video memory: 0 Mb
  -> Hardware surfaces: no
  -> Hardware color fill: no
  -> Hardware normal blits: no
  -> Hardware colorkey blits: no
  -> Hardware alpha blending blits: no

intenta activando openGL...
pues gracias espero haber ayudado en algo
animo!

Puyover

Oka voy a hacer lo que dices a ver si sube un poco :S

Gracias de nuevo xD

EDITO: Perfecto. Me coje hasta 300 fps.

Muchas gracias por toda la ayuda!!
Vivimos en la era de la televisión. Una sola toma de una enfermera bonita ayudando a un viejo a salir de una sala dice más que todas las estadísticas sanitarias. -Margaret Thatcher

TheAzazel

buenas!

efectivamente, perrofeo307 se encontro que usar transparencia sin opengl...requiere un procesador potente :)

El tema de que te vaya lento es que seguramente estes usando PNG con transparencia y eso es lento a no ser que utilices OpenGL :)

bueno, veo que de momento la cosa funciona aunque ojo, el soporte total a OpenGL aun no esta asegurado al 100%, hay cosas que se que fallan como:

- fades
- grabar un screenshot a disco

En la v5 tengo que tener corregidas todas estas cosas pero por ahora...asi esta el tema :P

Saludos

Puyover

Vaya asi que podría ser por los pngs...
Le pondré bmps mejor, porque le pase el exe a un amigo para ver que tal le iba y aun teniendo los fps limitados a 60 se le un numero de fps mu grande de 4 cifras que no podía ver por lo rapido que cambiaba xD

Salu2!!
Vivimos en la era de la televisión. Una sola toma de una enfermera bonita ayudando a un viejo a salir de una sala dice más que todas las estadísticas sanitarias. -Margaret Thatcher

perrofeo307

hola!
uhm fijate que a mi me pasaba algo similar, pero depende de la tarjeta de video que uses, mientras en las ati e intel funciona perfectamente, en las nvidia no, quiero suponer que es por los drivers debido a que cuando tenía unos antiguos funcionaba bien, sin embargo ahora el limite lo pone la frecuencia de refrescamiento del monitor  :?.

por ejemplo
si con nvidia le pongo el limite en 60fps se tironea... solución, le quito el límite y dejo la frecuencia de refrescamiento en 60hz, con lo que funciona muy estable a 60fps.

con ati e intel es diferente si le pido 60fps me da establemente 60fps y si le quito el limite pues vuela

pues bueno sabe jajaja es extraño, Con la herramienta "Setup Project" se soluciona eso  :D ...
edit...
uso esas dos lineas...
   CRM32Pro.Config.VideoAccel = ACCEL_HARDSMOOTH ;
CRM32Pro.Config.VideoRenderer = RENDER_OPENGL;

salu2...






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.