Nueva variable local predefinida: collision_graph

Started by panreyes, August 21, 2012, 07:30:54 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

panreyes

¿Qué os parecería una nueva variable local, predefinida para todos los procesos, llamada collision_graph?
La idea sería la siguiente: Si esta variable está establecida se utilizaría para comprobar las colisiones con ese gráfico y no con el que se está mostrando.


Lógicamente, el gráfico asignado en collision_graph no sería visible, sólo utilizado para comprobar colisiones.
¿Qué os parece la idea?

FreeYourMind

Eso significa 2 graficos por proceso, me temo que lo que hace lento el uso de procesos es que cada uno tenga un gráfico assignado, ahora imaginate 2... Eso es lo mismo que usar mapa de durezas

josebita

Quote from: FreeYourMind on August 21, 2012, 07:59:02 AM
Eso significa 2 graficos por proceso, me temo que lo que hace lento el uso de procesos es que cada uno tenga un gráfico assignado, ahora imaginate 2... Eso es lo mismo que usar mapa de durezas
Hombre, no tanto dado que el segundo gráfico no se usaría nunca más que en el momento de checkear la colisión. Lo que sí que haría sería usar más memoria.

Pixel, ¿no te vale con las rutinas de colision collision_box y collision_circle que creó Splinter?. La idea viene a ser algo similar.

panreyes

Os pongo un ejemplo, el Pang.


Quiero que la bola sea capaz de colisionar con el personaje un poco sin matarlo, dando cierto margen.


Para ello ahora mismo estoy utilizando una variable cacona que cuenta los frames colisionados, pero preferiría utilizar un método como el que comento. En otros casos, la forma en la que lo soluciono es con subprocesos que tienen el gráfico a utilizar en las colisiones, con alpha 0, o cambiando el gráfico antes de colisionar y revirtiéndolo después.

FreeYourMind


panreyes


FreeYourMind

le pones un punto de control en cada ojo del gráfico prota por ejemplo, y la colision la controlas en ellos, así la pelota colisionará un poco con el muñeco antes de matarlo. Los puntos de control se asignan en un gráfico en el editor de fpg, yo por casualidad nunca los he usado, pero pensaba que tu lo sabias de sobra.

Es lo que se suele usar en los juegos de lucha, para dar golpes y golpear sólo con una parte del brazo o pierna..

panreyes

Hasta donde yo sé los puntos de control se utilizan para centrar los gráficos de diferentes tamaños y posiciones en una animación :\

FreeYourMind

pues que alguien nos acuda, porque yo pensaba que servia para eso y para mucho más xD

JaViS

Yo creo que no es una mala idea, aunque la implementación de un grafico diferente para la colision generalmente implica un poco mas de complejidad. por ejemplo, ubicar ese grafico en un punto de control determinado o quizas hacer un collision_box de otro grafico diferente, etc. Por lo que sigue siendo mejor opcion tener un proceso separado.


Creo que una solucion mejor sería poder comprobar colisiones de otros procesos:



collision(type enemy[, collision_proccess]);
Working on Anarkade. A couch multiplayer 2D shooter.

SplinterGU

eso se puede hacer actualmente...



...
/* start collision test (don't use FRAME in this block or restore graph before FRAME) */
bgraph = graph;
graph = collision_graph;
... collision(...)
...

graph = bgraph;
/* end collision test */

frame;
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

#11
Quote from: FreeYourMind on August 21, 2012, 10:43:02 AM
le pones un punto de control en cada ojo del gráfico prota por ejemplo, y la colision la controlas en ellos, así la pelota colisionará un poco con el muñeco antes de matarlo. Los puntos de control se asignan en un gráfico en el editor de fpg, yo por casualidad nunca los he usado, pero pensaba que tu lo sabias de sobra.

Es lo que se suele usar en los juegos de lucha, para dar golpes y golpear sólo con una parte del brazo o pierna..

"de que estas hablando willis?" explica mas porque no te entendi que quieres decir.

pero si responde, la colision es contra el grafico (collision normal), se pone el grafico con respecto al punto de control 0, o sea, el centro, y luego se collisiona grafico contra grafico.

no entiendo que dices de los puntos de control, pero explica, quizas tengas razon y solo es que no entendi que quieres decir.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: PiXeL on August 21, 2012, 10:24:13 AM
o cambiando el gráfico antes de colisionar y revirtiéndolo después.

eso tienes que usar.

sabes que rechazo agregar funciones o complicar las actuales para hacer cosas que ya se pueden hacer facilmente...

a uds que les encantan las clases, piensen en collision como un metodo de una clase, y los procesos como una clase o entidad.

la filosofia es relacion "objecto->mundo exterior".
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

KeoH

Oye Splinter una pregunta, ya que ha salido el tema de los puntos de control .... supongamos que tengo un proceso cuyo grafico tiene definidos varios puntos de control. Creo que era con las funciones de get_real_point se podia acceder a las coordenadas en pantalla de un punto de control de ese grafico .. pero solo desde el proceso que tiene ese grafico, no desde otro proceso que quiera averiguar donde esta ese punto en pantalla no?

SplinterGU

asi es, si quieres de otro grafico, debes cambiar la variable graph antes de llamar a la funcion.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2