Programación Específica > DirectX
Tiles
sk8erlucas:
Estuve investigando como usar tiles y no encontré nada, lo que quería saber es como usarlos, necesito crear un lugar largo y no me parece buena idea hacer un BMP de tan gran tamaño.
Así que investigué y decubrí que hay una técnica llamada tiles para hacer eso, el método es reemplazar una letra o número por un cuadrado, así se puede hacer el mapa en forma de texto. El problema es que no sé como copiar el sprite a otra superficie, y no sé si hacer tantos sprites (Uno por cuadrado por cámara).
Estoy seguro que hay una forma general de hacerla de la que todos parten al principio, si alguien la sabe me sería de mucha ayuda que me la diga.
JuanK:
Bueno seria muy bueno que nos contaras en que lenguaje estas trabajando, para asi mirar lo de la copia en difderentes superficies, tenia un ejemplo en VB pero se me perio tratare de conseguirolo para la proxima semana.
Amilius:
--- Cita de: "sk8erlucas" --- Estuve investigando como usar tiles y no encontré nada, lo que quería saber es como usarlos, necesito crear un lugar largo y no me parece buena idea hacer un BMP de tan gran tamaño.
Así que investigué y decubrí que hay una técnica llamada tiles para hacer eso, el método es reemplazar una letra o número por un cuadrado, así se puede hacer el mapa en forma de texto. El problema es que no sé como copiar el sprite a otra superficie, y no sé si hacer tantos sprites (Uno por cuadrado por cámara).
Estoy seguro que hay una forma general de hacerla de la que todos parten al principio, si alguien la sabe me sería de mucha ayuda que me la diga.
--- Fin de la cita ---
Si puedes copiar una superficie a la superficie de render no veo por que no puedas copiar una superficie a otra, es con la misma función. Si no estás usando 3D mejor si colocas TODAS tus superficies en RAM al momento de crearlas para que todo vaya más rápido en la mayoría de las máquinas.
Para los tiles (generalmente 32x32 pixeles o potencias de 2) utilizo una superficie con varios tiles ej: 512*512 y 256 tiles de 32x32 pixeles. Luego para copiarlos utilizo un simple cálculo para determinar el rectángulo "origen" en la superficie de tiles, que puedes optimizar con desplazadores si utilizas anchos de tiles que sean potencias de 2. De esta forma un byte representaría a uno de los 256 tiles.
Saludos.
sk8erlucas:
Bueno, estuve probando y como que inventé un método para cargar los tiles en memoria. Espero que a alguien le sirva:
void CargarMapa(char *NombreArchivo)
{
int aux;
ifstream CanalEntrada(NombreArchivo);
CanalEntrada >> vel_mapa;
bool seguir = true;
while(seguir == true)
{
char caracter;
CanalEntrada >> caracter;
columnas++;
if (caracter == 'Q')
{
columnas = 0;
filas++;
}
else if (caracter == 'F')
{
columnas--;
filas++;
seguir = false;
}
}
ifstream CanalEntrada2(NombreArchivo);
bloque = new st_bloque*[columnas];
for (int i = 0; i < columnas; i++) bloque = new st_bloque[filas];
float contX = 0, contY = 0;
CanalEntrada2 >> vel_mapa;
if (aux == 1) moverArAba = true;
else moverArAba = false;
for (int fila = 0; fila < filas; fila++)
{
for (int columna = 0; columna < columnas; columna++)
{
char caracter;
CanalEntrada2 >> caracter;
if (caracter == 'Q') CanalEntrada2 >> caracter;
setCaracter(caracter, columna, fila);
bloque[columna] [fila].PosX = contX;
bloque[columna] [fila].PosY = contY;
contX += 40;
}
contX = 0;
contY += 40;
}
}
Claro que en el .txt se encontrará la velocidad y luego el mapa, las q nos dicen que se ha llegado al fin del renglón y las f nos dicen el fin del archivo.
jaal2000:
Esta técnica fué utilizada por muchos juegos 2D (saga Última, Diablo, Warcraft, etc.), especialmente los que tenían vistas isométricas, "top down" o lateral (como los juegos de plataformas).
¿Qué es un mapa de bloques? (tile maps)
Es una matriz bidimensional que contiene en cada elemento la "descripción"
de una pequeña parte de un gran mapa. En un juego, por ejemplo uno de vista
cenital (desde encima), el mapa podr¡a ser el siguiente:
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 0 0 0
0 0 1 0 0 0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0 0 1 0 0 0
0 0 1 1 1 2 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
el cual describe una habitaci¢n o un recinto cerrado, en esta matriz los
"0" son el suelo, los "1" son paredes y el "2" es una puerta. Ahora, si
implementamos un algoritmo que lea esta matriz e interprete cada elemento,
para luego pintar imagenes en vez de ceros y unos, lo que se lograría es
dibujar un mapa convincente. Lo que se hace es ir tomando cada elemento de
la matriz y, según su valor, pintar determinada imagen (bloque). En el
ejemplo anterior al leer un "0" se dibuja un bitmap que contiene la imagen
de un trozo de suelo, al leer un "1" se dibuja un pedazo de pared y al leer
un "2" se dibuja una puerta.
En http://es.geocities.com/jaal81/Zip (EM2.zip), puedes encontrar un sencillo editor de "tile maps", que incluye todo el código fuente. Y si quieres puedes bajar esta pequeña (y antigua), pero útil, librería de gráficos para obtener código fuente acerca de los tile maps: http://es.geocities.com/jaal81/Zip (Lib13H.zip)
Navegación
[#] Página Siguiente
Ir a la versión completa