problemas con colision i otras funciones

Started by vib, February 21, 2011, 05:53:01 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

vib

Hola, primero gracias por la ayudita que me disteis con la funcion time() me ha ido a pelo!.
Luego haber.. tengo unos problemas al que no encuentro solucion, realmente nose donde esta el fallo.

1r:
Tengo este codigo.

[code language="bennu"]else//sino esta seleccionan elf ocus osea otro lado
            IF (mouse.left) while (mouse.left) frame;end
                signal(type item_select_screen_background,s_kill);
                delete_text(es_focus);
                //destruir=0;
                //focus=0;
            end
        END
        FRAME;
    END
END
process Item_Select_Screen_Background(grafico)
begin
    graph=grafico;
    size=400;
    x=400; //Fondo centrado
    y=50;
   
    //scroll[0].camera=id; 
    //ctype=c_scroll;   
    //cnumber=C_0;//le digo el mapa que quiero que se vea en este caso el 0, si no lo pusuera se veria en los 2 scroools.
    z=2;
    loop
    es_focus=write(0,400,100,4,"vida " + vida_2);
        frame;
    end
end [/code]



El escrito que hay en la variable es_focus no me funciona, directamente cuando quito el focus, va al if de arriba, mata el proceso y deberia matar ese escrito de vida. Y no lo hace.
Lo necesito hacer asi porque con un delete_text(0) me borra todo y hay cosas que no quiero que se borren.

---------

Problema con la colision:
Os pongo una foto y os cuento.

http://img262.imageshack.us/i/colh.png/

Vale viendo la foto que es lo que hay...
2 personajes rodeados por una cuadrado de color.
La colision de los personajes es a partir de esos cuadrados... asi mantengo un margen cuadrado con los 2 personajes, ya que es la unica manera que se me ha ocurrido.
Todo va bien, el problema es.. que quiero que esos 2 cuadrados "y los mas que pondre" queden escondidos debajo del scrool, simplemente que hagan su funcion de colision i ya, que no se vean....
como lo ariais? o que manera hay para hacer una colision con una imagen con fondo transparente y poner un margen cuadrado?

Gracias

SplinterGU

porque no usas onexit?

asi


else//sino esta seleccionan elf ocus osea otro lado
           IF (mouse.left) while (mouse.left) frame;end
               signal(type item_select_screen_background,s_kill);
               //destruir=0;
               //focus=0;
           end
       END
       FRAME;
   END
END
process Item_Select_Screen_Background(grafico)
private
int txt = 0;
string vida_txt;
begin
   graph=grafico;
   size=400;
   x=400; //Fondo centrado
   y=50;

   //scroll[0].camera=id; 
   //ctype=c_scroll;   
   //cnumber=C_0;//le digo el mapa que quiero que se vea en este caso el 0, si no lo pusuera se veria en los 2 scroools.

   z=2;
   
   txt=write_var(0,400,100,4,vida_txt);

   loop
       vida_txt = "vida " + vida_2;
       frame;
   end

onexit:
    delete_text(txt);

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

Drumpi

Problema con los textos:
Los textos, al contrario que los gráficos, no están asociados a los procesos: si un proceso muere, los textos que ha escrito no, porque los textos son una especie de proceso en sí.
Cuando usas WRITE (o WRITE_VAR), esta función devuelve un ID, como los procesos, que puedes usar con funciones especiales como son MOVE_TEXT o DELETE_TEXT, como es tu caso, y como te indica Splinter.
Otra cosa, que también lo pone Splinter en el código pero no lo explica: procura usar las funciones WRITE fuera de los bucles, porque como te he dicho, son como procesos, y es como si estuvieses creando uno nuevo a cada frame (a menos que los borres también a cada frame). Es más, el número de textos en pantalla es limitado, si superas ese límite se producirá un error y el programa se cerrará dándote el correspondiente mensaje de error.
Lo suyo es usar WRITE_INT o WRITE_VAR o la que necesites, ya que actualiza el valor de forma automática, así que sñolo tienes que escribirlo una vez.

Las colisiones:
Esos cuadrados deberían ir en otros procesos aparte (supongo que ya lo sabes), así que con ponerles el ALPHA a 0, ya lo tienes. De todas formas, también tienes unas funciones nuevas de colisión (COLLISION_BOX) que puedes usar, o bien hacer la detección usando las coordenadas de los procesos (creas un proceso aparte, que coja la lista de procesos personaje, y compruebe si están demasiado cerca). Algo como:

if (abs(ID1.x-ID2.x) < 10 AND abs(ID1.y-ID2.y) < 10)
  //hay colisión
end


Obviamente, esto tienes que analizarlo y aplicarlo tu, que aquí no damos las cosas hechas ;)
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)

vib

JODER Xd
sois unos putos cracks!!!
sabeis mas que mi profe enserio... el estando 1 hora mirandose el codigo no tuvo huevos a saber porque no se esborraba xD

Bueno lo del texto... solo he echo copiar/pegar y funciona, luego ya hare mas pruebas pero sin duda es lo que necesitaba
gracias :)

Lo que me habeis dicho sobre la 2n duda de las colisiones luego me lo mirare con calma y os comento

PD:Me dejais alucionado con lo que sabeis.. y eso que esto esta lleno de funciones infinitas xD

SplinterGU

me alegro mucho que te hayamos sido de ayuda...

ahora con respecto a tu profesor y a lo que hayamos dicho aca, piensa que (tratandose de bennugd) si yo no lo se o no lo puedo resolver, estamos en un gran problema...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

vib

vale, hecho.
He provado lo que me habeis dicho y exelente a primera vista.

lo de alpha parece que es una especie de z no? el profe nos explico la z el alpha mola mas...

Luego lo de collision_box me he puesto a buscar y no e encontrado nada xD

Lo que dices de colision la parte de comprovar la distancia de los procesos del personaje es una muy buena idea.. ya la tuve encuenta usando los get_dist.

De momento he visto que el alpha hace la funcion que yo queria... y tampoco probare muchas cosas nuevas que en 2 semanas he de entregar el projecto y me queda hacer toda la parte grafica ...

Muchisimas gracias como siempre :)

Soys rapidos, eficaces y concretos me encanta!

espero un dia ser yo quien os ayude ;)

SplinterGU

alpha no es z, sino transparencia del grafico...

collision_box, es similar a la distancia, no es lo mismo, pero se acerca mucho, calcula la colision en base al area formado por las esquinas del grafico, y no por el grafico en si.

tu profesor te enseña bennugd? como se llama tu profesor? en que instituto te enseña?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Juas, no es que sepamos mucho, es que no es lo mismo los conceptos que tenga tu profesor con los que usa Bennu: por ejemplo, la Z podría ser la posición de una figura en un mundo tridimensional, pero en Bennu es símplemente la profundidad, o sea sobre qué o debajo de qué se va a dibujar, tan simple como eso.

Por aquí ya hemos visto textos, X, Y, Z etc, y son el pan nuestro de cada día. Cuando avances con el lenguaje ya te asustarás con el mundo de posibilidades que tiene (vamos, creo que ni Splinter es capaz de saber manejar todo Bennu, aunque lo haya programado él :D :D :D).

Por cierto, Splinter, para odiar la POO, estás manteniendo uno, que no llega al nivel de C, pero que podría llegar si le metes herencia como querías hacer ;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)

SplinterGU

yo creo que el profesor le esta enseñando bennugd.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

Quote from: SplinterGU on February 22, 2011, 02:47:21 PM
si yo no lo se o no lo puedo resolver, estamos en un gran problema...
me encanta, karma++

maestro astilla, has pasado a formar parte de mi firma, je je

vib

Pues SplinterGU
yo este año acabo el grado superior de programacion informatica
y una asignatura que solo se hace a mi instituto es programacion para videojuegos.. y tocamos bennu
De mi ciudad es en el unico lugar donde lo enseñan.. osea en gerona, españa ;)

Pero no tiene mucha idea por lo que veo..
lo de la colision el queria usar un metodo de get_pixel bla bla super raro que jamas nos salio...

FreeYourMind

#11
Quote from: SplinterGU on February 22, 2011, 02:47:21 PM
yo no lo se resolver, estamos en un gran problema, tengo que aprender, tu profesor me puede dar clases ?

Joer, estas mal pero muy mal  ;D

SplinterGU

Quote from: FreeYourMind on February 23, 2011, 10:14:12 PM
Quote from: SplinterGU on February 22, 2011, 02:47:21 PM
yo no lo se resolver, estamos en un gran problema, tengo que aprender, tu profesor me puede dar clases ?

Joer, estas mal pero muy mal  ;D

yo no dije eso!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Quote from: vib on February 23, 2011, 09:39:59 PM
Pues SplinterGU
yo este año acabo el grado superior de programacion informatica
y una asignatura que solo se hace a mi instituto es programacion para videojuegos.. y tocamos bennu
De mi ciudad es en el unico lugar donde lo enseñan.. osea en gerona, españa ;)

Pero no tiene mucha idea por lo que veo..
lo de la colision el queria usar un metodo de get_pixel bla bla super raro que jamas nos salio...

Juas, pues si necesitan gente con experiencia para dar clases de bennu y pagan un sueldo decente, estoy disponible ;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

Me has dado una idea Drumpi, que tal abrir unos cursos de programacion en madrid y te vienes de profesor ?