Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Futu-block on April 11, 2011, 04:04:34 PM

Title: ''Entipar'' procesos
Post by: Futu-block on April 11, 2011, 04:04:34 PM
quiero que ciertos procesos al colisionar con el prota actuen igual...
mexplico:

quiero cambiar la comprobacion
[code language="bennu"]
if (collision (type enemigoA) or collision (type enemigoB) or collision (type enemigoC) or collision (type enemigoD))
[/code]
por esta:
[code language="bennu" options="singleline"]
if (collision (type enemigo)) [/code]

me estoy saltando algo, no sé que es pero hay algo que no tengo en cuenta...

repasaré de mientras el manual a ver si doy con la tecla
Title: Re: ''Entipar'' procesos
Post by: DCelso on April 11, 2011, 05:10:19 PM
Me parece a mi que no existe tal cosa, para eso iría bien la herencia de clases (en este caso de procesos :D )

puedes simularlo creando un proceso enemigo, donde una variable del proceso sea la que diferencie de qué enemigo se trate
y actues en el loop con un swithcase y hagas en cada case lo que haces actualmente en el loop de los procesos enemigo1, enemigo2, etc.
:D
Title: Re: ''Entipar'' procesos
Post by: Danielo515 on April 11, 2011, 05:20:56 PM
También una solución sencilla es hacer un enemigo "fantasma" que siga a todos los enemigos independientemente de su tipo y sea con el con el que colisiones, así dará igual de que enemigo se trate ya que todos llevarán un proceso idéntico siguiéndoles.
Title: Re: ''Entipar'' procesos
Post by: Drumpi on April 11, 2011, 06:04:52 PM
O que cada enemigo controle un proceso enemigo_gráfico que esté congelado, pero eso va a subir mucho los requisitos de la máquina. Acceder a las variables locales de un proceso tarda un tiempo medio (alto es el acceso a privadas, que es instantaneo, o casi, y bajo son los PUT).
Title: Re: ''Entipar'' procesos
Post by: Futu-block on April 11, 2011, 08:21:20 PM
vaya pues, eso de 'colision con tal tipo de enemigos' es un churrete, deberia ser 'colision con tal enemigo cuantos haya pero siempre el mismo'
jijiji

otra solucion es una variable al final de todas las que trae el creado del proceso y eswichearla para cambiar el grafico y el comportamiento...
CÁSPITA, lo que ha dicho dijey celso lol, carma++ que se que quieres
lol
Title: Re: ''Entipar'' procesos
Post by: DCelso on April 11, 2011, 10:23:54 PM
sí, y única solución viable, la otra del proceso fantasma no vale porque collision necesita de las imágenes, por lo que tendrías que repetir la lógica de cambio de imagenes en el proceso fantasma, por lo que necesitarias un proceso fantasma por cada enemigo , lo que te conlleva al mismo problema de collision fantasma1 ..fantasman, por lo que tendrías que hacer un proceso fantasma con una variable y swichear dependiendo del tipo de enemigo, por lo que sería la misma solución que planteé al principio pero con el doble de procesos :D.
Title: Re: ''Entipar'' procesos
Post by: Futu-block on April 11, 2011, 11:14:11 PM
y switchear gasta mucho?? o peta o algo??
lo digo porque abuso a mas no poder de ello
jijii
Title: Re: ''Entipar'' procesos
Post by: Danielo515 on April 12, 2011, 04:49:53 PM
Quote from: DCelso on April 11, 2011, 10:23:54 PM
sí, y única solución viable, la otra del proceso fantasma no vale porque collision necesita de las imágenes, por lo que tendrías que repetir la lógica de cambio de imagenes en el proceso fantasma, por lo que necesitarias un proceso fantasma por cada enemigo , lo que te conlleva al mismo problema de collision fantasma1 ..fantasman, por lo que tendrías que hacer un proceso fantasma con una variable y swichear dependiendo del tipo de enemigo, por lo que sería la misma solución que planteé al principio pero con el doble de procesos :D.

A ver, creo que, o bien no me he enterado de lo que el autor del hilo quiere o mi solución es perfectamente válida.

Yo he entendido que el tiene varios tipos de enemigos, pero quiere que reaccione igual al colisionar con cualquiera de ellos. Bien entonces mi solucion es perfectamente viable. En el proceso fantasma creas un mapa rectangular que tenga un tamaño igual al grafico del padre, que digo, ni eso, haces graph=father.graph y le pones un alpha transparente. Luego solo tienes que ver si colisiona con un proceso fantasma. Ahora si lo que quiere es un comportamiento independiente en funcion de cada tipo de enemigo entonces es lo contrario a lo que digo.
Title: Re: ''Entipar'' procesos
Post by: DCelso on April 12, 2011, 04:55:33 PM
Quote from: Danielo515 on April 12, 2011, 04:49:53 PM
Quote from: DCelso on April 11, 2011, 10:23:54 PM
sí, y única solución viable, la otra del proceso fantasma no vale porque collision necesita de las imágenes, por lo que tendrías que repetir la lógica de cambio de imagenes en el proceso fantasma, por lo que necesitarias un proceso fantasma por cada enemigo , lo que te conlleva al mismo problema de collision fantasma1 ..fantasman, por lo que tendrías que hacer un proceso fantasma con una variable y swichear dependiendo del tipo de enemigo, por lo que sería la misma solución que planteé al principio pero con el doble de procesos :D.

A ver, creo que, o bien no me he enterado de lo que el autor del hilo quiere o mi solución es perfectamente válida.

Yo he entendido que el tiene varios tipos de enemigos, pero quiere que reaccione igual al colisionar con cualquiera de ellos. Bien entonces mi solucion es perfectamente viable. En el proceso fantasma creas un mapa rectangular que tenga un tamaño igual al grafico del padre, que digo, ni eso, haces graph=father.graph y le pones un alpha transparente. Luego solo tienes que ver si colisiona con un proceso fantasma. Ahora si lo que quiere es un comportamiento independiente en funcion de cada tipo de enemigo entonces es lo contrario a lo que digo.
ah, eso no lo había contemplado, esa idea podría resultar parcialmente :D, haces que cada proceso enemigo al ejecutarse cree un proceso fantasma y que en el bucle del proceso fantasma lo único que haga es copiar las x,y,z,file,graph del padre, así podrías hacer el collision type fantasma  :D, bien visto. Tiene algunos falluquis menores pero podría resultar, habría que tener cuidado de ir controlando al proceso fantasma para los casos en que los enemigos se vvuelvan inmunes a las colisiones y / o mueran.
Title: Re: ''Entipar'' procesos
Post by: Windgate on April 12, 2011, 08:12:22 PM
Acabo de ver el hilo... Se me ocurre que si los enemigos no son muy distintos unos de otros puedes tener un único proceso enemigo, que en base a sus parámetros de invocación tome un comportamiento u otro, así sólo tienes que comprobar colisión con un tipo de proceso.

Yo en general lo hacía así... Declarando un TYPE donde tener toda la info de un enemigo, haciendo un vector de esos datos y pasando a cada enemigo el índice del vector de donde debía obtener su info.

Si me estoy yendo por los Cerdos de Úbeda perdonen, últimamente paso por aquí a contrarreloj y no me da para leer todo todo xD
Title: Re: ''Entipar'' procesos
Post by: Futu-block on April 12, 2011, 08:30:05 PM
vamos por partes, quiero que el protagonista al colisionar con cualquier proceso ''blanco'' por ejemplo le diga a una variable global que comportamiento debe seguir el protagonista;

es para evitar un repetitivo if... or... or...
Title: Re: ''Entipar'' procesos
Post by: DCelso on April 12, 2011, 09:39:07 PM
Quote from: Windgate on April 12, 2011, 08:12:22 PM
Acabo de ver el hilo... Se me ocurre que si los enemigos no son muy distintos unos de otros puedes tener un único proceso enemigo, que en base a sus parámetros de invocación tome un comportamiento u otro, así sólo tienes que comprobar colisión con un tipo de proceso.

Yo en general lo hacía así... Declarando un TYPE donde tener toda la info de un enemigo, haciendo un vector de esos datos y pasando a cada enemigo el índice del vector de donde debía obtener su info.

Si me estoy yendo por los Cerdos  cerros de Úbeda perdonen, últimamente paso por aquí a contrarreloj y no me da para leer todo todo xD
x)
Title: Re: ''Entipar'' procesos
Post by: gecko on April 12, 2011, 10:54:38 PM
Lo que dicen que para hacer el [code language="bennu" options="singleline"]if (collision (type enemigo))[/code] como querés, el proceso enemigo lo podés hacer algo asi:

[code language="bennu"]PROCESS enemigo(tipo)
BEGIN
  // aca las acciones que comparten todos los enemigos (si las hay)
  SWITCH (tipo)
    CASE 1:
      // aca las especificas del tipo 1
    END
    CASE 2:
      // aca las especificas del tipo 2
    END
  END

END
[/code]

y cuando creas los procesos vas a tener que hacerlo con [code language="bennu" options="singleline"]enemigo(1), enemigo(2)[/code]
Title: Re: ''Entipar'' procesos
Post by: SplinterGU on April 13, 2011, 03:13:48 AM
gecko, yo haria que tipo sea publica u otra variable similar que sea publica, para que al momento de la colision el proceso que colisiona con enemigo sepa con que tipo de enemigo colisiono, pero si, la idea correcta es la que has puesto tu, muchos juegos usan eso.
Title: Re: ''Entipar'' procesos
Post by: Futu-block on April 13, 2011, 08:19:55 PM
gecko, eso es lo que habia quedado con Dcelso, la unica forma es ''enwitchar'' al mismo enemigo pero con diferentes propiedades...

creo que hasta es mejor porque solo tienes el mismo proceso repetidas veces y con un s,kill_tree le pegas un limpiazo a la pantalla (creo incluso que sin el _tree)