Hola amigos, hoy vengo con una gran duda.
estaba pensando en como se podria crear colisiones al estilo pacman con muchas paredes, al estilo pacman xD , normalmente las colosiones o se hacen en los limites (paredes )o a un objeto (generelmente cuadrado) pero si es algo asi ?
Gracias por su ayuda.
Ejemplo
Si no me equivoco, ese codigo, junto a estas dos imagenes deberia de producirte los resultados deseados. Teniendo en cuenta el sistema de movimiento de pacman las colisiones deberian de funcionar como deben incluso al ser un codigo que busque el centro del personaje (este mismo lo he usado en un juego de pelea, por lo que está diseñado para tal).
tablero.png
colisiones.png
Ahora mismo no tengo tiempo para explicarte el codigo, pero supongo que lo podrás entender con los comentarios.
Un detalle
Los colores guardados en variables con color.new no se puede comparar con los que retorna image.pixel, por lo que para hacer una comparacion tendrias que hacerlo asin:
En las funcion comprobar_coliciones, en ves de IF as puesto WHILE, y eso te dara error.
Por lo demas lo veo bien.
Soy un amigo de Andres y le ayude con image.pixel, el no hos a podido responder porque esta de vacaciones y no tiene un PC cerca.
Saludos.
Programador en C++ y Lua.
Creando un Juego con Unity3D para Android.
Deseo poder crear mi propio IDE para C++ y un Motor de Videojuegos.
Realmente, lo que está mal no
Realmente, lo que está mal no es el while, si no el then, es un do. Fallo mio.
De todas formas
De todas formas no hace falta un WHILE en la funcion, con un IF es suficienta, ademas me parece que no funcionaria bien con WHILE.
Saludos.
Programador en C++ y Lua.
Creando un Juego con Unity3D para Android.
Deseo poder crear mi propio IDE para C++ y un Motor de Videojuegos.
El while hace falta, está ahí
El while hace falta, está ahí por una razón y está explicado en los comentarios. Acabo de probar el código en mi PSP, y arreglando el tema del "then" y lo de declarar los colores todo funciona correctamente (eso sí, cambia el tamaño de la imágen de pacman a 64x64, si no colisionará sin que lo parezca). Si no te lo crees, haz la prueba.
Para este tipo de juegos se
Para este tipo de juegos se suele usar un mapa de colisiones, que no es más una imágen con un par de colores que indica por donde puede pasar el sprite y por donde no. Para comprobar la colisión basta con comprobar que color hay delante del sprite, si es el color que indica colisión paras al jugador y si no lo dejas continuar. Obviamente hacerlo en forma de imagen es la forma más sencilla, pero según que lenguaje te puede venir más facil usar un array del tamaño del mapa en píxeles (o tiles) con 0 para indicar colisión y 1 para indicar hueco libre, por poner un ejemplo.
Claro el de los colores es
Claro el de los colores es magnifica idea, mas aun porque las barras de pacman son de un color solido asi que eso me servira. Gracias
Ten en cuenta de que si vas a
Ten en cuenta de que si vas a optar por calcular las colisiones por medio de la imagen del mapa (no el mapa de colisiones), debes poner la velocidad de pacman a 1 pixel/frame (si no el personaje puede salirse del mapa, debido a que la pared tiene 1 pixel de grosor, según se ve en la imagen).
Es solo un consejo xD
Saludos!!
~Actualmente estudiando Ingeniería de las Tecnologías de la Telecomunicación en la Escuela de Ingenieros~
Hola
No se porque, pero me parecio mas facil tratar de crear las colisiones haciendo un detector de color para que cuando pacman tocara las barras azules pues se detuviera, trate de ingeniarme un codigo parecido a un detector que fuera alrededor de mi personaje y asi detectara el color, use la funcion image.pixel pero no me detecta mas que un solo color, hice un dibujo con los obstaculos de color azul, pero el detector no me reconoce mas que un color y ademas la memoria se me llena muy rapido y da error. aqui dejo mi codigo.
recueda que los pixeles
recueda que los pixeles tienen cuatro propiedades, puedes utilizar el alpha para detectar las bordes, seria cuestion de que edites la foto, en los cuadros donde coliciona el pacman edita el alpha por ejemplo dejalo a 254, no se notaria la transparencia y la funcion de :pixel si notaria la diferencia.saludos
Es completamente normal que
Es completamente normal que se te llene la memoria en un momento, porque estás cargando el fondo una vez por frame, lo suyo es que crees una variable global y cargues el fondo fuera del bucle while, entonces en la función detectar_color(fondo, x, y) te quedaría solo el image.pixel(), y justo después es solo comprobar la colisión.
Para hacerlo de manera "realista", tienes que comprobar las colisiones de pacman en las 4 esquinas, y haces algo como esto:
Este código lo he escrito ahora mismo de uno que usaba en mis juegos hechos en C, pero el concepto es el mismo, las esquinas del Sprite en verdad es una especie de "Bounding Box bidimensional", entonces solo compruebas cada esquina con el escenario, en función de qué tecla estés pulsando y la posición del Sprite.
Saludos!!
~Actualmente estudiando Ingeniería de las Tecnologías de la Telecomunicación en la Escuela de Ingenieros~
En el caso del Pacman basta
En el caso del Pacman basta con mirar si es azul el pixel, pero eso no es un mapa de colisiones en sí. Un mapa de colisiones es una imagen aparte que únicamente contiene la información sobre las colisiones y no se le muestra al usuario.