Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Últimos temas
» analisen mis charas (personages)
por Gacoro Hoy a las 05:20

» Zona 14 Beta Released
por Aeon_Fox Hoy a las 05:19

» Sword Heros Art´s Work
por Gacoro Hoy a las 05:09

» [XP] RM2k Screen Tone
por Wecoc Hoy a las 04:43

» Algún dibujante dispuesto a ayudarme?
por BruMaster7Maker Hoy a las 03:38

» Ayuda rpg maker MV
por zeik9 Hoy a las 00:35

» [XP] Bitmap Stat/Outline Effects
por xXIsrael0499Xx Ayer a las 23:24

» Ayuda para desactivar un HUD y activarlo
por Wecoc Ayer a las 22:51

» Pinturas, proyectos e inspiraciones de Cutexiora
por RenatoMakerxp Ayer a las 19:03

» [XP] Elnard Radar
por orochii Ayer a las 15:55

Afiliados
Estadísticas
Tenemos 3763 miembros registrados.
El último usuario registrado es Carlos Rodriguez.

Nuestros miembros han publicado un total de 85777 mensajes en 12216 argumentos.

[XP][VX][VXA] Editor de polígonos para simular colisiones 2D - Versión Final - 18/05/2016

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP][VX][VXA] Editor de polígonos para simular colisiones 2D - Versión Final - 18/05/2016

Mensaje por newold el 2016-04-09, 12:12

(Link para descargar abajo del todo)

Hola a todos. Hoy os traigo un script que estará dividido en dos partes.

De que va esto:

El script permitirá comprobar colisiones entre sprites sin importar que estos estén rotados, desplazados en el origen (ox, oy), con zoom cambiados o incluso con viewports distintos.

Primera parte:

La primera parte consta de un editor con el que se dibujarán polígonos (circulos, cuadrados o polígonos de x lados) para cada imagen que desees. Esos polígonos se usan en el sistema de colisión



(Aquí en la imagen 1 puedes ver una nave y en la segunda imagen ves a la misma nave a la que se le han añadido polígonos con el editor (en este caso, círculos))

Segunda parte:

La segunda parte consta de los scripts necesarios para comprobar las colisiones. Se autoinstalarán al cargar cualquier proyecto con el editor de polígonos.





Dejando el cursor del ratón sobre las diferentes partes del editor podéis obtener ayudas de que hacer. Para empezar a añadir imágenes al editor usar el botón con el que podréis añadir 1 o más imágenes al mismo tiempo. Puedes cargar las imágenes de cualquier carpeta, el editor las copiará en la carpeta de tu juego Graphics/Pictures

Este editor creará el archivo de polígonos en la carpeta Data de tu juego, creará una carpeta dentro de Data llamada Collisions_Scripts  y dentro de esa carpeta añadirá todos los scripts necesarios, y por último instalará un script en vuestro proyecto llamado * Collisions (Ten en cuenta que para usar el editor tienes que tener cerrado el maker que use el proyecto seleccionado).



Cosas a destacar:

Para comprobar una colisión entre dos sprites solo hace falta poner esto:

Collisions.check_collision(sprite1,sprite2)

Si a las imágenes de los sprites no se les ha añadido ningún polígono con el editor éstas obtienen una colisión circular formada por un círculo de centro el centro de la imagen y radio el ancho de la imagen / 2

Para evitar comprobar colisiones innesesarias, existe un script que divide la pantalla en trozos. Cada vez que cambias las coordenadas de un sprite habría que añadir el siguiente código a continuación:

Screen_Rack.add_element(sprite)

Así para comprobar la colisión entre dos sprites primero se comprueba si están en el mismo sector con el comando:

Screen_Rack.are_in_same_zone?(sprite1,sprite2)

Si no están no colisionan, y si están se llama al método anterior para comprobar la colisión

Collisions.check_collision(sprite1,sprite2)

Por último, para crear una imagen en un sprite que tendrá colisión, se usaría este comando:

Cache.get_picture_by_frame("nombre imagen", frame x, frame y)

Donde nombre imagen es el nombre de una imagen que esté dentro de la carpeta Graphics/Pictures de tu juego, y frame x / frame y es el frame horizontal / frame vertical que quieres cargar (empezando en 0) (La imagen debería tener un formato de nombre como este: nombre_frameX-frameY)

Un ejemplo:


Esta imagen se llamaría nombreQueQuieras_5-5 porque tiene 5 frames horizontales y 5 verticales. Si quiero cargar el frame 3-4, que sería la 3ª bola rosa (4ª fila, 3ª bola), usaría el código

Cache.get_picture_by_frame("nombreQueQuieras_5-5",2,3)

(el frame sería 2-3 porque empieza desde 0, así, como nosotros queremos el frame 3-4 de la imagen, restamos 1 a cada valor y tenemos el frame que debemos pasarle a esa función)


Espero vuestros comentarios, críticas, reportes de fallos etc.

Instrucciones de instalación:

Descomprimir el archivo Bitmap to Polygon donde queráis y ejecutar el archivo Bitmap to Polygon.exe para abrir el editor. Se os pedirá entonces que elijáis una carpeta que contenga un proyecto de rpg maker XP, VX o VX ACE y entonces se os abrirá el editor (si ya habías abierto el proyecto antes y le habías guardado polígonos los cargará tras abrirse). Una vez abierto el proyecto deseado con el editor, éste autoinstala los scripts necesarios.

El editor lleva un par de ejemplos para que los probéis (las instrucciones para instalar los ejemplos las encontrais en la carpeta raiz del editor Bitmap to Polygon )





LINK DE DESCARGA DEL EDITOR (INCLUYE DOS EJEMPLOS)


OTROS EJEMPLOS:

Ejemplo 3 - Pong (no incluye el editor) - RPG MAKER XP
preview:


Última edición por newold el 2016-05-20, 17:50, editado 3 veces
avatar
newold
Principiante
Principiante

0/3

Créditos 1097

Gracias : 72

Volver arriba Ir abajo

Re: [XP][VX][VXA] Editor de polígonos para simular colisiones 2D - Versión Final - 18/05/2016

Mensaje por orochii el 2016-04-09, 18:32

Lo bueno de los círculos es que no hay que rotarlos, xD. Deben de ser más livianos a la larga, supongo. Y aparte a diferencia de una caja rotada o un polígono, la ecuación para determinar colisión es muy sencilla (las otras ni sé cómo son x'D).

Está quedando guay :^3.
avatar
orochii
Reportero

0/3

Créditos 6798

Gracias : 356

Volver arriba Ir abajo

Re: [XP][VX][VXA] Editor de polígonos para simular colisiones 2D - Versión Final - 18/05/2016

Mensaje por newold el 2016-04-09, 21:57

@orochii escribió:Lo bueno de los círculos es que no hay que rotarlos, xD. Deben de ser más livianos a la larga, supongo. Y aparte a diferencia de una caja rotada o un polígono, la ecuación para determinar colisión es muy sencilla (las otras ni sé cómo son x'D).

Está quedando guay :^3.

En realidad si que hay que rotar los círculos (en realidad se calcula el centro con respecto al ángulo), además de aplicarles zoom (multiplicar el radio por el zoom del sprite). Es importante que los sprites que vayan a tener colisión por círculos tengan el mismo zoom_x y zoom_y, podría soportar zooms diferentes para x e y pero habría que añadir el doble de cálculos, ya veré si implemento esa opción al final o no.

También es cierto que el cálculo de choque de círculos es muy liviano (1 suma, 2 restas y 3 multiplicaciones) frente al cálculo de polígonos que se tienen que calcular la intersección entre líneas formadas por dos puntos. Aunque depende del número de líneas a calcular frente al número de círculos a calcular por cada imagen :D.


En el script primero se calculan colisiones básicas entre sprites (lo que son las "cajas" que forman las imágenes). Si ahí se detecta colisión entonces se busca si se han añadido colisiones para esas imágenes en el editor y se realizan todos los cálculos para comprobar si realmente hubo colisión

(una imagen vale más que mil palabras)

avatar
newold
Principiante
Principiante

0/3

Créditos 1097

Gracias : 72

Volver arriba Ir abajo

Re: [XP][VX][VXA] Editor de polígonos para simular colisiones 2D - Versión Final - 18/05/2016

Mensaje por newold el 2016-05-06, 13:32

Subo el post para mostrar un pequeño vídeo donde se muestran bolas (y cosas que no son bolas) colisionando unas con otras y rebotando por tada la pantalla. A algunas de esas "bolas" se les ha añadido colisión circular con el editor. Otras no tienen añadido ningún tipo de colisión con el editor, así que para comprobar la colisión con ellas el script automáticamente le asigna una colisión circular cuyo centro sería el centro de la imagen y el radio sería el ancho / 2.



Sigo trabajando en los scripts de colisión, ya falta menos para que los publique :D (y también los ejemplos).

Cosas a destacar:

Para comprobar una colisión entre dos sprites solo hace falta poner esto:

Collisions.check_collision(sprite1,sprite2)

Si a las imágenes de los sprites no se les ha añadido ningún polígono con el editor éstas obtienen una colisión circular formada por un círculo de centro el centro de la imagen y radio el ancho de la imagen / 2

Para evitar comprobar colisiones innesesarias, existe un script que divide la pantalla en trozos. Cada vez que cambias las coordenadas de un sprite habría que añadir el siguiente código a continuación:

Screen_Rack.add_element(sprite)

Así para comprobar la colisión entre dos sprites primero se comprueba si están en el mismo sector con el comando:

Screen_Rack.are_in_same_zone?(sprite1,sprite2)

Si no están no colisionan, y si están se llama al método anterior para comprobar la colisión

Collisions.check_collision(sprite1,sprite2)

Por último, para crear una imagen en un sprite que tendrá colisión, se usaría este comando:

Cache.get_picture_by_frame("nombre imagen", frame x, frame y)

Donde nombre imagen es el nombre de una imagen que esté dentro de la carpeta Graphics/Pictures de tu juego, y frame x / frame y es el frame horizontal / frame vertical que quieres cargar (empezando en 0) (La imagen debería tener un formato de nombre como este: nombre_frameX-frameY)

Un ejemplo:


Esta imagen se llamaría nombreQueQuieras_5-5 porque tiene 5 frames horizontales y 5 verticales. Si quiero cargar el frame 3-4, que sería la 3ª bola rosa (4ª fila, 3ª bola), usaría el código

Cache.get_picture_by_frame("nombreQueQuieras_5-5",2,3)

(el frame sería 2-3 porque empieza desde 0, así, como nosotros queremos el frame 3-4 de la imagen, restamos 1 a cada valor y tenemos el frame que debemos pasarle a esa función)
avatar
newold
Principiante
Principiante

0/3

Créditos 1097

Gracias : 72

Volver arriba Ir abajo

Re: [XP][VX][VXA] Editor de polígonos para simular colisiones 2D - Versión Final - 18/05/2016

Mensaje por newold el 2016-05-18, 18:39

Subo el post otra vez para indicar que ya está completo el script, podeis descargarlo y probarlo en el primer post
avatar
newold
Principiante
Principiante

0/3

Créditos 1097

Gracias : 72

Volver arriba Ir abajo

Re: [XP][VX][VXA] Editor de polígonos para simular colisiones 2D - Versión Final - 18/05/2016

Mensaje por Alex_Game_Maker el 2016-05-19, 00:50

Esta mal que no entienda para que sirva?

Lo que parece es que, si don eventos van moviendose por alli, y se tocan sucede algo, como Condiciones y efectos?

Es eso a lo que se refiere el script?

Att. Nadie que conoscas, no hagas caso ni a la foto ni al nick, por favor no lo hagas :(
avatar
Alex_Game_Maker
Soñador
Soñador

0/3

Créditos 200

Gracias : 19

Volver arriba Ir abajo

Re: [XP][VX][VXA] Editor de polígonos para simular colisiones 2D - Versión Final - 18/05/2016

Mensaje por newold el 2016-05-19, 08:34

@Alex_Game_Maker escribió:Esta mal que no entienda para que sirva?

Lo que parece es que, si don eventos van moviendose por alli, y se tocan sucede algo, como Condiciones y efectos?

Es eso a lo que se refiere el script?

Att. Nadie que conoscas, no hagas caso ni a la foto ni al nick, por favor no lo hagas :(

Con el editor lo que haces es añadir círculos, polígonos o cuadrados a imágenes (para delimitar lo que es el dibujo dentro de la imagen). Luego en tu proyecto cuando creas un sprite y le asignas una imagen a la que le has añadido cosas con el editor (otra vez, círculos, polígonos o cuadrados) puedes ver si "choca" o toca a otro sprite en pantalla. En realidad no hace falta añadir nada con el editor, en caso de imágenes que no tengan añadido nada para comprobar si colisiona con otra, se le añade un círculo o rectángulo que ocupa toda la imagen (dependiendo de la configuración del script de colisiones). y entonces te preguntas, ¿para que quiero añadir cosas con el editor si ya por defecto puede comprobar si dos sprites se tocan?, la respuesta en esta imagen:


Con el comando Collisions.check_collision(sprite1,sprite2) Compruebas si el sprite1 está tocando al sprite2 y si lo está puedes hacer lo que quieras.

Un ejemplo, juego de naves, 2 sprites en pantalla, el jugador y un misil que quiere acabar contigo. Para comprobar si el misil toca al jugador y matarlo, porque somos así de psicopatas, lo harías mas o menos así:

Código:
if Collisions.check_collision(jugador,misil)
  # El misil ha tocado al jugador, matarlo, partirlo en trozos, derretirlo
  # Código que quieras que pase aquí
else
  # No hay colisión (Mierda, el jugador estará vivo más tiempo :()
  # Código que quieras que pase aquí
end
avatar
newold
Principiante
Principiante

0/3

Créditos 1097

Gracias : 72

Volver arriba Ir abajo

Nuevo ejemplo añadido: PONG (el ejemplo usa el RPG MAKER XP)

Mensaje por newold el 2016-05-20, 17:49

Nuevo ejemplo añadido usando el script de colisiones. Iré actualizando con ejemplos de varios tipos de juegos usando el script de colisiones

Ejemplo 3 - Pong (no incluye el editor)
preview:
avatar
newold
Principiante
Principiante

0/3

Créditos 1097

Gracias : 72

Volver arriba Ir abajo

Re: [XP][VX][VXA] Editor de polígonos para simular colisiones 2D - Versión Final - 18/05/2016

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.