Noob alert

Started by CarniceroIberico, November 19, 2010, 01:10:03 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

CarniceroIberico

Bueno, antes de nada, saludaros a todos.

Hace un tiempo me interesé por programar en bennu y la verdad que me está gustando bastante todo esto, y bueno, como bien dice el titulo, no soy muy bueno con esto, asi que he pensado que igual podria conseguir algo de información aqui, bueno basicamente voy a hacer una pregunta sobre una "animación" de un personaje, me explico

Se que probablemente me mateis al leer esto porque habre hecho alguna burrada muy grande o algo por el estilo, pero ahi va:

Quoteprocess zombie1()
begin
graph=9;
x=100;
y=300;
z=5;
loop
x=x+2;
from graph=9 to 11; frame; end
frame;
end
end

Basicamente quiero que al moverse ese "zombie" por pantalla, haga una animacion de andar, la cual he dibujado, pero al ponerlo de esa forma, las imagenes pasan a una velocidad brutal y queda increiblemente cutre, me hariais muy feliz si me dierais una ayuda sobre como hacer eso, también lo he intentado con el personaje al moverlo yo, pero usando eso obtengo el mismo resultado.

Tened un poco de paciencia conmigo, porque no habia programado nunca antes en ningun lenguaje de programacion y estoy un poco verde, y muchisimas gracias por la ayuda de antemano.

Yawin

Antes de nada, mi recomendación es que te acostumbres a emplear el comando For antes que From. Según tengo entendido, el From sólamente hace +1 hasta que llega al número indicado. El for es más versatil.

Bien, como no se a cuantos frames por segundo lo tienes hecho, te propongo este código tomando 60 frames por segundo:
process zombie1()
    private
        int i;
    end
    begin
       graph=9;
       x=100;
       y=300;
       z=5;
       loop
          for(i=9;i<=11;i++)
             for(j=0;j<7;j++)
                frame;
             end
             x=x+2;
             graph=i;
             frame;
          end
       end
  end


Si lo he escrito bien, recorrerá 12 metros (por poner una unidad de medida) por la X en un segundo.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

FreeYourMind


Yawin

Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

SplinterGU

bienvenido!

FROM tambien soporta STEP, la sintaxis es

FROM a=b TO c [STEP d]
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Hokutoy

Una cutre solution es cambiar tu frame; por frame(400); para ralentizar la animacion.
Como buen novato te recomiendo que leas/consultes el tutorial de Oscar y de Wind.

Saludos!

CarniceroIberico

#6
Vale, antes de nada daros las gracias a todos por responder a mi pregunta, vale, ahora uno por uno, jaja

QuoteAntes de nada, mi recomendación es que te acostumbres a emplear el comando For antes que From. Según tengo entendido, el From sólamente hace +1 hasta que llega al número indicado. El for es más versatil.

Bien, como no se a cuantos frames por segundo lo tienes hecho, te propongo este código tomando 60 frames por segundo:
Code:
process zombie1()
    private
        int i;
    end
    begin
       graph=9;
       x=100;
       y=300;
       z=5;
       loop
          for(i=9;i<=11;i++)
             for(j=0;j<7;j++)
                frame;
             end
             x=x+2;
             graph=i;
             frame;
          end
       end
  end

Muchas gracias por tu ayuda, pero necesito que me aclares un poco eso, si, el juego trabaja a 60fps, pero, como bien he dicho soy nuevo con esto y estoy un poco liado : (, entiendo todo, hasta la "j" ¿podrias aclararme que es la J por favor? muchas gracias por la ayuda : )

A Freeyourmind, splinterGU, gracias por la bienvenida! igual deberia haberme presentado antes, jaja

y por ultimo Hokutoy, voy a probar a jugar con eso que me has dicho a ver que pasa, y a ver si no interfiere en el "cronometro" que va en mi juego, porque probé a modificar el valor del frame tambien y eso afectaba al cronometro tambien : )

Un saludo a todos y muchas gracias por vuestra ayuda

EDIT: He probado lo del frame Hokutoy, y lo que hace es que el zombie vaya parpadeando,xDDD, gracias por tu ayuda de todos modos

DjSonyk

#7
Bienvenido!!! Lo de la "J" esta puesto para que entre en un bucle corto y asi en cambia el grafico  1 de cada 7 frames,no lo aconsejo pues es perdida de rapidez en el juego,ya que cada vez que llega al bucle anidado salta al siguiente proceso y no ejecuta el resto del codigo mas que 1 vez cada 7 frames,hay otros truquillos como que cambie el grafico cada X milesimas de segundo...Co'n este codigo animarias cada 35 milesimas de segundo aproximadamente,lo puedes cambiar al valor que quieras...
[code language="bennu"]
Anima=get_timer()-Animalo;
  if ( Anima>35 )
    Animalo=get_timer();
    if ( graph==11 )
   graph=9;
    else
   ++graph;
   end
end[/code]

Yawin

Si la j está para el 2º for, lo que ocurre es que se me ha olvidado declararla al lado de la "i".
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

CarniceroIberico

#9
Saludos de nuevo, se que a estas alturas deberia haberlo comprendido ya todo, pero no, : ( asi que os comento mis dudas sobre esto, probé lo que me dijistes yawin y lo he entendido todo perfectamente, pero a la hora de aplicarlo al personaje, el cual muevo yo, no funciona muy bien.. asi que pasé a lo que dijo DjSonyk, y estoy un poco liado, jaja a ver
QuoteAnima=get_timer()-Animalo;
  if ( Anima>35 )
    Animalo=get_timer();
    if ( graph==11 )
   graph=9;
    else
   ++graph;
   end
end

Leyendo un poco en la bennuwiki, bueno, he visto que el "get_timer" te da el tiempo que lleva el programa arrancado en milisegundos, pero eso de "Anima" y "Animalo", ¿son variables que hay que declarar?

Lo siento por preguntar tanto sobre el mismo tema : (

y muchisimas gracias por la ayuda

EDIT: Bueno creo que lo he entendido, más o menos, el valor de anima pasa a ser el tiempo que lleva abierto, menos animalo, que como es 0, no pasa nada, hasta que llega a 35, que entonces el animalo coge el valor de 35 y anima se queda a 0 y mientras que el grafico no sea 11 cada vez que llega anima a 35 se le suma uno, y bueno al llegar a 11 vuelve a 8, pero.. el valor de "Animalo" ¿no se quedaria en 35 y impediria que el "Anima" volviera a 35? y una pregunta tambien muy tonta pero el frame donde iria?

Estoy un poco hecho un lio, lo digo porque probé a hacerlo, pero no funcionaba, y la unica explicacion logica que se me ocurre es esa, pero aun soy un newby con esto

Gracias por todo

EDIT2: me pongo pesao ya con los edits,jaja, he conseguido que lo haga, pero por alguna extraña razón se queda en el grap=9 y luego el graph 10 y 11 los pasa super rapido y vuelve a quedarse en el 9 : (

Yawin

una cosa,: será "graph++" en vez de "++graph" xD

igual así tb funciona. Pero nunca en mi vida lo he visto asi escrito  ^__^
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

SplinterGU

Quote from: yawin on November 22, 2010, 03:05:48 PM
una cosa,: será "graph++" en vez de "++graph" xD

igual así tb funciona. Pero nunca en mi vida lo he visto asi escrito  ^__^

la diferencia entre ++var y var++, es que la primera se incrementa antes de su uso, y la segunda se incrementa despues de su uso.

son pre y pos operadores.

por ejemplo, supongamos que tenemos esto

a = 2;
b = ++a;
say( b);

en este caso b dara como resultado 3
y "a" tambien valdra 3

ahora tenemos esto

a = 2;
b = a++;
say( b);

en este caso b dara como resultado 2, y "a" valdra 3.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

te sugiero veas esto para saber los tipos de operadores que existen en BennuGD

http://es.wikipedia.org/wiki/Operadores_de_C_y_C%2B%2B

aunque en BennuGD existen algunos mas que en C
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Yawin

Amm, pos no tenia ni idea ^__^
gracias por resolver mis dudas poco a poco xD
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DCelso


#define   imagenes_de_la_animacion  3

process zombie1()
     private
         int i;
         int contador;
         int imagenes[imagenes_de_la_animacion];
         int tiempo_en_frames_de_cada_imagen[3];
     end
     begin
        x=100;
        y=300;
        z=5;
        imagenes[0]=9;
        tiempo_en_frames_de_cada_imagen[0]=10;
        imagenes[1]=10;
        tiempo_en_frames_de_cada_imagen[1]=5;
        imagenes[2]=11;
        tiempo_en_frames_de_cada_imagen[2]=10;
        i=0;
        loop
              graph=imagenes[i];
              frame;
             contador++;
              x=x+2;
             if (contador >= tiempo_en_frames_de_cada_imagen[i])
               contador=0;
               i++;
               if (i >= imagenes_de_la_animacion )
                 i =0;
               end
            end
        end
   end

Con este ejemplo lo que hacemos es tener un array con las imágenes de la animación, otro array con los tiempos que dura cada animacion (contados en frames, osea 10 significaria que dura diez frames,etc) y un contador para ir contando los frames que está durando cada animación y que al sobrepasar el valor de lo que dura reiniciamos a 0 para la siguiente animacion.
Monstruos Diabólicos

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