Public, primer intento...

Started by Futu-block, March 04, 2011, 10:39:06 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

por el momento no se pueden asignar directamente por parametro variables publicas del mismo proceso, estoy pensando una forma de resolver eso.

por otro lado, en la proxima version, ya no se podra hacer esto de declarar diferente los nombres de los parametros y los nombres de la declaracion.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

#31
Quote from: Drumpi on March 11, 2011, 04:01:25 AM
Futu, no te compliques...

[code language="bennu"]
aprendo aprendo aprendo...[/code]

Y ya está

Aunque, Splinter, (esto, Futu, no lo leas o te vas a liar): tal como lo ha puesto Futu debería funcionar siempre que quitase las líneas:
direccion_2 = direccion;
salida_2 = salida;
llegada_2 = llegada;

correcto, las he eliminado y sigue furulando (marcha bien) el juego...


Ahora bien, pasemos a un momento B de la cuestion public...


El caso (como comenté al inicio) es que que quiero una variable del primer proceso en el segundo proceso pasemos a eso de ''coco id_coco'' y ''var_alguna.coco'' y esas cosas...

vale, creo que lo he pillao tambien a base de probeteo, toca razonar...

aprendo aprendo aprendo...

Drumpi

Como he dicho, a las public se accede igual que a las locals de un proceso: necesitas su ID en una variable, ya sea privada, global o usando FATHER, SON, etc... (imagina cómo accedes a las variables X, Y, o GRAPH de otro proceso).
La diferencia es que esa variable que contiene la ID del proceso con variables PUBLIC, no es de tipo INT, sino del tipo NOMBRE_DEL_PROCESO.
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

chachos, ahora me sale un ''runtime error en enemigo(65546) - process 0 not active''

¿tiene que ver con lo public de lo que abuso ahora??

SplinterGU

te falta un exists antes de querer acceder a un proceso, pero ahi estas queriendo acceder a un proceso el cual no creaste o no obtuviste su id.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

#35
Ahí estamos amigo, resulta que creo un monton de disparos, cada disparo tiene un valor de una variable publica indicando la direccion del mismo, cuando le aplico la colision del enemigo usando el public.variable (pa que me entiendas, espero) me salta el error en cuestion.

Pienso que aqui falla la identificacion personal de cada proceso disparo() digo yo; para que cuando le ejecute el cambio de variable actue de una forma o de otra...
espero haberme explicado bien, sino te pongo un pseudo-codigo para que nos entendamos :D
[code language="bennu"]
proceso enemigo()...
begin y tal y tal

   loop
   switch (direcion_enemigo)
      case 4: // moviendose a la izquierda
         if ( x > desd)  // si no ha llegado al punto indicado
            x--;
            flags = 1;
         else
            dire = 8;
         end
         if (collision (type disparo)) and id_disparo.direccion_disparo == 4) /* Esta es la linea que me falla*/
            graph  = 602; animacion y tal y tal
         end
      case 8: // moviendose a la derecha
         if ( x < hasta) // si no ha llegado al punto indicado
            x++; // avanza
            flags = 0;
         else
            dire = 4; // mover a la izquierda
         end
      end
      end
   end

frame; y tal y tal
[/code]


pos eso, creo que me falta consultar algun dato en la linea que falla, algo de saber que disparo es el que colisiona con el enemigo para que sea ese disparo el que se destruya con la animacion pertinente.


conclusion, quiero saber en que direccion vá el disparo, por si colisiona con el enemigo en la misma direccion no le afecte el disparo


SplinterGU

iddisparo vale 0 cuando haces esa comprobacion.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

espera un moment, quiero comprobar la variable publica ''id_disparo.direccion_disparo''

SplinterGU

pero donde estas asignando id_disparo? si no le pones valor nunca vas a acceder a las variables...

lo que te esta diciendo el error es que id_disparo vale 0, y logicamente no existen procesos con id 0... lo que significa es que no le asignaste ningun valor.

ademas de eso, antes de hacer una comprobacion debes saber si el proceso aun esta vivo, y eso lo haces con exists.

esto que te esta pasando no solo es de las publicas, sino tambien de las locales.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

esperate, entonces hay que hacerle un exists y si existe preguntar el valor de la variable??

Drumpi

Supongo que id_disparo guarda el id del proceso disparo con el que choca ¿no?
Pues no has hecho la asignación en ese código, COLLISION no te guarda el valor mágicamente en la variable que tu quieras :D
Una posible solución sería:

id_disparo=collision (type disparo);
if (id_disparo and id_disparo.direccion_disparo == 4) /* Esta es la linea que me falla*/
graph  = 602; animacion y tal y tal
end


Por cierto, esta línea no tiene sentido:
if (if collision (type disaro)) and id_disparo.direccion_disparo == 4)
El if del collision no hace nada y encima le falta un end ;D
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)

FreeYourMind

Pueden 2 procesos distintos tener una variable publica con el mismo nombre ?

SplinterGU

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

Futu-block

Quote from: Drumpi on April 03, 2011, 01:18:30 AM
Por cierto, esta línea no tiene sentido:
if (if collision (type disaro)) and id_disparo.direccion_disparo == 4)
El if del collision no hace nada y encima le falta un end ;D
Quote from: rafiqui
-Correccion conozco a tu padre...
vale, corregido :D



Quote from: Drumpi on April 03, 2011, 01:18:30 AM
Supongo que id_disparo guarda el id del proceso disparo con el que choca ¿no?
Pues no has hecho la asignación en ese código, COLLISION no te guarda el valor mágicamente en la variable que tu quieras :D
Una posible solución sería:

id_disparo=collision (type disparo);
if (id_disparo and id_disparo.direccion_disparo == 4) /* Esta es la linea que me falla*/
graph  = 602; animacion y tal y tal
end

ook, entons si guardo el 'indentificador de colision' en ·id_disparo· cuando le haga un if a este identificador me retornará un numero, al que le preguntaré la variable publica (id_disparo.direccion_disparo)

vale, a ponerlo en practica para terminar de aprender...
:D

SplinterGU

el identificador siempre es un numero.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2