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.

Futu-block

#75
odere, lo que hice al principio, pero como no me cuadraba por otro lao...


--0--


Nada, me dice que proceso 0 not active...




SplinterGU

porque aun no esta asignado el id.

pon codigo completo si quieres una ayuda mas adecuada.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

¿te refieres al:
nave0 = get_id(type nave);

??

gecko

http://wiki.bennugd.org/index.php?title=Public_variable

Leelo una segunda vez, mas tranquilo.
En el pequeño programita de ejemplo se entienden los conceptos de variables publicas.
Torres Baldi Studio
http://torresbaldi.com

SplinterGU

Quote from: Futublock on August 19, 2012, 12:20:02 AM
¿te refieres al:
nave0 = get_id(type nave);

??

realmente no... pon el codigo y vemos que esta mal... has un codigo simple, a ver si detectas donde esta el problema.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

muy bien, empezemos con el proceso nave:






declare process nave(x,y,color,forma,direccion) // almaceno la direccion en una variable provisional
public
int color_p;
int direccion_p; // creo una variable publica para poder modificarla
end
end



process nave(x,y,color,forma,direccion) // almaceno la direccion en una variable provisional


begin
graph = forma;
x = 40;
y = 20;
direccion_p = direccion; // a la variable publica le asigno el valor de la variable provisional
loop
switch (direccion_p) // comprobamos la variable publica para actuar de forma determinada
case 1:
y--;
end
etc...









Todo esto dentro de un mismo proceso, al hacer publica la variable direccion lo que quiero es poder comprobarla desde el proceso protagonista, el cual al colisionar con nave se desplazará segun esta ultima.


El proceso nave es uno solo con multiples opciones para asi evitar hacer varios procesos iguales que varien en poca cosa


yo creo que eso es lo mas importante, aunque pongo el proceso colisionador, por lo menos la parte mas importante despues del loop






if (collision (nave0))
switch (nave0.direccion_p)
case 3: x-= color_p; end
case 4: x+= color_p; end
end
end



en este caso el color indica la velocidad de la plataforma


;)

SplinterGU

si el declare lo tenes antes de la funcion que declara, no es necesario.

despues... si lo que queres es tomar color_p del proceso que colisiona, entonces el codigo esta mal

      if (collision (nave0))
         switch (nave0.direccion_p)
            case 3: x-= nave0.color_p; end
            case 4: x+= nave0.color_p; end
         end
      end

ahora si no es del proceso que colisiona, sino del que se esta ejecutando, esta bien como lo pusiste.

la verdad que poner esos trozos de codigo no sirven de nada para ayudarte, porque depende el orden de donde se escriben/declarar las funciones y donde se las llaman.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

vale, mas codigo:


El proceso main empieza con:




PROGRAM videojuego;


INCLUDE "DLL\import.prg";            //Incluye las DLL necesarias para que todo funcione
include "folder/globales.prg";
include " folder /nave.prg";
include " folder /protag.prg";
include " folder /enemigo.prg";




BEGIN
set_mode(320,240,32,MODE_window);
graficos = load_fpg(" folder /graficos.fpg");
controlador();
fondo();
durezas(); //estos estan provisionalmente en este .prg


// proceso controlador:



process fondo(); // sirve para mostrar la pantalla, y regular los enemigos NECESARIO




begin

x = 160;
y = 120;
z = 11;

loop
graph = pantalla + 100;
switch (protocolo_ejecucion)
case 30:
if (pone_enemigo == true)
switch (pantalla)
case 401:
enemigo(0,1,3,300,0,2);
enemigo(2,1,3,300,0,2);
enemigo(5,1,3,300,0,2);
enemigo(2,2,4,300,0,5);
enemigo(6,2,4,300,0,5);
enemigo(5,3,3,301,0,4);
enemigo(4,4,4,300,0,3);
end
case 402:
nave0 = nave(6,1,3,40,1);
nave1 = nave(6,2,4,40,2);
end
end
protocolo_ejecucion = 40;
end
end
end
frame;
end
end








end





pasemos al proceso globales, siguiente en la lista:



global


nave nave0;
nave nave1;
nave nave2;
nave nave3;
nave nave4;




int graficos;
int vidas;
int protocolo_ejecucion;
int pantalla;



siguiente  proceso es nave, asi que ya sabes como vá


siguiente es prota:


que lo primero que hace en el loop es comprobar si hay colision, si le anulo la colision no hay problem, si se la vuelvo a poner (segun esta ultima vez como lo has puesto) si hay, me dice que hay error con el proceso prota not active...


te mando los archivos por privado a ver que sale

SplinterGU

bueno, he visto el codigo que me pasaste por privado, por suerte lo has hecho, porque el codigo que has posteado aca no mostraba el problema...

el problema es que creas al personaje (donde chequeas por los enemigos) antes que crear los enemigos (naves) y no tienes dentro del personaje ningun control por si los enemigos existen o fueron creados.

para serte sincero, creo que te estas complicando con la forma de la que lo estas haciendo...

simplemente crea procesos naves, y no guardes los ids, buscalos luego con getid o haz un collision type... ya si el collision te dio un id, ese id es que existe, no necesitas hacer un exists... ahora si haces un collision de una variable que tiene valor 0 (lo que te esta pasando ahora mismo) es como hacer un collision(process_all).
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

#84
bien, ya estoy mucho mas tranquilo y ahora lo comprendo muy bien
Antes es que lo estaba tocando con los ojos cerrados y no me enteraba de nada...

gracias jefe

SplinterGU

me explique bien? jo, pense que lo habia enredado mas... :)

cualquier duda pregunta nuevamente.

y'r wellcome!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

si, te has explicao bien porque eso era lo que me temia, el orden de los procesos en relacion con las lecturas de las colisiones...