Autor Tema: ''Entipar'' procesos  (Leído 1814 veces)

Futu-block

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
''Entipar'' procesos
« en: Abril 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



DCelso

  • Hero Member
  • *****
  • Mensajes: 3708
  • Karma: 180
Re: ''Entipar'' procesos
« Respuesta #1 en: Abril 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
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Danielo515

  • Sr. Member
  • ****
  • Mensajes: 480
  • Karma: 4
    • Blog del Blogbo
Re: ''Entipar'' procesos
« Respuesta #2 en: Abril 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.

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6269
  • Karma: 159
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: ''Entipar'' procesos
« Respuesta #3 en: Abril 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).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Futu-block

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re: ''Entipar'' procesos
« Respuesta #4 en: Abril 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



DCelso

  • Hero Member
  • *****
  • Mensajes: 3708
  • Karma: 180
Re: ''Entipar'' procesos
« Respuesta #5 en: Abril 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.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Futu-block

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re: ''Entipar'' procesos
« Respuesta #6 en: Abril 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



Danielo515

  • Sr. Member
  • ****
  • Mensajes: 480
  • Karma: 4
    • Blog del Blogbo
Re: ''Entipar'' procesos
« Respuesta #7 en: Abril 12, 2011, 04:49:53 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.

DCelso

  • Hero Member
  • *****
  • Mensajes: 3708
  • Karma: 180
Re: ''Entipar'' procesos
« Respuesta #8 en: Abril 12, 2011, 04:55:33 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.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

  • Hero Member
  • *****
  • Mensajes: 2930
  • Karma: 124
    • TRINIT Asociación de Informáticos de Zaragoza
Re: ''Entipar'' procesos
« Respuesta #9 en: Abril 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
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Futu-block

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re: ''Entipar'' procesos
« Respuesta #10 en: Abril 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...



DCelso

  • Hero Member
  • *****
  • Mensajes: 3708
  • Karma: 180
Re: ''Entipar'' procesos
« Respuesta #11 en: Abril 12, 2011, 09:39:07 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)
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

gecko

  • Hero Member
  • *****
  • Mensajes: 802
  • Karma: 47
    • Torres Baldi Studio
Re: ''Entipar'' procesos
« Respuesta #12 en: Abril 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]
Torres Baldi Studio
http://torresbaldi.com

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12755
  • Karma: 375
Re: ''Entipar'' procesos
« Respuesta #13 en: Abril 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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re: ''Entipar'' procesos
« Respuesta #14 en: Abril 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)