Anuncios Google

Error sobre la gravedad

Porque cuando pongo gravedad en vez de salirme abajo me sale arriba y luego le doy a la a para que salga el sprite saltando y me sale abajo? 

Codigo:

// Includes
#include <PA9.h>       // Include for PA_Lib
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
#include "gfx(2)/all_gfx.c"
#include "gfx(2)/all_gfx.h"

u16 gravedad = 0;
s16 velocidad = 0;
s32 x = 10;
s32 y = 10;

// Function: main()
int main(int argc, char ** argv)
{
    PA_Init();    // Initializes PA_Lib
    PA_InitVBL(); // Initializes a standard VBL
    PA_EasyBgLoad(1,3,dragon);
   PA_LoadSpritePal(0,0,(void*)goku_Pal);
   PA_CreateSprite(0,0,(void*)goku_Sprite,OBJ_SIZE_32X64,1,0,50,50);
   PA_StartSpriteAnim(0,0,0,6,1);
  
  
  
    // Infinite loop to keep the program running
    while (1)
    {
       x += Pad.Held.Right - Pad.Held.Left;
      velocidad += gravedad;
      y += velocidad;
      PA_SetSpriteXY(0,0,x,y>>8);  
      if (y > 192){
      gravedad = 0;
      velocidad = 0;
      }  
      if (Pad.Held.A){
         PA_DeleteSprite(0,0);
         PA_LoadSpritePal(0,1,(void*)saltando_Pal);
         PA_CreateSprite(0,1,(void*)saltando_Sprite,OBJ_SIZE_32X64,1,1,50,50);
         PA_StartSpriteAnim(0,1,0,6,1);
   }        
             
        PA_WaitForVBL();
    }
   
    return 0;
} // End of main()



Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de best_guitar

hola

este codigo tuyo lo he probado y aparece un grafico arriba y al pulsar A baja un poco luego ya no se mueve...

No he hecho ningun juego en que se utilize gravedad pero debes diferenciar en el programa cuando el personaje esta saltando o normal. En el momento que pulses A el jugador debe tener estado SALTANDO, y partir de una fuerza inicial de salto, a medida que el jugador deje el contacto con el suelo, debe ya aplicarse la ley de la gravedad. para eso te recomiendo que utilices la formula de movimiento parabólico o si mueves el jugador hacia los lados la formula de lanzamiento vertical con caida libre de cuerpos. Finalmente, cuando el muñeco llegue al nivel del suelo, debe volver al estado NORMAL.

Para aplicar la formula,

s(t) = so + Vo*t + (1/2)*a*t^2

donde:

s - es la posicion x del muñeco para t(x).

so - es la posicion x inicial.

vo - fuerza de salto inicial.

a - 9.8 es la fuerza de la gravedad en la tierra.

^ significa al cuadrado.

t es el tiempo, en el momento que se pulsa A se debe poner a cero, y a cada scan incrementar esta variable (recuerda que hay 60 scans por segundo por si te sirve...)

Supongo que hay formas mas faciles de hacerlo pero no las he utilizado...

Imagen de Anabol

Uff que difícil como dices

Uff que difícil como dices hay formas más fáciles de hacerlo pero el error si se le puede llamar así porque el realidad la DS hace lo que él dice.
Aver explico al principio creas dos variables de personaje la x y la y mi pregunta es: ¿Para que? si no las vuelves a usar en todo el código.
Tu problema esque usas posiciones fijas para el sprite x=50 y=50 lo que tendrias que hacer al crear el sprite es esto:PA_CreateSprite(0,0,(void*)goku_Sprite,OBJ_SIZE_32X64,1,0,x,y);Para que el código de gravedad haga algún efecto.

Tienes unos cuantos fallos más uno de ellos es que antes de borrar un sprite que estuviese animado lo tienes que borrar con PA_StopSpriteAnim y luego borrarlo porque si no da fallos y luego los PA_LoadSpritePal se ponen arriba todos juntos no antes de que crees el sprite. Bueno creo que esto es todo pruebalo y comenta espero que te haya servido Salu2.

Imagen de rubenandaluz

Gracias, pero lo he hecho de

Gracias, pero lo he hecho de otra manera y me funciona, pero quiero poner el sprite mas arriba, que debo cambiar?

Codigo:

// Includes
#include <PA9.h> // Include for PA_Lib
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

typedef struct{
s32 x, y;
s32 vy;
} gokutype;

gokutype goku;

#define GRAVITY 48


void Movegoku(void);
// Function: main()
int main(int argc, char ** argv)
{
PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL
PA_InitText(1, 0);

PA_LoadSpritePal(0, 0, (void*)goku_Pal);

goku.x = 0<<8; goku.y = (192-32)<<8;
goku.vy = 0;
PA_CreateSprite(0, 0,(void*)goku_Sprite, OBJ_SIZE_32X64,1, 0, goku.x>>8, goku.y>>8);

while (1)
{
Movegoku();

PA_SetSpriteXY(0, 0, goku.x>>8, goku.y>>8);

PA_WaitForVBL();
}

return 0;
}
void Movegoku(void){
if(Pad.Newpress.Right) {
PA_StartSpriteAnim(0, 0, 0, 1, 6);
PA_SetSpriteHflip(0, 0, 0);
}
else if(Pad.Newpress.Left) {
PA_StartSpriteAnim(0, 0, 0, 1, 6);
PA_SetSpriteHflip(0, 0, 1);
}

if ((Pad.Newpress.A) && (goku.vy == 0)){
goku.vy = -1000;
}


goku.x += (Pad.Held.Right - Pad.Held.Left)<<8;


goku.vy += GRAVITY;
goku.y += goku.vy;
if (goku.y >= (192-32)<<8) {
goku.y = (192-32)<<8;
goku.vy = 0;
}

if (goku.vy != 0) PA_SetSpriteAnim(0, 0, 2);
else if(!((Pad.Held.Left)||(Pad.Held.Right))) PA_SetSpriteAnim(0, 0, 0);
} // End of main()

Imagen de Anabol

Al final usaste el ejemplo de

Al final usaste el ejemplo de C:\devkitPro\palib\examples\Demos\PlatformGame\PlatformGame no te entiendo con lo de poner el sprite más arriba... Si te refieres a que salte más la línea goku.vy = -1000 sustituye ese valor por valores que se acerquen mas a -∞ Salu2.

Imagen de magicblack2009

Yo creo que se refiere a que

Yo creo que se refiere a que el personaje (goku) aparezca más arriba de donde aparece, no tan pegado a la parte de abajo de la pantalla.

El otro día descubrí como hacerlo, pero no me acuerdo xD, así que debes esperar a que alguien te conteste.

EDIT: Debes cambiar esto:

 goku.vy += GRAVITY;
 goku.y += goku.vy;
 if (goku.y >= (192-32)<<8) {
  goku.y = (192-32)<<8;
  goku.vy = 0;

}

Esos dos 192 los debes cambiar por un número menor para que aparezca más arriba.

Espero serte de ayuda :)


¿Quieres estar totalmente informado sobre el universo 3DS? Visita Magic3DS.

También puedes estar al tanto de toda la actualidad de 3DS en Twitter: @Magic3DS

Imagen de rubenandaluz

Ya lo puse, cuando mejore el

Ya lo puse, cuando mejore el homebrew lo posteo :)

Imagen de exterminator

Te linkeo

al Día 5, que tiene un apartado dedicado a la gravedad:

http://nds.scenebeta.com/tutorial/palib-b%C3%A1sico-d%C3%AD-5

Salu2

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.