![]() |
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Ouvrir sur le forum | Recherche | Messages du jour | Marquer les forums comme lus |
Publicité |
![]() |
|
Outils de la discussion | Modes d'affichage |
![]() |
#1 |
Membre confirmé
Date d'inscription: 09/01/2008
Messages: 267
|
![]() Bonsoir à tous,
Aloir voila ce qui se passse : je voudrais faire en sorte qu'un petit bonhomme, dont le sprite est le n°0, puisse tirer des petits missile, dont les sprites s'étalent du n°1 au n°4. Je récupère donc l'angle de tir avec le stylet, puis je le stocke dans une variable, afin de pouvoir m'en servir avec PA_Cos et PA_Sin pour le faire avancer : Code:
if (Stylus.Newpress){ i++; missile[i].angle = PA_GetAngle(bfight.x+16, bfight.y+32, Stylus.X, Stylus.Y); PA_CreateSprite(0, i, (void*) Missile_Sprite, OBJ_SIZE_8X8, 1, 1, missile[i].x, missile[i].y); missile[i].x=PA_GetSpriteX(0, 0)+16; missile[i].y=PA_GetSpriteY(0, 0)+32; PA_StartSpriteAnim(0, i, 0, 3, 15); missile[i].exist=true;} Code:
if (missile[1].exist==true){ missile[1].x += PA_Cos(missile[1].angle)*0.01; missile[1].y += PA_Sin(missile[1].angle)*0.01; PA_SetSpriteXY(0, 1, missile[1].x, missile[1].y);} Et après, on ne peut pas le changer en touchant un autre endroit. Si quelqu'un trouve une solution, je suis preneur! Une heure que je me casse la tête là-dessus...
__________________
Mon Mon Devblog Coloration terminée, attente de réactions sur certaines couleurs : TETRIS 21.59091 au Geek Test |
![]() |
![]() |
Publicité |
![]() |
#2 |
Modérateur
Date d'inscription: 28/02/2007
Localisation: Grenoble
Messages: 576
|
![]() Delca merci encor de t occupé de sa.
Je sais pas si sa peut t aider mais ta variable i doit retourné a 0 Code:
if (i==3) i=0; Code:
if (missile[1].exist==true){ missile[1].x += PA_Cos(missile[1].angle)*0.01; missile[1].y += PA_Sin(missile[1].angle)*0.01; PA_SetSpriteXY(0, 1, missile[1].x, missile[1].y);} fait plutot ca Code:
int j; for(j=0;j<nb_de_missile_tiré;j++){ if (missile[j].exist==true){ missile[j].x += PA_Cos(missile[j].angle)*0.01; missile[j].y += PA_Sin(missile[j].angle)*0.01; PA_SetSpriteXY(0, 1, missile[j].x, missile[j].y);}
__________________
Dernière modification par Cortes48 ; 22/03/2008 à 11h40. |
![]() |
![]() |
![]() |
#3 |
Membre confirmé
Date d'inscription: 09/01/2008
Messages: 267
|
![]() -Pour la variable qui retourne à 0, c'est déjà fait, mais je n'ai pas jugé utile de le poster ici...
-Ici, j'ai mis 1 pour faire un test sur le premier missile uniquement. Je changerais quand tout fonctionneras bien. -Quant au PA_StartSpriteAnim, il démarre l'animation, et une fois lancée, elle n'a plus besoin de rien pour continuer. Donc une frame suffit.
__________________
Mon Mon Devblog Coloration terminée, attente de réactions sur certaines couleurs : TETRIS 21.59091 au Geek Test |
![]() |
![]() |
![]() |
#4 |
Membre confirmé
Date d'inscription: 10/11/2005
Messages: 830
|
![]() GCC doit certainement prononcer quelques insultes à la compilation, quelles sont elles ?
tu devrai plutôt passer par des nombres fixed (c'est dans la logique du middleware que tu utilises) en admettant que ta structure ressembles globalement a ça: Code PHP:
![]() Code PHP:
|
![]() |
![]() |
![]() |
#5 |
Elite
Date d'inscription: 10/04/2006
Localisation: Pays de la moutarde
Messages: 901
|
![]() un petit exemple tiré du post baby-foot de Cyberced
dur à retrouver en plus ![]() ![]() http://www.playeradvance.org/forum/s...&postcount=110 j'espère que cela pourra t'aider ![]()
__________________
Mon blog de dev - - Mon tutoriel sur la libfat -- DSPhoto Un bon programmeur est fainéant : il déteste refaire la même chose, il fait donc des fonctions ![]() Il est impossible de tout savoir ![]() 28.59848% au Geek Test |
![]() |
![]() |
![]() |
#6 |
Membre confirmé
Date d'inscription: 09/01/2008
Messages: 267
|
![]() Merci à vous deux pour vos réponses, mais le problème est toujours présent:
-nesgba, si c'est bien ce que j'ai compris, je n'ai aucune erreur de compilation. Et pour ton code (auquel je n'ai rien compris...), il donne exactement le même résultat qu'avant, c'est à dire qu'il y a un angle impossible à changer. -Arialia, ton message à l'air de concerner plus le déplacement à l'aide des angle, ce que j'ai réussi à faire. Chez moi, le problème, c'est que l'angle récupéré est toujours le même. Au passage, je viens de remarquer que l'angle récupéré est toujours supérieur à 65.000 ![]()
__________________
Mon Mon Devblog Coloration terminée, attente de réactions sur certaines couleurs : TETRIS 21.59091 au Geek Test |
![]() |
![]() |
![]() |
#7 | |
Elite
Date d'inscription: 10/04/2006
Localisation: Pays de la moutarde
Messages: 901
|
![]() Citation:
![]() ![]() c'est pas encore la grande forme d'ailleurs ![]() sinon j'ai vu que le tuto PALib a été mis à jour il y a pas très longtemps, et on y trouve des choses très intéressantes surtout sur les angles et les collisions : http://www.palib.info/wikifr/doku.php?id=day6 pour l'instant je ne fais pas de commentaires sur ton code car :
__________________
Mon blog de dev - - Mon tutoriel sur la libfat -- DSPhoto Un bon programmeur est fainéant : il déteste refaire la même chose, il fait donc des fonctions ![]() Il est impossible de tout savoir ![]() 28.59848% au Geek Test |
|
![]() |
![]() |
![]() |
#8 |
Membre confirmé
Date d'inscription: 09/01/2008
Messages: 267
|
![]() Même après une sixième relecture du tuto, je ne vois pas ce qui cloche dans mon code.
Par contre, je viens de remarquer un nouveau fait étrange : en utilisant PA_GetAngle avec comme cible la position du stylet, je me suis aperçu que l'angle ne changeais que selon la position du personnage à l'écran. C'est à dire que le stylet n'est pas pris en compte malgré l'utilisation de Stylus.X et Stylus.Y.
__________________
Mon Mon Devblog Coloration terminée, attente de réactions sur certaines couleurs : TETRIS 21.59091 au Geek Test |
![]() |
![]() |
![]() |
#9 |
Elite
Date d'inscription: 10/04/2006
Localisation: Pays de la moutarde
Messages: 901
|
![]() Bon je me suis un peu penchée sur le problème et j'ai pondu un petit exemple
Code:
// Includes, only one sprite #include <PA9.h> // PAGfx Include #include "gfx/all_gfx.c" #include "gfx/all_gfx.h" // Main function int main(void){ // PAlib init PA_Init(); PA_InitVBL(); PA_InitText(1, 0); // Load the sprite palette, for both screens PA_LoadSpritePal(0, // Screen 0, // Palette number (void*)sprite0_Pal); // Palette name // Now, let's copy the image of the sprite to VRAM : // First screen u16 gfx0 = PA_CreateGfx(0, // screen (void*)vaisseau_Sprite, // Image OBJ_SIZE_32X32, // Size 1); // 256 color sprite // Same thing for the top screen : // u16 gfx1 = PA_CreateGfx(1, (void*)vaisseau_Sprite, OBJ_SIZE_32X32, 1); // The gfx0 and gfx1 variables stock the number of the gfx, this will allow us to create sprites later on u8 nsprites0 = 0; // Number of sprites on the bottom screen s32 x = (128-16) << 8; // ship x position in 8bit fixed point s32 y = (96-16) << 8; // Y u16 angle = 0; // direction in which to move ! PA_CreateSpriteFromGfx(0, // screen nsprites0, // Next sprite to load... gfx0, // image to use in memory, no image copying ! OBJ_SIZE_32X32, 1, 0, x>>8, y>>8); // The rest is like normal sprites PA_SetSpriteRotEnable(0,0,0);// Enable rotations and use Rotset 0... while(1) { // si le stylet appuie sur l'écran ... on tourne le sprite if (Stylus.Held){ // Move forward angle=PA_GetAngle((x>>8) +16, (y>>8) +16, Stylus.X, Stylus.Y); PA_OutputText(1, 5, 5, "Angle : %d ", angle); PA_SetRotsetNoZoom(0, 0, angle-128); // Turn the ship in the correct direction x += PA_Cos(angle); y -= PA_Sin(angle); } PA_SetSpriteXY(0, 0, x>>8, y>>8); // Sprite position converted to normal... PA_WaitForVBL(); //La boucle infinie du programme } return 0; }
__________________
Mon blog de dev - - Mon tutoriel sur la libfat -- DSPhoto Un bon programmeur est fainéant : il déteste refaire la même chose, il fait donc des fonctions ![]() Il est impossible de tout savoir ![]() 28.59848% au Geek Test |
![]() |
![]() |
![]() |
#10 |
Membre confirmé
Date d'inscription: 09/01/2008
Messages: 267
|
![]() Je multiplie par 0.01 pour ralentir les missiles, parce que moi et les points fixes, ça fait deux. (j'ai compris le principe, mais je vois pas l'utilité....)
La bonne nouvelle, c'est que c'était les points fixes le problème : en fait, dans la fonction PA_GetAngle, j'avais oublié le >>8 derrière bfight.x et bfight.y. Du coup, tout marche bien maintenant. Merci pour ton aide! ![]()
__________________
Mon Mon Devblog Coloration terminée, attente de réactions sur certaines couleurs : TETRIS 21.59091 au Geek Test |
![]() |
![]() |
![]() |
#11 |
Membre confirmé
Date d'inscription: 24/05/2007
Localisation: devant mon pc
Messages: 2 027
|
![]() les points fixes servent a remplacer les float sur les systeme ou ça merde
|
![]() |
![]() |
![]() |
#12 |
Membre confirmé
Date d'inscription: 09/01/2008
Messages: 267
|
![]() Et sur DS, les floats merdent, comme tu dis? Je croyais qu'ils étaient juste très lent à gérer.
__________________
Mon Mon Devblog Coloration terminée, attente de réactions sur certaines couleurs : TETRIS 21.59091 au Geek Test |
![]() |
![]() |
![]() |
#13 |
Membre confirmé
Date d'inscription: 24/05/2007
Localisation: devant mon pc
Messages: 2 027
|
![]() c'est la meme chose...
...enfin presque ![]() |
![]() |
![]() |
![]() |
#14 |
Modérateur
Date d'inscription: 28/02/2007
Localisation: Grenoble
Messages: 576
|
![]() Peut etre que ton angle=PA_GetAngle(...); doit sortir de la condition if(Stylus.Held){}
car l angle est toute le temp égal a PA_GetAngle(...); Il n est pas égal a ca que si on touche l écran
__________________
|
![]() |
![]() |
![]() |
#15 |
Membre confirmé
Date d'inscription: 09/01/2008
Messages: 267
|
![]() Je n'ai besoin de redéfinir l'angle que lorsque le stylet touche l'écran.
Une fois que je lui ai donner une valeur, il la garde tant que je ne décide pas de la changer (ou que je ferme l'émulateur ![]()
__________________
Mon Mon Devblog Coloration terminée, attente de réactions sur certaines couleurs : TETRIS 21.59091 au Geek Test |
![]() |
![]() |
![]() |
#16 |
Elite
Date d'inscription: 10/04/2006
Localisation: Pays de la moutarde
Messages: 901
|
![]() au fait Delca je t'ai mis volontairement un exemple de PA_CreateSpriteFromGfx et de PA_CreateGfx dans mon code : cela me semble très approprié ( voire recommandé ) pour tes missiles, grâce à cela tes 4 sprites pourront se partager le même gfx ( à tester avec les anims mais d'après ce que j'ai compris des sources de la PALib ça devrait marcher sans problème .... chapeau Mollusk
![]() [Edit] argh non c'est pas compatible avec les anims : la palib changeant le graphique du sprite à chaque frame. Donc si deux sprites se partagent une animation mais ne sont pas synchro , tu est obligé de les considérer comme différents ![]()
__________________
Mon blog de dev - - Mon tutoriel sur la libfat -- DSPhoto Un bon programmeur est fainéant : il déteste refaire la même chose, il fait donc des fonctions ![]() Il est impossible de tout savoir ![]() 28.59848% au Geek Test Dernière modification par Arialia ; 27/03/2008 à 01h03. |
![]() |
![]() |
![]() |
Liens sociaux |
Publicité |
Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s)) | |
Outils de la discussion | |
Modes d'affichage | |
|
|