PDA

Voir la version complète : [PSP][Aide] Background Animation


ZereoX
06/04/2008, 06h09
OK j'essai de faire un animation de background may comme image est grande je ne c'est pas comment le faire:

#include <oslib/oslib.h>

PSP_MODULE_INFO("Animation", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

OSL_IMAGE *Battle_Animation0, *Battle_Animation1, *Battle_Animation2, *Battle_Animation3, *Battle_Animation4, *Battle_Animation5, *Current_Bg;

int Bg_Battle_Timer;
int Bg_Battle_Current;

void Bg_Battle_Animation();
void Bg_Battle_Animation_Loading();

int main(){

oslInit(0);

oslInitGfx(OSL_PF_8888, 1);

Bg_Battle_Animation();

while (!osl_quit)
{
oslStartDrawing();
oslCls();
Bg_Battle_Animation();
oslDrawImage(Current_Bg);
oslEndDrawing();
oslSyncFrame();
}

oslEndGfx();
oslQuit();
return 0;
}

void Bg_Battle_Animation(){

Bg_Battle_Timer++;

if(Bg_Battle_Timer == 6){
Bg_Battle_Timer = 0;
Bg_Battle_Current++;

if(Bg_Battle_Current == 5) Bg_Battle_Current = 0;
}

if(Bg_Battle_Current == 0){
Current_Bg = Battle_Animation0;}
else if(Bg_Battle_Current == 1){
Current_Bg = Battle_Animation1;}
else if(Bg_Battle_Current == 2){
Current_Bg = Battle_Animation2;}
else if(Bg_Battle_Current == 3){
Current_Bg = Battle_Animation3;}
else if(Bg_Battle_Current == 4){
Current_Bg = Battle_Animation4;}
else if(Bg_Battle_Current == 5){
Current_Bg = Battle_Animation5;}

}

void Bg_Battle_Animation_Loading(){

Battle_Animation0 = oslLoadImageFile("Images/Background/Bg_Battle_Animation/Bg_Battle_Animation1.png", OSL_IN_RAM, OSL_PF_5551);
Battle_Animation1 = oslLoadImageFile("Images/Background/Bg_Battle_Animation/Bg_Battle_Animation2.png", OSL_IN_RAM, OSL_PF_5551);
Battle_Animation2 = oslLoadImageFile("Images/Background/Bg_Battle_Animation/Bg_Battle_Animation3.png", OSL_IN_RAM, OSL_PF_5551);
Battle_Animation3 = oslLoadImageFile("Images/Background/Bg_Battle_Animation/Bg_Battle_Animation4.png", OSL_IN_RAM, OSL_PF_5551);
Battle_Animation4 = oslLoadImageFile("Images/Background/Bg_Battle_Animation/Bg_Battle_Animation5.png", OSL_IN_RAM, OSL_PF_5551);
Battle_Animation5 = oslLoadImageFile("Images/Background/Bg_Battle_Animation/Bg_Battle_Animation6.png", OSL_IN_RAM, OSL_PF_5551);

}


Ceci ne fonctione pas et est semble tres ineficace.

Yodajr
06/04/2008, 15h00
You can write in english if you want...

Mais si t'es français, c'est assez grave, les fautes rendent tes phrases assez incompréhensibles...

Bon, d'après le code, tu n'appelle jamais Bg_Battle_Animation_Loading(), donc les images ne sont pas chargées lorsque tu les utilise, donc je suppose que la PSP plante puis s'éteind.

ZereoX
06/04/2008, 15h11
Désolé, J'étais fatiguer hier quand j'ai écris sa. Je me trouve vraiment stupide, je n'ai même pas remarquer que j'ai pas "Call" la fonction. Merci beaucoup, mais ni aurait t-il pas une meilleur façon de faire une animation de Bg.

ZereoX
07/04/2008, 01h15
Mon problème ici, c'est que l'animation ne vas jamais se faire au complet car la fonction est appeler seulement quand mon personnage bouge. Ya t-il façon de faire fonctionner cette fonction jusqu'à ce que l'animation est terminer.
void Player_Moving(){


Player_Moving_Timer++;
if(Player_Moving_Timer == 2){
Player_Moving_Timer = 0;
Player_Current_Frame++;
Player_Action = Moving;
}
if(Player_Action == Moving){
oslSetImageTileSize(Player,(Player_Current_Frame * 51),0,51,61);
}
else if(Player_Current_Frame == 4){
Player_Action = Idle;
}
}
P.S: Desole pour double post mais je veux pas faire un nouveaux Thread.

Yodajr
07/04/2008, 21h52
Comment ça quand le personnage bouge ?
Tu veux peut être dire "que quand j'appuie une touche" ?

Dans ce cas, en gros fait passer une variable à 1 quand on appuie une touche et fait la repasser à 0 quand l'anim est finie : if(Player_Current_Frame == 4)

Et dans ta boucle principale, met ton Player_Moving() avec un if (variable == 1) devant...

ZereoX
07/04/2008, 22h30
Merci très claire.