Ayuda porfavor

Started by Melow, May 01, 2010, 05:01:02 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Melow

Como puedo saver si en un punto determinado de mi pantalla ay algun objeto imbocado?? existe algo como collision pero ke le puedas dar el punto que tu quieras??

un saludo y gracias por vuestra ayuda

scuws

crea un function que tenga unas coordenadas y si esas coordenadas coinciden...
FUNCTION comprobar()
BEGIN
    x = 200; //Aquí poner las coordenadas x del punto que quieres comprobar
    y = 200; //Aquí poner las coordenadas y del punto que quieres comprobar
    IF (collision (type algo)) //En algo con lo que quieres comprobar si coincide
    ...
    END
END

Drumpi

Ojo, collision sólo funciona si ambos procesos tienen un gráfico asignado, por lo que necesitarías un gráfico de un pixel (si le pones el alpha a 0 no se verá).
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)

scuws

es verdad, se me habia pasado, quedaria asi,

FUNCTION comprobar()
BEGIN
     x = 200; //Aquí poner las coordenadas x del punto que quieres comprobar
     y = 200; //Aquí poner las coordenadas y del punto que quieres comprobar
     graph = 4; // Aquí poner uno de un pixel
     flags = 8;
     IF (collision (type algo)) //En algo con lo que quieres comprobar si coincide
     ...
     END
END

Drumpi

Cambiando "flags=8" por "alpha=0", está perfecto.
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)

Melow

gracias por la ayuda. se me avia ocurrido esta noche consultandolo con la almuada una cosa muy parecida :D

Melow

al intentar matar un proceso me dice "ERROR: Runtime error in NIVEL1(65540) - Process 65543 not active"
PROCESS nivel1 ( )

private
int cua1;
int cua2;
int cua3;

BEGIN

cua1 = cuadrado(1,0,3);
cua2 = cuadrado(3,0,3);
cua3 = cuadrado(5,0,3);

barrera(4,8);

LOOP

IF ((( cua1.x == cua2.x + 20) && ( cua1.x == cua3.x - 20)) || (( cua1.x == cua2.x - 20) && ( cua1.x == cua3.x + 20)))
signal(get_id(type cuadrado), S_KILL);
END

IF ((( cua2.x == cua1.x + 20) && ( cua2.x == cua3.x - 20)) || (( cua2.x == cua1.x - 20) && ( cua2.x == cua3.x + 20)))
signal(get_id(type cuadrado), S_KILL);
END

IF ((( cua3.x == cua2.x + 20) && ( cua3.x == cua1.x - 20)) || (( cua3.x == cua2.x - 20) && ( cua3.x == cua1.x + 20)))
signal(get_id(type cuadrado), S_KILL);
END

FRAME;
END
END


me podeis explicar que me pasa y porque no mata el proceso que me gustaria matar.

gracias

Melow

tambien e probado con   signal(cua1, S_KILL);
y me da el mismo error

Mr Matsusaka

En vez de
[code language="bennu"]      IF ((( cua1.x == cua2.x + 20) && ( cua1.x == cua3.x - 20)) || (( cua1.x == cua2.x - 20) && ( cua1.x == cua3.x + 20)))
         signal(get_id(type cuadrado), S_KILL);
      END
      
      IF ((( cua2.x == cua1.x + 20) && ( cua2.x == cua3.x - 20)) || (( cua2.x == cua1.x - 20) && ( cua2.x == cua3.x + 20)))
         signal(get_id(type cuadrado), S_KILL);
      END
      
      IF ((( cua3.x == cua2.x + 20) && ( cua3.x == cua1.x - 20)) || (( cua3.x == cua2.x - 20) && ( cua3.x == cua1.x + 20)))
         signal(get_id(type cuadrado), S_KILL);
      END[/code]
prueba
[code language="bennu"]      IF ((( cua1.x == cua2.x + 20) && ( cua1.x == cua3.x - 20)) || (( cua1.x == cua2.x - 20) && ( cua1.x == cua3.x + 20)))
         signal(cua1, S_KILL);
      END
      
      IF ((( cua2.x == cua1.x + 20) && ( cua2.x == cua3.x - 20)) || (( cua2.x == cua1.x - 20) && ( cua2.x == cua3.x + 20)))
         signal(cua2, S_KILL);
      END
      
      IF ((( cua3.x == cua2.x + 20) && ( cua3.x == cua1.x - 20)) || (( cua3.x == cua2.x - 20) && ( cua3.x == cua1.x + 20)))
         signal(cua3), S_KILL);
      END[/code]

SplinterGU

eso pasa porque matas al proceso y luego queres seguir accediendo a sus variables... antes de acceder a un proceso tenes que usar exists o si matas un proceso, resetea su variable y chequea antes de usarla que no sea 0
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Lo que viene a decir es que el problema no está en los signals, sino en que cuando matas a un proceso, cua1.x, cua2.x o cua3.x dejan de existir y no se pueden leer, y si lo intentas es como si leyeras "fuera de la zona de memoria" (es como un "segmentation fault" o "tuprograma.exe ha ejecutado una operación no válida y debe cerrarse. Ver detalles", pero controlado por el propio Bennu para que no haya problemas con el SO ;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

Quote from: SplinterGU on May 03, 2010, 12:16:31 AM
eso pasa porque matas al proceso y luego queres seguir accediendo a sus variables... antes de acceder a un proceso tenes que usar exists o si matas un proceso, resetea su variable y chequea antes de usarla que no sea 0

Estoy teniendo este problema (Process not active), lo que me preocupa es que sólo ocurre en Wiz/Caanoo y en el port de Pandora, que tiene id de Linux.

En bennu para Windows no me ocurre!!! Hay alguna diferencia en esto, o esto se ha cambiado internamente en alguna version ?

Lo curioso es que la version de bennu que uso es mas vieja (r112) y la de Wiz/Caanoo la r228.

SplinterGU

sin mas datos no te puedo responder.

lo que si te puedo decir que no hay diferencias entre windows y los demas en ese aspecto.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Pues las estoy teniendo, ahora vete a saber porque...
En windows nunca me peta en el punto ese...

SplinterGU

se me ocurren muchas posibles causas de que te suceda eso, y no son del motor.

pon un ejemplo compilable y lo vemos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2