elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda con mapeo de imagen
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con mapeo de imagen  (Leído 2,151 veces)
hackkpo1

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda con mapeo de imagen
« en: 24 Julio 2013, 17:44 pm »

Solicito ayuda con un proyecto para la universidad. Resulta que estoy programando un juego llamdo knightmare y tengo un problema, nose como determinar que zonas son "caminables" por el personaje y cuales no, si vieron el video, hay unas columnas a los dos costados y un rio aparece cada tanto (donde solo puede caminar sobre el puente).

Ya lo tengo bastante avanzado, tengo el "jpg" del nivel 1 y 2, y lo que hago es mostrar en la ventana el final del mismo, para luego ir restandole pixeles al eje Y (y asi dar la sensacion de que el fondo se va moviendo para abajo constantemente). Tuve un par de ideas de como programar las zonas no caminables, pero siempre llego a un punto en que es imposible que funcione por tal o cual causa.

En fin, espero haberme explicado bien, cualquier idea me viene bien xq ya me tiene cansado pensar formas y "chocar contra la pared" :P. Saludos, despues tengo otra consulta mas para hacer, pero quiero resolver esto primero.


En línea

eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Re: Ayuda con mapeo de imagen
« Respuesta #1 en: 24 Julio 2013, 18:58 pm »

Buenas tardes:

Normalmente cuando se pregunta una duda posteas lo que llevas hecho, o al menos la especificación aunque no muestres los detalles de implementación para que nos hagamos una idia. Por cómo lo has descrito voy a suponer que te refieres a este juego: https://www.youtube.com/watch?v=2btqbTFtwSo

Debes dividir el mapa en un array bidimensional donde en cada posición hay un objeto de la clase "Terreno":

Terreno: ¡No es el suelo de todo el mapa! sino que es un fragmento del mapa y va a tener las siguientes variables:

int x;
int y;
boolean caminable;
Image imagen; (Este tipo no es real, aqui depende del que tú uses para cargar la imagen).

Cuando crees un objeto de tipo "Terreno", sus valores "x" e "y" definirán en qué posición del mapa se encuentra y la variable "caminable" nos dirá si el personaje puede pisarla o no. Por tanto tu mapa se dividirá en un montón de objetos "Terreno" de la siguiente manera:

T = Objeto de tipo Terreno

T T T T T T T
T T T T T T T
T T T T T T T
T T T T T T T
T T T T T T T
T T T T T T T
T T T T T T T
T T T T T T T
...
(Será tan largo como objetos terreno añadas).

Cuando tu personaje se vaya a mover, hará la siguiente comprobación:

Código
  1. if (terrenoActual.adyacente(direccion).caminable == true) //Movemos el personaje si se cumple la condición, sino no hará nada

terrenoActual es una variable que debes añadir al PERSONAJE que apunta al terreno en el que se encuentra posicionado en este momento, cada vez que muevas el personaje cambias su valor a la nueva posición.

terrenoActual.adyacente(direccion) es un método que devuelve el terreno adyacente en la dirección que le pases (debes implementarlo).

terrenoActual.adyacente(direccion).caminable -> Ahora que tenemos el terreno adyacente, por ejemplo, el personaje se quiere mover hacia arriba, y por tanto el terreno que hemos obtenido con terrenoActual.adyacente(direccion) es justo la posición de arriba, comprobamos si la variable caminable es igual a true (es decir se puede caminar sobre él), sino no hará nada el personaje y se quedará en la misma posición.

Si no has comprendido alguna cosa comenta. Ten en cuenta que esto es la base de los videojuegos en dos dimensiones, el 90% de los juegos 2D utilizan este sistema de colisión de mapas con objetos no movibles.

Un saludo.


« Última modificación: 24 Julio 2013, 19:01 pm por eleon » En línea

hackkpo1

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda con mapeo de imagen
« Respuesta #2 en: 24 Julio 2013, 19:53 pm »

Primero perdon que no deje link al video del juego al cual le estoy haciendo la "remake", crei haberlo hecho, pero esta mas que claro que no jaja. El juego es ese justamente pero solo que no "uso" el de PC sino de la mitica MSX



Voy a intentar desarrollar lo que propones, cualquier cuestion, consulto nuevamente. Pero hay algo que no me cerro, un "terreno" de los q decis vos, seria solo un pixel?? es decir solo una coordenada "x,y" ?

PD: Aca te dejo el codigo q tengo desarrollado y la carpeta res donde estan las imagenes utilizadas.

http://goo.gl/56FbRr

Muchas gracias!
En línea

eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Re: Ayuda con mapeo de imagen
« Respuesta #3 en: 24 Julio 2013, 20:36 pm »

Cada bloque "Terreno" sería algo así:



Los atributos (x, y) nos dicen dónde hay que colocarlo. Por ejemplo: (x =2,  y = 3) hay que colocar este bloque en la columna número 2 fila número 3:

T X T T T
T T T T T
T T T T T

Siempre comenzando a contar desde abajo que es el inicio del mapa y por tanto del plano de coordenadas.

La diferencia entre un bloque y otro según los atributos que te he indicado yo (tendrás que añadir otros dependiendo de cómo funcione tu juego) son:

Código
  1. int x; //Le dice al mapa en qué columna colocar este bloque
  2. int y; //Le dice al mapa en qué fila colocar este bloque
  3. boolean caminable; //Le dice al jugador si puede colocarse encima de este bloque o no
  4. Image imagen; //La imagen del bloque que será: Suelo, Rio, Puente, etc.

Los objetos que hay encima del terreno (la columna, la llama, etc) hay dos formas de trabajarlos:

1- Colocarlos del mismo modo que resto del terreno (solo tendrás que asignar en la variable "Image imagen" la imagen de la columna) pero esto tiene un problema:

Las imagenes todas tienen que tener el mismo tamaño. ¿Qué pasa si quiero hacer un objeto más ancho o alto que otro?. Ejemplo: La columna es el doble de alta que un bloque de suelo o rio -> tendrás que dividir la columna en 2 imágenes: parte superior y parte inferior y se quedaría así:

T T T C T
T T T C T

Al colocar la mitad superior encima de la mitad inferior crearás una columna completa. Pero todas las imágenes tienen que tener el mismo tamaño o el mapa aparece con "blancos" aunque esto seguramente ya lo tendrías estudiado.

2- Otra forma de hacerlo es crear primero el terreno únicamente con: Suelo, Rio y Puente y a partir de ahi colocar encima los objetos (si imprimes el suelo en una posición y luego imprimes la columna en la misma posición se ve la segunda imagen encima de la primera, por tanto no habría ninguna complicación en este aspecto). Aqui no haría falta que todas las imágenes tuvieran el mismo tamaño pero crea otro problema: Si has imprimido el suelo que es "caminable" y encima imprimes la columna que no es "caminable" cuando el personaje intente pasar por encima tendrás tratar el código de manera que se tenga en cuenta que no se puede pasar por esa posición porque hay una columna que no se puede atravesar aunque el suelo si sea atravesable.

Cualquier duda comenta.
« Última modificación: 24 Julio 2013, 20:46 pm por eleon » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mapeo de impresoras en red por usuarioa « 1 2 3 4 5 »
Scripting
efer27 44 21,444 Último mensaje 1 Mayo 2011, 12:01 pm
por efer27
Mapeo de Fichero
ASM
Иōҳ 3 3,990 Último mensaje 10 Diciembre 2011, 12:38 pm
por Eternal Idol
Mapeo de unidades de red desconectadas.
Redes
Chernova 0 2,319 Último mensaje 24 Mayo 2012, 14:53 pm
por Chernova
mapeo de red con foca
Redes
Pirat3net 0 1,515 Último mensaje 25 Octubre 2012, 14:57 pm
por Pirat3net
mapeo de programa
Hacking
c3r0x 4 3,082 Último mensaje 8 Marzo 2014, 00:30 am
por unknwn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines