PDA

Voir la version complète : [NDS][Aide] Aide sur les angles sur nds


vegego
21/04/2006, 13h33
Bonjour à tous et toutes

J'ai un souci que je traine depuis un moment, j'essaye de faire un arkanoid sur DS,
A part les briques que je n'ai pas encore faite j'ai les murs, la raquette et la balle.

Toutes les collisions fonctionne bien, mais dans un souci de réalisme je cherche à ce que la balle utilise n'importe quel angle, car pour le moment tout les rebonds se font avec un angle de 45°

J'ai essaye la fonction PA_GetAngle () et aussi PA_Cos mais sa ne marche vraiment pas ou je mi suis tres mal pris.

Donc j'en appelle a votre aide merci d'avance


Voila la portion de code qui gere la balle :

// Direction de la balle suivant l'axe y
// Les deux derniers test : la balle ne traverse plus la raquette lorsqu'elle tombe
if (y1 <= 0)
z = 1;
else if (y1 == 365 && ((x1 + TBALLE) >= x && x1 <= (x + TVAISSEAU)))
{
score += 1;
z = -1;
}
else if (y1 > 365 && (x1 + TBALLE) == x)
{
z = 1;
w = -1;
}
else if (y1 > 365 && x1 == (x + TVAISSEAU))
{
z = 1;
w = 1;
}

if (oldw != w || oldz != z)
{
oldw = w;
oldz = z;
oldx = x1;
oldy = y1;
}
x1 += w * vitesse;
y1 += z * vitesse;

Pyroh
21/04/2006, 14h12
Le plus simple est de faire des angles préfinis (comme ce qui est utilisé pour frozzen bubble. Tu définis ces angles d'un manière relativement simple.
Ex : 45° c'est +1 en X et +1 en Y, 135° pareil.
22° c'est +2 en X et +1 en Y pareil pour 112 et ainsi de suite 8 angles des 2 côtés de la normale me semble relativement suffisants (voir peut etre meme 6)

Les calculs d'angle seraient trop lourds au niveau temps CPU et inutiles comme tu peux le constater ;)

Brunni
21/04/2006, 14h26
Sinus / cosinus pour n'importe quel angle.
Exemple: sin(0°) = 0, sin(45°) = 0.707... sin(90°) = 1, sin(180°) = 0, sin(270°) = -1
Donc en fait il te suffit de soustraire ça à ta position y. Si ta balle va en haut (90°), ça donne bien -1.
Pareil pour le cosinus et x, sauf qu'il faut additionner (fais des tests sur une calc pour voir :)).
Ensuite tu peux simplement multiplier ces valeurs par la vitesse de ta balle (sin/cos donnent toujours des valeurs entre -1 et 1).

Yodajr
21/04/2006, 15h44
Ca peut aider aussi ;) :
http://www.playeradvance.org/old/index.php?showtopic=6671

vegego
21/04/2006, 19h32
Merci de votre aide

Yodajr : J'avais deja essaye en me basant sur ce tutoriel mais je m'en suis pas sorti avec le tableau, il faut avoir un nombre sans virgule et ensuite le divise rpour revenir a une valeur normale, en utilisant cette methode ma balle avait des comportement vraiment bizarre et ceci malgre plusieurs test et facon de faire le tableau.

Brunni : Je ne peux pas non plus faire ta methode (j'ai essaye pourtant) mais la aussi je retonbe sur les phenomenes bizarre de la methode du tutoriel.

Anarx : Par contre ta methode je l'ai pas essaye et elle me parait tres bonne :) ce week end je la met en place et je vous tient au courant.

En tout cas merci de votre aide sa fait pratiquement 1 mois que je traine ce probleme :(

Mollusk
05/05/2006, 19h26
Tu as regardé les tutos PAlib (cf ma sig) ? Y'a un ou deux truc qui traitent justement des angles (j'ai tout appris sur le lien de Yoda ^^), la façon d'utiliser Cos et Sin dans PAlib (largement assez rapide, c'est un tableau et non un calcul à chaque fois), la façon d'utiliser GetAngle, etc...

Pyroh
05/05/2006, 21h15
Mollusk vivant :w00t: !!!
Ca fait longtemps dit donc ! Oucéktété ?
T'as du boulot y'a le wifi à intégrer à la PAlib ;)

Mollusk
06/05/2006, 01h41
Mollusk vivant :w00t: !!!
Ca fait longtemps dit donc ! Oucéktété ?
Nul part et partout à la fois ^^

T'as du boulot y'a le wifi à intégrer à la PAlib ;) Euh, non, j'ai trouvé quelqu'un pour s'en charger :lol:

Tembargo
06/05/2006, 01h46
Euh, non, j'ai trouvé quelqu'un pour s'en charger :lol:
ça pour une nouvelle :D c'est une bonne nouvelle didon :D