gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

Graphics > stoping the ghost effect in animation

#177096 - blessingta@hotmail.co.uk - Sat Dec 10, 2011 5:21 pm

how do I stop GBA from not clearing my animations once they are finished? So far I've tried using these two functions:

Code:
void clear_sprites()
{
//Max x = 230,MAx y = 150;
int i_x_sp = 0, i_y_sp = 0;
for (i_y_sp = 0;i_y_sp < 150 ;i_y_sp++ )
{
for (i_x_sp = 0;i_x_sp < 230 ;i_x_sp++ )
{
psMy_OAM_Sprites16[0 * 4 + 0] = ((0<<14)|(0<<7)|(i_y_sp<<0));
psMy_OAM_Sprites16[0 * 4 + 1] = ((0<<14)|(0<<13)|(0<<12)|(0<<8)|(i_x_sp<<0));
psMy_OAM_Sprites16[0 * 4 + 2] = ((0<<12)|(0<<10)|(0<<8)|(0<<0));
psMy_OAM_Sprites16[0 * 4 + 3] = 0;

}
}
}


void clear_screen()
{
int i= 0, j= 0;
for (i = 0; i < 20 ;i++)
{
if (j >= 30 && i < 20) //go to a new line when, we running out of line space
{j = 0; i++;}
//clear fonts with blank space
usMemPtr[(i*32) + j] = ((0 <<12)|(0 << 11)|(0 <<10)|(32 << 0));
j++;
}

}

#177097 - blessingta@hotmail.co.uk - Sat Dec 10, 2011 5:27 pm

this is how i render my sprites

Code:


void bluecircle_sprites(int i_x_sp,int i_y_sp, int oam_pos)
{//2x2 size
//priority = layer 0
if (!(oam_pos > 9 && oam_pos < 19))
{oam_pos = 10;}
int i_layer = 0;

int i_sprite_shape = 0,i_sprite_size = 1;
int pallete = 2;//change pallette
///////////////////////////////////////
///////////ANIMATE_SPRITE/////////////
static int sprite_reference;//1;
sprite_reference += 4;
if (sprite_reference > 9) //9 is the largest sprite
{sprite_reference = 1;} //restart frame (loop)
///////////////////////////////////////

   psMy_OAM_Sprites16[oam_pos * 4 + 0] = ((i_sprite_shape<<14)|(0<<7)|(i_y_sp<<0));
    psMy_OAM_Sprites16[oam_pos * 4 + 1] = ((i_sprite_size<<14)|(0<<13)|(0<<12)|(0<<8)|(i_x_sp<<0));
    psMy_OAM_Sprites16[oam_pos * 4 + 2] = ((pallete<<12)|(i_layer<<10)|(0<<8)|(sprite_reference<<0));
    psMy_OAM_Sprites16[oam_pos * 4 + 3] = 0;

}

#177100 - Miked0801 - Sat Dec 10, 2011 6:43 pm

Interrupt management. Clear and redraw your OAMs in VBlank.