Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





How to use CTile (for beginners)

Iniciado por TheAzazel, 18 de Octubre de 2006, 03:18:59 PM

« anterior - próximo »

TheAzazel

Antes de que venga mas documentacion detallada, os pongo aqui los conceptos basicos.

Un tile es una imagen con algunas propiedades especiales, la mas sencilla es que puedas asignar una posicion, en esta caso sera como blitear una superficie a una posicion especifica.
Ademas, un tile tiene la propiedad que soporta y se autorecupera si la superfice por hardware se pierde, tal y como ocurre en windows cuando se hace un CTRL+TAB y se vuelve despues a la aplicacion.
Por lo tanto, es preferible usar CTiles para cualquier imagen(fondo de menus ,etc..) que CImage que solo es un cargador de imagenes.

Para crear este CTile tan basico podemos proceder:

-desde codigo:

CRM32Pro_CTile *mitile;
mitile = new CRM32Pro_CTile();
mitile->Create(surface o fichero grafico, nombre del tile);
mitile->SetPosition(500,310);

-o usando el EditorDPF:

CRM32Pro_CTile *mitile;
mitile = new CRM32Pro_CTile();
mitile->Load("midpf.dpf","EjTS");
El colorkey que hay que introducir en el EditorDPF es el codigo en decimal del triplete RGB deseado, es decir, si teneis el fondo con 0xFF,0x00,0x00 en RGB, eso lo podeis poner en una calculadora en hex como 0xFF0000 y ese numero lo convertis a decimal. Se que es un poco engorroso por ahora, lo cambiare para que sea mas simple y sencillo.


Y ahora para usarlo desde codigo:

Para dibujarlo en la posicion actual mitile->Draw(); o si deseamos volcarlo a otra surface que no sea CRM32Pro.screen, usamos mitile->Draw(my_surface);

Y por ultimo, lo eliminamos con un delete mitile;


Pero un tile tambien puede ser un tileset, es decir, una imagen que contiene muchos elementos (llamados tambien tiles del tileset) que podemos dibujar segun queramos. Normalmente los mapas de los juegos estan dibujados usando tiles que residen todos juntos en un mismo tileset.
De este modo, el dibujado es muy rapido y optimo.

Para crear un tileset, desde codigo o el EditorDPF, debemos indicar el offset o tamaño de cada tile dentro del tileset. Este tamaño debe ser el mismo para todos los tiles y por ahora, debe ser cuadrado, es decir, la coordenada X e Y deben de ser iguales.

Siguiendo con el ejemplo anterior, en este capture podreis ver como hacer un tileset de 4 tiles de un tamaño de 32x32

Naturalmente, podreis crear un tileset desde codigo usando la funcion:
mitile->SetTileSet(0 para desactivar un tileset o 1 para activarlo,el offset o tamaño de cada tile)
Solo en el caso que el offset dado sea valido(es decir, divida por el, el tamaño x e y de la imagen usada) se creara el tileset y apartir de ahora para dibujar cada tile independientemente hay que indicarle a Draw() que tile queremos volcar:
mitile->Draw(CRM32Pro.screen, nº del tile)
Teniendo en cuenta que la numeracion empieza desde 1 hasta el numero que haya y estos numeros son sus posiciones de izquda a decha y de la fila mas superior hacia abajo.

Lo normal cuando volcamos un mapa, seria un bucle recorriendo nuestras casillas comprobando que tipo de tile lleva, despues se asignaria la posicion con un mitile->SetPosition() y luego se dibuja el tile en cuestion con mitile->Draw(CRM32Pro.screen,nº del tile asociado a esta casilla).

No tenia mucho tiempo para hacerlo todo mejor y mas bonito pero bueno, de fijo que ahora se entiende mejor que antes que estaba un poco mas oculto...si alguien sabia que era esto lo podria entender pero si se es nuevo, es mas dificil entenderlo :)

TheAzazel

El de los sprites lo dejo para la proxima semana, si alguno se anima a hacer uno de CSprites parecido a este... adelante :)

warwolf

Cita de: "TheAzazel"Por lo tanto, es preferible usar CTiles para cualquier imagen(fondo de menus ,etc..) que CImage que solo es un cargador de imagenes.

Mmmm entonces te lo pregunto de otra manera. ¿Cuando es aconsejable utilizar CImage? ;)

TheAzazel

Aprovechando 5 minutillos de ocio en el curro...

CImage, o mejor dicho IImage jeje que me equivoque en el nombre en el otro post, es solo un cargador de formatos externos, por ahora es un poco bobo puesto que solo lee/exporta BMP pero tras algun mail que he recibido pidiendo que directamente soporte PNG y TGA lo voy a extender para que tambien los cargue/exporte.

Y la razon por la que IImage puede leer o escribir imagenes en un DPF pues fue para poder almacenar todos los tipos de recursos.
Utilidad tiene si por ejemplo sabes de antemano que solo vas a usar aceleracion por software, en este caso, puedes almacenar tus fondos y demas como imagenes sin preouparte de si se perdera por el rollo de directx o no.. tambien sirve para guardar el icono.

Ya ves que en general, es solo una interfaz sencillota e integrada con los DPF para poder cargar/exportar formatos de imagenes.

Saludos






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.