Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - Martinez

#46
General Programadores / Diferencias Release - Debug VC6
26 de Enero de 2008, 05:19:21 PM
El problema no estaba en el compilador sino en la progrmacion:


template<class T> class Holder
{
   T *pInstance;

   public:
       Holder()
       : pInstance(0) { fputs("Constructor Holder\n",file); }
       ~Holder()
       {
           if(pInstance)
           {
               delete pInstance;
               fputs("Destructor Holder\n",file);
           }
       }
       T* getInstance()
       {
           if(!pInstance)
           {
                pInstance=new T;
           }
           return pInstance;
       }
};

template<class T> class Singleton
{

protected:

   Singleton()
   {

       fputs("Singleton::Singleton()\n",file);
   }
   ~Singleton()
   {
       fputs("Singleton::~Singleton()\n",file);

   }

public:
   static Singleton* getSingleton()
   {
       static Holder<T> holder;
       static Singleton *pInstance=holder.getInstance();
       return pInstance;
   }
};



Y una implementacion:


class CA: public Singleton<CA>
{
   protected:
   friend class Holder<CA>;
   CA()
   {
       fputs("\t\tConstructor CA\n",file);
   }
   ~CA()
   {
       fputs("Destructor CA\n",file);
   }
};

class CB: public Singleton<CB>
{
   friend class Holder<CB>;
   protected:

   CB()
   {
       fputs("\t\tConstructor CB()\n",file);
   }
   ~CB()
   {
       fputs("Destructor CB\n",file);
   }
};



int main()
{
   file=fopen("res.txt","wb");
   fprintf(file,"%d\n",int(time(NULL)));
   CA::getSingleton();
   CA::getSingleton();
   CB::getSingleton();
   CA::getSingleton();


return 0;
}


Salida del ejecutable:

1201364292
Constructor Holder
Singleton::Singleton()
Constructor CA
Constructor Holder
Singleton::Singleton()
Constructor CB()
Destructor CB
Singleton::~Singleton()
Destructor Holder
Destructor CA
Singleton::~Singleton()
Destructor Holder


PD: Ahora lo pruebo en el VS 2005 que esta para el MinGW. Pero deberia funcionar igual. Espero que te sirva, nos vemos.
#47
Programación en red / Precargar imagenes de una web
23 de Enero de 2008, 08:53:21 PM
Sq no lo has guardado como .php
#48
Proyectos / California Office [ Video in-game ]
23 de Enero de 2008, 08:46:37 PM
Aunque quede mas bonito decir reutilizar:

Cita de: "http://buscon.rae.es/draeI/"
re-.

(Del lat. re-).

1. pref. Significa 'repetición'. Reconstruir.

2. pref. Significa 'movimiento hacia atrás'. Refluir.

3. pref. Denota 'intensificación'. Recargar.

4. pref. Indica 'oposición' o 'resistencia'. Rechazar. Repugnar. Significa 'negación' o 'inversión del significado simple'. Reprobar. Con adjetivos o adverbios, puede reforzarse el valor de intensificación añadiendo a re- las sílabas -te o -quete. Retebueno. Requetebién.
#49
Programación en red / Precargar imagenes de una web
23 de Enero de 2008, 08:34:30 PM
YAAAA TAA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Me baje el appserv y lo probe, ya ta arreglado el codigo


<?php$dir_name="appserv";if&#40;is_dir&#40;$dir_name&#41;==false&#41;	return;$dir=opendir&#40;$dir_name&#41;;$pattern="&#40;\.jpg$&#41;|&#40;\.png$&#41;|&#40;\.jpeg$&#41;|&#40;\.gif$&#41;"; //valid image extensions$i=0;while&#40;&#40;$file=readdir&#40;$dir&#41;&#41;!=NULL&#41;&#123;	if&#40;eregi&#40;$pattern, $file&#41;&#41;		$files[$i++&#93;=$file;&#125;if&#40;count&#40;$files&#41;==0&#41;   return;   echo '<script type="text/javascript">'."\n\t".	'window.onload = function&#40;&#41;'."\n\t&#123;\n\t\t".	'var brochure = new Array&#40;&#41;;';for&#40;$i=0; $i<count&#40;$files&#41;; $i++&#41;   echo&#40; "\n\t\tbrochure[".$i."&#93; = new Image&#40;&#41;;"   	."\n\t\tbrochure[".$i."&#93;.src ='".$dir_name."/". $files[$i&#93;."';"&#41;;   echo "\n\t&#125;\n</script>";?>


Hasta te lo he puesto bonito para cuando veas el codigo. Una cosa en dir_name no pongas "midir/" que sino las imagenes se pondrian: midir//img.png
#50
Programación en red / Precargar imagenes de una web
23 de Enero de 2008, 06:36:42 PM
Sq el phpBB no es muy bueno para hacer codigo XD.

<?php$dir_name="midir";$dir=opendir&#40;$dir_name&#41;;$i=0;while&#40;&#40;$file=readdir&#40;$dir&#41;&#41;!=NULL&#41;&#123;   if&#40;/* Si no es una imagen*/&#41;       continue;   $files[$i++&#93;=$file;&#125;if&#40;count&#40;$files&#41;==0&#41;   return;   echo '<script type="text/javascript"> 			window.onload = function&#40;&#41; &#123; 				var brochure = new Array&#40;&#41;;';for&#40;$i=0; $i<count&#40;$files&#41;; $i++&#41;   echo&#40; '   	brochure['.$i.'&#93; = new Image&#40;&#41;; 	brochure['.$i.'&#93;.src =\''.$dir_name.'/'. $files[$i&#93;.'\'';	' &#41;;   echo '&#125;</script>';?>




Me sobraba un comilla simple.
Te deberia salir algo asi:


<script type="text/javascript">
window.onload = function() {
var brochure = new Array();

brochure[0] = new Image();
brochure[0].src ='midir/im1.jpg';
brochure[1] = new Image();
brochure[1].src ='midir/im2.jpg';
}</script>
#51
Programación en red / Precargar imagenes de una web
23 de Enero de 2008, 04:00:18 PM
http://www.haan.net/js/preloader.js
preload('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15');

Lo que hace es crear un array con los nombres de los archivos que le pases asi no tienes que poner /images/1.jpg

This script will preload images to enable your pages to load faster.

Lo que quiere decir que precarga para que la visualizacion sea mas rapida, pero no dice que muestre todas las que hay, de hecho no pone en el documento los tags <img src=...>, por lo que seguimos en las mismas, cada vez que quieras añadir una imagen nueva hay que editar el .js. Si tienes PHP en el servidor usalo como script.



<?php$dir=opendir&#40;"midir"&#41;while&#40;&#40;$file=readdir&#40;$dir&#41;&#41;!=NULL&#41;&#123;    // Evaluar si es una imagen sino continue;    echo '<img src="midir/'.$file.'">';&#125;?>



Resisa el codigo xq me lo he inventado sobre la marcha.


EDIT: Me acabo de dar cuenta que el codigo que he puesto no precarga, sino que carga. Para precargar valdia este codigo:

<?php$dir_name="midir";$dir=opendir&#40;$dir_name&#41;;$i=0;while&#40;&#40;$file=readdir&#40;$dir&#41;&#41;!=NULL&#41;&#123;	if&#40;/* Si no es una imagen*/&#41;		 continue;	$files[$i++&#93;=$file;&#125;if&#40;count&#40;$files&#41;==0&#41;	return;	echo '<script type="text/javascript"> var brochure = new Array&#40;&#41;;';for&#40;$i=0; $i<count&#40;$files&#41;; $i++&#41;	echo&#40; 'brochure['.$i.'&#93; = new Image&#40;&#41;; brochure[i&#93;.src =\''.$dir_name.'/'. $files[$i&#93;.'\';' &#41;;	echo '</script>';?>



Esto debe ir en la cabecera (<head>).
#52
Programación en red / Precargar imagenes de una web
23 de Enero de 2008, 03:34:40 PM
tamat es cierto, yo es que de javascript ni idea.

Realmente si puedes acceder al contenido de una carpeta remota en local a traves del protocolo ftp . Pero claro debes tener y configurar el servidor ftp .
ftp://ftp.rediris.es/

Sin duda lo mejor es apoyarse en un script que se ejecute en el servidor (por ejemplo PHP) y pasarle a javascrit un array con el contenido de la carpeta.
#53
Es una forma valida, Ogre y CEGUI la usan, al metodo GetInstance le llaman getSingleton. Una cosa NO HAGAS delete engine en todos los destructores de las clases. Te pongo un ejemplo:

1 - cGame crea cMenuItem

2- cMenuItem llama a cEngine::GetInstance por lo que se crea la instancia.

3 - cGame borra cMenuItem. cMenuItem borra la instancia de engine con delete engine en su destructor. Pero cEngine no lo sabe y tiene un puntero apuntando a una zona de memoria que ha sido liberada!!!

4- cGame crea otro objeto llamado cBoton.

5- cBoton hace lo siguiente cEngine::GetInstance()->apply_surface

6- CRASH!!!!!!!!!!!!!!!

Para borrar la instancia de cEngine crea otro metodo estatico Delete y lo llamas al salir del programa. Recuerda que los punteros apuntan a zona de memoria, y aunque esta se libere estos siguen apuntando a esa zona de memoria.
#54
Programación en red / Precargar imagenes de una web
23 de Enero de 2008, 02:59:11 PM
Busca a ver si exite una funcion parecida a opendir en JavaScript, abres el fichero y lees todos los archivos, y si es una imagen la muestras.

Si el servidor tiene PHP es sencillo, en esta web tiene un ejemplo:
http://www.javascriptkit.com/javatutors/externalphp2.shtml

Funcion opendir:
http://es2.php.net/function.opendir
#55
Proyectos / California Office [ Video in-game ]
23 de Enero de 2008, 11:37:21 AM
Te esta quedando genial. Ahora si la calavera-antorcha parece que esta sobre el puente. La hierba teha quedado fenomenal!! mola la que esta sobre la calavera de la derecha.

Yo me referia ha poner el suelo del bar de piedra nolalava, XD!!

Averque tal te queda la lava.
#56
Otro link soble tilesmappingen español:
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
#57
Al poner el flag doble buffer es como tener 2 superficies en una. Al dibujar en la superfice dibujas en la parte que no se muestra,y al hacer el flip se intercambian. No tienes que crear superfices intermedias. Al hacer flip, no solo intercambia los bufferes ademas actualiza toda la pantalla.

Citarpintaria TODAS las imagenes en la surface principal y despues hago flip y listo.

Exacto.


Sobre la poo:




cEngine::cEngine()
{
     sBuffDisplay =SDL_CreateRGBSurface(....);
}


Si creas el buffer en el constructor del engine cada vez que hagas cEngine engine se creara una superfice diferente. Como arreglarlo:

en cGame cuando crees el resto de elemetos hazlo asi:

cMenuItem menu_item(&engine);

y el constructor de clase deberia ser:

cMenuitem(cEngine *pEngine);

Como es logico deberas guardar en puntero en una variable de la clase. Hay mas formas, como que todos los metodos y atributos de cEngine sean estaticos.
#58
Proyectos / California Office [ Video in-game ]
22 de Enero de 2008, 03:18:45 PM
Prueba a hacerlo de piedra. Me gusta las texturas que le has puesto a las calaveras.

Sobre la calavera-antorcha no se.... me da la impresion de que esta flotando en el aire y no pegado al puente, aunque me encanta el humillo que suelta XD.
#59
He entendido que haces lo de la superfice para evitar el parpadeo, para eso usa el SDL_DOUBLEBUF. y cuando termines de dibujar usa la funcion SDL_Flip.

Posiblemente el problema este en como llames a cEngine en el resto de los objetos. Debes utilizar un puntero a la instancia de cEngine que creaste en cGame.

Sobre tutoriales de OpenGL: http://nehe.gamedev.net/http://nehe.gamedev.net/

En esos tutoriales no se muestra a usarlo con SDL lo unico que tienes que hacer es poner esto:
// Atributos de OpenGL
   SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 );
   SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );
   SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 );
   SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 );
   SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16);

   SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );

// Creamos la ventana
if((pWindow=SDL_SetVideoMode(ancho,alto,bpp, SDL_OPENGL))==NULL)
throw std::exception("No se puede crear la ventana");


Y despues del render poner SDL_GL_SwapBuffers() en vez de SDL_Flip. Mira la funcion SDL_GL_SetAttribute  en SDL wiki para mas informacion, ya que hay mas parametos. Por cierto esta configuracion me la he inventado, no se cual es la mas optima
#60
Programación gráfica / Configuración Ogre3D con Dev-cpp
22 de Enero de 2008, 09:55:52 AM
Cuando el compilador no encuentra una libreria para el proceso. No puedes añadir el path absoluto a la libreria y a la vez poner -lOgreMain. Xq si falla -lOgreMain aunque este bien el otro apartado se parara la ejecucion.

Las librerias son como los .h, el compilador las busca en los directorios que le hemos configurado. Por defecto c:\DevCpp\lib. Asique mete OgreMain.dll en esa carpeta o añadir la direccion de bibliotecas en Opciones del proyecto > Directorios > Dir. Bibliotecas.

No pongas por defecto que el compilador linke con una biblioteca, ya que puede que luego hagas un proyecto que no la usa. Puedes configurar el compilador para que busque en una serie de directorios.

Leyendo me he dado cuenta que te va a ser dificil o casi imposible hacerlo con DevCpp. Mis recomendaciones:

Eclipse: Yo lo hice con este EDI y funciona muy bien.
http://www.ogre3d.org/wiki/index.php/Eclipse_MingW

CodeBlocks: Ahora lo estoy usando y es un poco menos malo que el Dev
http://www.ogre3d.org/wiki/index.php/Codeblocks_and_MinGW

Visual Studio Express: La mejor opcion.

Mi consejo es que desinstales el SDK de Ogre y sigas una de esas guias.





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.