terça-feira, dezembro 05, 2006

Scroll no fundo com parallax

Quem quiser ver como fazer com parallax, segue aqui o fonte. É só substituir o main.c do post anterior por este aqui. O resultado visual ficou exatamente o mesmo. Uma diferença é que com parallax, eu posso colocar velocidades de backgrounds mais próximas do que no scroll ponto a ponto.

// Includes
#include // Include for PA_Lib

#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

// Function: main()
int main(int argc, char ** argv)
{
  //variaveis
  s32 x=95;
  s32 y=79;
  s32 scrl=0;

  //programa
  PA_Init(); // Initializes PA_Lib
  PA_InitVBL(); // Initializes a standard VBL

  PA_EasyBgLoad(1, 0, fundo3); // carrega, na tela 1, no nivel de fundo 0, o fundo3
  PA_EasyBgLoad(1, 1, fundo4); // carrega, na tela 1, no nivel de fundo 1, o fundo4
  PA_EasyBgLoad(1, 2, fundo5); // carrega, na tela 1, no nivel de fundo 2, o fundo5

  PA_InitParallaxX(1, 512, 256, 128, 0); // define o parallax horizontal com velocidade dobrada, normal, metade e sem parallax (0)

  PA_LoadSpritePal(1, 0, (void*)aviao_Pal);
  PA_CreateSprite(1, 0, (void*)aviao_Sprite, OBJ_SIZE_64X32, 1, 0, x, y);

  // Infinite loop to keep the program running
  while (1)
  {
    scrl ++;
    if (scrl>1024) scrl=0;
    PA_ParallaxScrollX(1, scrl); //parallax na tela 1, conforme o valor de scrl;

    x += (Pad.Held.Right - Pad.Held.Left) * 2;
    y += (Pad.Held.Down - Pad.Held.Up) * 2;
    if (y<0) y=0;
    if (y>159) y=159;
    if (x<0) x=0;
    if (x>191) x=191;

    PA_SetSpriteXY(1,0,x,y);

    PA_WaitForVBL();
  }

  return 0;
} // End of main()

2 comentários:

Anônimo disse...

Puxa, bem direto. Só falta ter um esqueminha pronto para tiles ou testes de colisão.

Guilherme - Homebrew Maker disse...

tem sim. só que eu ainda não cheguei lá.