miércoles, 27 de junio de 2007

el chat .

Hola .

Hay una pregunta que me hace todo el mundo repetidamente : pero ... ¿ tú en casa trabajas ? . Lo segundo que dicen siempre es ... yo no podría . Jaja , no os imaginais la cantidad de gente que tiene esa reacción , por eso quiero comentarlo . Básicamente sí trabajo . Mi horario es de 10 a 1 y de 7 a 10 todos los dias ( incluido fines de semana ) . no soy rígido en el horario , hay mañanas/tardes que no puedo estar en casa , a veces trabajo por la noche ... pero básicamente trabajo , de forma constante y bastante bien . Ahora mismo no estoy estresado ni preocupado ( auqnue quizá deberia ) , simplemente avanzo poco a poco .

Ahora estoy en Morata ( esperando al día 3 que cojo avion a tenerife ) . He colgado una barra del techo del porche ( para entrenar kite ) , y al fin me ha salido un handlepass , consigo pasarme la barra en el aire!! , jeje . este verano espero poder hacerlo en el agua . Llevo mucho tiempo intentandolo , y como lo consiga en el agua ya es que seré un "crack" :) .

Estoy haciendo el interfaz del chat , y me surge un problemilla de diseño . He puesto la caja de chat fija en el juego y semitransparente ( todo muy al estilo wow) , cuando escribes texto aparece el texto en la barra del chat , cuando pulsas enter el texto va a la caja de texto del chat .Hay unas flechitas arriba abajo para poder navegar por el historial del chat ( puedes dejarlas pulsadas , se marcan cuando pasas el cursor ... todas esas chorradas que parecen obvias pero hay que hacer ) .
Primer problema : no puedes usar wasd para moverte , porque si escribes 'a' , por ejemplo , lo que ocurre es que en el chat aparece una 'a' , no que el personaje gira a la izquierda . tienes que moverte con las flechas .

segundo problema : no puedes mover el cursor por la barra del chat . Es decir , si escribes "hola x que tal estas" y , antes de pulsar enter quieres cambiar x por y , no puedes ir a la x borrarla y poner y , sino que tendrias que borrar todo hasta la x y volver a escribirlo . Esto es porque las flechas del teclado están para mover al personaje , no para mover el cursor .

La solución obvia esto es manejar el "focus" del chat como el wow . Si el focus esta en el chat , las teclas mueven el cursor y a es a . Si el focus esta fuera del chat 'a' e izquierda giran al personaje .
Pero el caso es que me parece lioso este sistema de focus , y este juego quiero que sea super sencillo de usar .
Prefiero que la gente solo tenga que escribir y enter para chatear , sin preocuparse de donde esta el focus , y es lo que vo a intentar .

Hay algun problemilla más .

¿ que opinais ? .

jueves, 21 de junio de 2007

el médano


Hola .

Irene había pedido una beca de trabajo de 2 meses en el aeropuerto sur de tenerife .

El médano es un sitio muy famoso de kitesurf , y que está a unos 2-3 km del aeropuerto . Hay viento prácticamente todos los dias entre mayo y octubre ( alíseos ) .

El caso es que le han dado la beca , y nos vamos julio y agosto al médano a vivir . Ya tenemos los billetes de avión ( yo del 3 de julio al 28 de agosto ) y una casa alquilada . Se puede ir andando hasta la playa de las cometas .

Me llevo el portatil para trabajr desde allí y tendre internet , porque tengo la conexión esa movil de datos de vodafone .

¡¡¡ no se presenta mal la cosa !!!!!

Por otra parte , estoy con la gui ( interfaz grafica de usuario ) , es decir , con botoncitos iconitos y maquetaciones . He decidido hacerme yo mismo todos esos graficos , y luego cuando estén acabados decentemente hacer que algún grafista los mejore :) creo que va a ser lo mejor .
un saludo !

lunes, 11 de junio de 2007

gus busters

Hola ! .
http://www.cazasubmarina.com/gusbusters/gusbusters.zip
Pues eso , he acabado de pasar a c++ directx a gus . Me estoy haciendo un experto en conversiones movil-pc :) . Es básicamente un infierno pasar un proyecto algo grande de java a c++ , pero con paciencia todo se puede .

Al final usé ID3DXSprite y ID3DXLine . Los graficos : de momento están los que hice para s60 , auqnue probablemente en city life ponga unos gráficos algo más grandes ( es facil hacer una versión mayor , lo que pasa es que los graficos los tendré que cambiar de tamaño yo mismo ) . Tambien se puede cambiar el tamaño de la ventana ( podeis probarlo ) , pero claro , pierde calidad .

El recordstore lo he cambiado por un fichero de datos .

Conseguí meter en el ejecutable todas las imágenes del juego , asi no tengo que pasaros un montón de ficheros ni poner un instalador . todo en el ejecutable ! . Como en total ocupa solo 284 kb con gráficos y todo , pues merece la pena .
Lo he hecho metiendo todos los ficheros en el fichero de resources del ejecutable , con el visual studio . me creé un CUSTOMRESOURCETYPE ( un tipo de recurso propio ) , meti ahi todas las imagenes como informacion binaria , y luego recupero un puntero a esos recursos y su tamaño , y de ahi creo las texturas para los sprites . Bueno , he hecho lo que he podido explicandolo . Si os interesa , pues preguntais :) .

Gus lo he convertido porque en city life podrás con tu personaje comprar niveles del juego y jugar en el ordenador de tu casa .

A Gus había que reaprovecharlo !!! .

Debo una disculpa a Gonzalo , porque hablamos hace un tiempo de pasar a Gus a la ds . Le dije que yo de todas formas tenía que pasarlo a c++ ... pero no me dio tiempo a hacerlo antes , lo siento ! .

Ya me habeis comentado que el juego necesita una dll ( d3dx9_33.dll) . Qué cachondos son los de microsoft , qué cachondos ... en las releases nuevas del sdk de directx están cambiando d3dx9 , arreglando bugs o lo que sea . Y esto ( directx) tiene una arquitectura COM , y son unos chapuzas de narices , así que lo que hacen es incluir una dll distinta en cada release de directx ... bueno , para gus ya no me como más la cabeza .. ya lo solucionaré en city life . Además , esa dll que os paso es redistribuible ( tiene licencia para redistribuirlo sin problemas , a ver qué va a hacer Microsoft si no ... ) .
Os paso un zip con el juego y la dll para que lo podais probar .

AH ! como curiosidad , una cosilla que he intentado : incluir la dll en el ejecutable y extraerla en c:\windows\sys32 . funciona bien excepto por un pequeño problemilla : que el ejecutable busca la dll antes de llegar al codigo en el que extrae esa dll , jaja ! . Se puede hacer , pero voy a ponerme ya con otra cosa , esto no lo necesito para city life , solo para gus .

nos vemos !




Un saludo .

jueves, 7 de junio de 2007

sprites de la GUI

Hola ,
hace bastante que no actualizo el log , así que allá voy .
Como os conté , conseguí hacer funcionar las animaciones ( leer correctamente los .x , utilizar el sistema de jerarquias de bones para animar el esqueleto , pasar suavemente de unas animaciones a otras ... ) y estructurarlas bien ...
A continuación hice el movimiento básico del personaje , y luego cargue un escenario y lo rendericé . Así que tengo un persoanje moviendose por una habitación ( con dos animaciones : una parado y otra andando ) . Después me metí un poco con las colisiones y colisiona con las paredes ( aunque no tengo acabado lo de las colisiones , solo colisiono el escenario con un rayo en direccion al movimiento , y tendré que hacerlo con un bounding box o sphere probablemente para que vaya bien en todos los casos ) .
AH ! ahora que me acuerdo ... creo que me pasé un par de días por lo menos con un problema que encontré : a veces se veia mal el personaje , aparecían "rayas" en la textura de algunas partes , y en algunas posiciones el personaje tenía como "huecos" y pequeños fallos . Lancé programas de ejemplos , el visualizador de directx ... y no parecían tener problemas . Bueno , ¡ pues a jugar a encuentra las diferencias! , a ver dónde estaba yo metiendo la pata .
Este tipo de fallos , pequeños y que pueden estar en cualquier parte son los más complicados . Debugueé todo , rendericé de mil maneras distintas ... lo típico , una locura , lo puse todo patas arriba . Al final el problema era el formato del depth buffer : lo tenía como d16 , y con eso parece ser que el depth buffer no tiene precision suficiente ( 16 bits ) . Así que algunos pixels el z-buffer pensaba que estaban "por detrás" cuando en realidad estaban "por delante" y sí había que renderizarlos . con el formato d24X8 tiene más precisión y se ve bien .

Bueno , lo más interesante : me he metido con el 2d . Renderizar una imagen en 2d . Tenía creada una clase ( graphics2d ) , que a partir de una textura la renderizaba en x,y con w anchura y h altura . La que usé en la aventura de numa . Como habreis visto en la aventura de numa las imagenes 2d se ven como un poco "borrosas" , y eso es lo que quería solucionar , ver qué pasaba . Porque para la aventura de numa vale , epero para este juego no puede ser .

Me metí con el ID3DXSprite de directx . Muy facil de usar , pero ¡ me seguía pasando lo mismo !! . Las imagenes salen algo borrosas , no respetan el pixel original . Es más , con el ID3DXSprite , ( no tienes que especificar el tamaño) , ¡ me renderizaba la imagen a un tamaño distinto del original ! .

Estaba claro que en algún momento la imagen se reescalaba o pasaba un filtro y por eso pedía nitidez .

A partir de ahí el caos : implementé como 3 sistemas distintos de renderizar en 2d , probé todos los estados de filtros , usos del mipmapping , opciones de render y texture addressing , tamños de ventanas , formatos del backbuffer ...

Por internet una risa : a todo el mundo le parece super difil rotar una imagen con el ID3DXSprite , pero a nadie le importa la perdida de pixeles del render ( también podría pensar que nadie metia la pata donde yo ... pero no se que decirte , he ejecutado ejemplos que se veian mal ... ) .

Bueno , ya me he alargado mucho , así que intento resumir : mirando distintas formas de crear la textura ( que es uno de los parametros de ID3DXSprite ) , pensé que podría estarse reescalando la imagen en la tarjeta a tamaños de potencia de 2 ( porque algo pone en la documentación , aqune no exactamente así ) ... bingo !! .
altura y anchura tienen que ser potencia de dos . Siempre meto las texturas para 3d en potencias de 2 de tamaño , pero si les cambias el tamaño no pasa nada , no se nota nada extraño . Pues lo que hace directx es hacer una imagen tamaño potencia de 2 y reescalar la imagen original a eso . En 3d es un problema de memoria y rendimiento , pero en 2d se nota visualmente .
Así que para no perder tanto espacio me tocara hacer el 2d en plan móvil : en una imagen meter muchos sprites , y luego renderizar solo el x,y,w,h del sprite que necesito .
Según la documentación esto depende de la tarjeta grafica que sea .
una imagen de 32x1024 se vería bien , no se reescala . Pueden ser distintos valores anchura y altura .

Bueno , todo esto parece una tontería , pero creedme : lo que he escrito aquí os podría ahorrar días de locura .

un saludo .