Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Primeras Dudas

Iniciado por [Fonet], 02 de Abril de 2007, 01:32:07 PM

« anterior - próximo »

[Fonet]

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]

[Fonet]

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

TheAzazel

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...

[Fonet]

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

[Fonet]

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++?

TheAzazel

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.

[Fonet]

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

[Fonet]

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))'

TheAzazel

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!

[Fonet]

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

TheAzazel

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

[Fonet]

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

[Fonet]

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

[Fonet]

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

Vicente

Creo que Aza está fuera estos días. Un saludo!

Vicente