Foros - Stratos

Proyectos => CRM32Pro => Mensaje iniciado por: [Fonet] en 02 de Abril de 2007, 01:32:07 PM

Título: Primeras Dudas
Publicado por: [Fonet] en 02 de Abril de 2007, 01:32:07 PM
Buenas, hace tiempo que estoy pensando en dar el salto a C++, y utilizar SDL, pero no me habia decidido, ahora que por fin tengo tiempo, creo que esta es la mejor opcion, una manera "simple" que luego me falicitara manejar otros engines.

He estado trasteando un poco, y seguramente deberia trastear un poco mas antes de postear nada,pero como siempre se me han dado mal las librerias y estas cosas , me van mal algunas cosas y no he visto ningun FAQ ni dudas de principiantes, asi que pongo mi problema actual y seguramente despues me vendran muchas mas dudas xDD.

El problema viene simplemente ejecutando los ejemplos, en el primero ya se me ve el fondo negro, las imagenes raras y sin transparencias, pero en el de la GUI no se me ve nada de GUI y se ve igual de mal que el primero.

En los ejecutables de los ejemplos que me bajé de la web se ven bien, y en el log del primero no tengo errores, en el segundo ejemplo ya si.

Los archivos dpf los saque de la carpeta bi de los ejemplos.

Seguramente será alguna tonteria, pero bueno, haber si alguien me ayuda.

Salu2
[/quote]
Título: Primeras Dudas
Publicado por: [Fonet] en 02 de Abril de 2007, 01:41:41 PM
Bueno, trasteando un poco con el EditorDPF ya se me ve bien , pero nada del GUI.

Estos son los errores en el log:

Citar
· [IStuffDPF->LoadBlock(460,'TILB','MyButton_n')] Warning: datablock was not found in the given DPF.
· [IStuffDPF->LoadBlock(461,'TILB','MyButton_p')] Warning: datablock was not found in the given DPF.
· [IStuffDPF->LoadBlock(462,'TILB','MyButton_o')] Warning: datablock was not found in the given DPF.
· [IStuffDPF->LoadBlock(463,'TILB','MyButton_s')] Warning: datablock was not found in the given DPF.
· [IButton->Create(0x22fc8c,'MyButton',0,'data/gfx.dpf')] Error: we could not find valid tiles for this kind of button.
· [IStuffDPF->LoadBlock(465,'TILB','MyCheck_n')] Warning: datablock was not found in the given DPF.
· [IStuffDPF->LoadBlock(466,'TILB','MyCheck_p')] Warning: datablock was not found in the given DPF.
· [IStuffDPF->LoadBlock(467,'TILB','MyCheck_o')] Warning: datablock was not found in the given DPF.
· [IButton->Create(0x22fc8c,'MyCheck',0,'data/gfx.dpf')] Error: we could not find valid tiles for this kind of button.
· [IStuffDPF->LoadBlock(469,'TILB','MySlider_n')] Warning: datablock was not found in the given DPF.
· [IStuffDPF->LoadBlock(470,'TILB','MySlider_p')] Warning: datablock was not found in the given DPF.
· [IStuffDPF->LoadBlock(471,'TILB','MySlider_o')] Warning: datablock was not found in the given DPF.
· [IButton->Create(0x22fc8c,'MySlider',0,'data/gfx.dpf')] Error: we could not find valid tiles for this kind of button.
· [IStuffDPF->LoadBlock(473,'TILB','MyInput_n')] Warning: datablock was not found in the given DPF.
· [IStuffDPF->LoadBlock(474,'TILB','MyInput_p')] Warning: datablock was not found in the given DPF.
· [IStuffDPF->LoadBlock(475,'TILB','MyInput_o')] Warning: datablock was not found in the given DPF.
· [IButton->Create(0x22fc8c,'MyInput',0,'data/gfx.dpf')] Error: we could not find valid tiles for this kind of button.
· [IStuffDPF->LoadBlock(476,'FONT','MyFont')] Warning: datablock was not found in the given DPF.
· [CFont::Load(data/gfx.dpf,MyFont)] Error: font not found
· [IStuffDPF->LoadBlock(477,'FONT','InputFont')] Warning: datablock was not found in the given DPF.
· [CFont::Load(data/gfx.dpf,InputFont)] Error: font not found

En resumen no me detecta los estados de los botones _n _o _p de ningun elemento del GUI y tampoco las fuentes creo. Pero en el EDitor DPF esta todo  :o

Haber que me decis. Salu2
Título: Primeras Dudas
Publicado por: TheAzazel en 02 de Abril de 2007, 03:21:49 PM
uhmm... cuando descargaste los ejemplos de la web?

hace unas semanas(no se si 1, 2 o mas) me di cuenta que en los ejemplos tuve un desliz y no funcionaban bien.

Al leer lo que te pasa, me entro el panico, he ido y descargado las versiones alli y a mi me funciona todo...

Prueba a bajarte todo y borra lo que ya tengas, deberia de funcionarte a la perfeccion.

Dime si fue asi o no...
Título: Primeras Dudas
Publicado por: [Fonet] en 02 de Abril de 2007, 05:45:28 PM
Los ejemplos me los he bajado hoy, pero esto es lo que he hecho:

He configurado el Dev-C++ con el Paquete de http://www.niltonpd.pop.com.br/ y al crear un proyecto de CRM32Pro se crea automaticamente el BasicCode, para que funcione copié la carpeta data de los ejemplos, pero funciona medio mal.

El color negro del cursor no se transparenta y si lo hace el blanco del fondo, tuve que modificar los valores de transparencia del Editor DPF para que se viese bien porque estan en -1,-1,-1.

No se si estoy haciendo algo mal, pero de todas formas, con lo que estoy haciendo yo me va bien, asi que puede ser algo del dpf.

Salu2
Título: Primeras Dudas
Publicado por: [Fonet] en 02 de Abril de 2007, 05:48:01 PM
Por cierto, en el ejecutable que crea al compilar se ve perfectamente, en lo que estoy haciendo tambien me fallaban algunas cosas y en el ejecutable se ve perfecto, el fallo puede ser el compilador? o el Dev-C++?
Título: Primeras Dudas
Publicado por: TheAzazel en 02 de Abril de 2007, 07:40:09 PM
vale, ya se donde esta el problema.

Si te das cuenta, el devpack que te has bajado de Nilton es de la version 4.91 (algo antiguo) y en la web esta la ultima version, la 4.96.
Acabo de enviar un mail a Nilton para que actualice y ponga un devpack de la 4.96, suele tardar un par de dias asi que...

Por el momento, puedes hacer una mezcla y conseguir que funcione, utiliza el devpack para que te cree todo lo necesario en el DevC, pero luego debes sobreescribir las viejas versiones de la lib con lo descargado de la pagina web. Vamos, todos los .lib, .h, .dll y .cpp (ademas de la ayuda si viene en el devpack), sobreescribelos con los que descargues de la pagina web.

El problema viene que de la 4.91 a la 4.96 hay un monton de cambios y claro, es normal que te de problemas al mezclarlo todo de una forma un poco caotica.
Título: Primeras Dudas
Publicado por: [Fonet] en 02 de Abril de 2007, 09:41:42 PM
Bueno, pues estare mirando haber cuando lo actualiza.

He estado toda la tarde trapicheando y mirandome los foros, y me ha extrañado que no haya, o que por lo menos yo no la haya encontrado una funcion que limpie la pantalla, y haya que recurrir a la funcion Render, la cual   :? no me funciona, como no se si es por lo de las versiones esperaré a que salga el paquete, pero de todas formas pongo aqui el codigo para ver si es otra cosa.

Citar

// ---Includes---
#include "CRM32Pro.h"  
#ifdef _WINDOWS
#include <windows.h>
#endif

// ---Defines---
#define RECURSOS_GFX "data/graficos.dpf"     // Recursos Graficos DPF

// ---Prototipos---
void RenderGraphics(int);

//Variables Globales de Imagenes
SDL_Surface *backgrnd = NULL;

//Variables Globales
SDL_Surface *info, *backinfo, *surfCursor;
CRM32Pro_CFont *fInfo;
SDL_Rect inf, rCursor;
Uint32 last = 0, lastinfo = 0;

   
// -------------MAIN FUNCTION----------------
int main(int argc,char *argv[])
{
   // Variable de Engine
   Uint8       done=0;      // Identificador de salida
   Uint8       juego=0;     // Estado del juego (0 - Menu, 1 - Juego, 2 - Claves, 3 - Creditos)
   Uint32      bNewID, bPassID, bCredID, bExitID, bID;   // ID de Botones
   SDL_Event   event;  
   Uint32      cCursor;     // Cursor (Carga uno por defecto)
   CRM32Pro_CFont *fFont;   // Fuentes
   char        sFont[20];  
   
   //Variables de Juego
   int tablero[8][8]; //Tablero de juego
   
   // - Iniciamos el Log -
   ILogSystem.Init("Prueba.log",LOG_FILE,LOG_NORMAL,"Prueba de Cosas");
   
   // - Inicio de CRM32Pro y SDL -
   if(CRM32Pro.Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) < 0)
   {
    // - Guardamos los errores en el log -
    ILogSystem.Msg(LOG_NORMAL," · [LOG] - No se puede iniciar CRM32Pro: %s\n",SDL_GetError());
    return 1;
   }
   
   // - Configuracion de ventana -
   CRM32Pro.Config.Title = "Prueba de Cosas";
   CRM32Pro.Config.VideoWidth = 800;
   CRM32Pro.Config.VideoHeight = 600;
   CRM32Pro.Config.VideoBPP = 32;
   CRM32Pro.Config.Icon = IImage->Load(RECURSOS_GFX,"smiley");
 
   // - Iniciamos el sistema grafico -
   if(!CRM32Pro.SetVideoMode())
   {
    CRM32Pro.Quit();
    return 1;
   }
     
   // - Iniciamos el "Time System" -
   ITimeSystem->Init();
   ITimeSystem->SetRate(85,20);
   
   // - Establecemos la funcion render -
   CRM32Pro.SetRenderCallback(RenderGraphics);

   //Carga de Imagenes
   backgrnd = IImage -> Load(RECURSOS_GFX,"fondo");
   info = IImage->Load(RECURSOS_GFX,"info");
   inf.x = 6;inf.y = 6;inf.w = info->w;inf.h = info->h;
   backinfo = IImage->Load(RECURSOS_GFX,"info");
   //Carga de Botones
   bNewID = IButton -> Load(RECURSOS_GFX,"new_game");
   bPassID = IButton -> Load(RECURSOS_GFX,"enter_pass");
   bCredID = IButton -> Load(RECURSOS_GFX,"creditos");
   bExitID = IButton -> Load(RECURSOS_GFX,"salir");
   
   //Carga de Fuentes
   fFont = new CRM32Pro_CFont;
   fFont->Load(RECURSOS_GFX,"fuente01");
   strcpy(sFont,"");  
   
   
   
   // - Bucle Principal -  
   while(!done)
   {   
   
      // - Comprobamos eventos de botones -
      bID = IButton->Draw();      
      if(bID == bExitID) done = 1; //Salir
      if(bID == bNewID) juego = 1; //Nuevo Juego
      //if(bID == bExitID) done = 1; //Contraseñas
      //if(bID == bExitID) done = 1; //Creditos        
     
     //------ MENU ------
     if (juego == 0)
     {
      //- Imagenes -
      CRM32Pro.Blit(backgrnd,NULL,CRM32Pro.screen,NULL);
      //- Botones -
      IButton->ForceDraw();
      IButton->Draw();
     }            
     
     sprintf(sFont,"%d",juego);            
     fFont->PutString(CRM32Pro.screen,0,0,sFont);
     // Actualizaciones y eventos del sistema  
     while(CRM32Pro.Update(&event))
     {
        switch(event.type)
        {      
           case SDL_QUIT:
              done = 1;
              break;
           case SDL_KEYDOWN:
              if(event.key.keysym.sym == SDLK_ESCAPE) done = 1;
              break;
        }
     }   
  }
 
  // - Informacion de Tiempo -
  ITimeSystem->Info();

  // - Free resources and exit -
  ICursor->Delete(cCursor);

  // - Saliendo... -
  CRM32Pro.VideoInfo();
  CRM32Pro.Quit();
  return 0;
}


// ------------ FUNCIONES -------------

void RenderGraphics(int bLogicUpdate)
{
  char  sTmp[16];

  // Blit background
  SDL_BlitSurface(backgrnd, NULL, CRM32Pro.screen, NULL);
            
  // Blit information panel: state of collision system and FPS (four times per second)
  SDL_BlitSurface(info,NULL,CRM32Pro.screen,&inf);   
  if((lastinfo + 250) < ITimeSystem->GetTime())
  {
     lastinfo = ITimeSystem->GetTime();
     // Restore original info panel
     SDL_BlitSurface(backinfo,NULL,info,NULL);

     // Frames per second (real time)
     sprintf(sTmp,"%d",(Uint32)ITimeSystem->GetCurrentRFR());
     fInfo->PutString(info,43,23,sTmp);

  }
}


He empezado haciendo un pequeño menu simple, pero me gustaria que desde que cambiase algo no fuese dejando el rastro por toda la pantalla, por eso esta lo del "CRM32Pro.SetRenderCallback(RenderGraphics);".

Pero en Dev-C++ me da un error de Id returned 1 exit status, pero bueno, seguire mirandome la documentación y haber cuando sale el paquete ese.

Salu2
Título: Primeras Dudas
Publicado por: [Fonet] en 02 de Abril de 2007, 09:49:50 PM
Bueno, y tambien sale esto en el error.. que creo que es lo mas importante:

Citar
 [Linker error] undefined reference to `CRM32Pro_Main::SetRenderCallback(void (*)(int))'
Título: Primeras Dudas
Publicado por: TheAzazel en 03 de Abril de 2007, 01:27:40 AM
uhm... no tienes instalada la ultima version de la lib y el DevC te esta cogiendo el CRM32Pro.h de la 4.91 que instalaste con el Devpack.

Hasta la v4.91, SetRendercallback estaba definida asi:
// -Set a callback function to blit your graphics at Rendering Frame Rate-
void SetRenderCallback(void (*myRenderFunc)(void));


que luego cambio para ser algo mas util a:
// -Set a callback function to blit your graphics at Rendering Frame Rate-
void SetRenderCallback(void (*myRenderFunc)(int bLogicUpdate));


Revisa lo que te dije anteriormente y utiliza la ultima version o te seguiran pasando cosas raras.

Respecto a eso que dices de borrar la pantalla... uhm... eso es mas lento que repintar todo de nuevo!!!, basicamente tienes dos opciones, o vas haciendo restores de las zonas que modificas o lo mas sencillo al principio es repintar todo cada frame y asi te quitas de lios. En la libreria, los sprites soportan el "auto restore" al igual que el cursor, el resto, tienes que ocuparte tu del fondo.
Resumiendo: lo mas sencillo al principio es repintar todo cada frame y si al final, tienes problemas de rendimiento(que no lo creo).... ya estudiaras donde esta el problema para arreglarlo.
De todos modos, para que te quedes con la solucion, para rellenar toda la pantalla de un color puedes usar:
SDL_FillRect(CRM32Pro.screen,NULL,0);
saludos!
Título: Primeras Dudas
Publicado por: [Fonet] en 03 de Abril de 2007, 02:01:19 PM
Me he estado fijando en el Dev Package manager cuales eran los ficheros que instala y los he ido sustituyendo uno por uno, ahora ya me va perfectamente, empezare a hacer pruebas con el RenderCallback.

Tambien darte las gracias por la ayuda y por este SDK, que ya me tiene enganchado, por su facilidad y su editor DPF que es lo mejor.

Espero que sigas adelante con el.

Salu2
Título: Primeras Dudas
Publicado por: TheAzazel en 05 de Abril de 2007, 04:03:38 PM
jeje, a ver si Nilton actualiza el devpack y asi evita a la gente problemas de este estilo.

Gracias por los cumplidos, la verdad que se agradecen :)

por el momento quedan varias cosas para un futuro:

1) ScrollEngine, lo necesitamos para un proyecto que estamos haciendo unos cuantos de stratos(PKM06), estoy con el y tiene la mayor prioridad.

2) SetupProject, el pobre hombre esta al 75% de ser finalizado, podria ponerlo en la web porque ya es util para algunas cosas pero prefiero terminarlo :), es posible que antes de verano lo tenga terminado.

3) El dichoso soporte definitivo a glSDL, por ahora, la version para visualstudio lo trae, aunque no es completamente compatible con todo, si podria funcionar en algun caso, vamos, que esta en fase experimental :P

4) Finalmente...el port a Mac, pero para esto no tengo ni idea de plazos...

Esto es todo por el momento!

bye bye
Título: Primeras Dudas
Publicado por: [Fonet] en 05 de Abril de 2007, 04:03:54 PM
Bueno, ya empiezan los problemas mas serios.

Tengo un problema con los sprites, que se inician en el 0,0 y se ve como pasan del 0,0 a la posicion que le pongo con SetPosition.

Alguna idea?

Salu2
Título: Primeras Dudas
Publicado por: [Fonet] en 05 de Abril de 2007, 04:16:26 PM
Pues haber para cuando el ScrollEngine, que supongo que sera algo como el de Torque o algo asi y visto lo visto con lo que ya has hecho sera muy util.

Espero no encontrarme con muchos problemas haciendo el juego que he empezado y que veas algo mas hecho con tu SDK.

Salu2
Título: Primeras Dudas
Publicado por: [Fonet] en 06 de Abril de 2007, 05:13:24 PM
Alguien sabe como solucionar esto?

Citar
Tengo un problema con los sprites, que se inician en el 0,0 y se ve como pasan del 0,0 a la posicion que le pongo con SetPosition.

No quiero parecer pesado, pero solo esta TheAzazel??

Salu2
Título: Primeras Dudas
Publicado por: Vicente en 06 de Abril de 2007, 08:05:55 PM
Creo que Aza está fuera estos días. Un saludo!

Vicente
Título: Primeras Dudas
Publicado por: TheAzazel en 07 de Abril de 2007, 12:55:43 PM
sip! estoy de vacas pero bueno, me he podido conectar 2min a leer noticias de F1 y he visto esto...

uhm... me imagino que estas usando SetPosition(x,y,1) activando de ese modo el suavizado... pues bien, todo lo que tienes que hacer es en el primer frame que dibujes, en vez de utilizar 1, pasa un 0 o nada(por defecto vale 0) para que la posicion tenga efecto inmediato.

bueno, me voy ya antes de que me llamen enfermo :P
Título: Primeras Dudas
Publicado por: [Fonet] en 07 de Abril de 2007, 02:30:06 PM
Muchisimas gracias, no tenia muy claro para que era ese 1, pense que era el frame inicial o algo asi, ahora ya me va perfecto.

Salu2