Titre: pb bete mais prise de tete...
Posté par: hacknours le le 27-08-2004 a 17:26:29
Problème tout bête mais prise de tête...
Bonjour amis flasheurs. J'ai souvent rencontré, lors de la création de petits jeux flash débiles, le même problème stupide.
Là où la pratique ne rejoint pas la théorie... J'ai une zone de jeu (carrée pour faire simple) où je fais simplement rebondir une balle sur les bords de cette zone. Je créé ma fonction.
Code:
function avancepuisrebondi (MC){ MC._x+=_root.directionx; MC._y+=_root.directiony; if (MC._x>500 || MC._x<0){ _root.directionx=-_root.directionx; } if (MC._y>500 || MC._y<0){ _root.directiony=-_root.directiony; } }
|
|
si je me limite à ce code, ma balle va rebondir la plupart du temps, mais parfois elle sort trop loin en dehors de la zone et rebondi alors en permanence... La solution que j'ai trouvé est de faire rebondir la balle plus fort qu'elle n'est arrivée.
Code:
... if (MC._x>500 || MC._x<0){ MC._x-=_root.directionx; _root.directionx=-_root.directionx; } if (MC._y>500 || MC._y<0){ MC._y-=_root.directiony; _root.directiony=-_root.directiony; } }
|
|
Cette solution évite de trop fréquents blocages. Cependant cela se produit quand même de temps en temps (surtout si la zone est réduite). J'ai essayé avec un déplacement cos,sin,rad, mais le problème reste le même.
Existe-t-il une solution radicale à ce problème ?
Merci. |
Titre: Re:pb bete mais prise de tete...
Posté par: tavman le le 29-08-2004 a 15:12:35
Je connait ce problème... C'est du au fait que ta balles n'est pas sur des pixels arrondis en fait... Donc il faudrai faire un truc genre avant de tester tes positions :
MC._x = Math.round(MC._x) MC._y = Math.round(MC._y)
Je sais, c'est 2 lignes de code en plus pour mettre pas grand chose au final mais c'est très utile. Ca limitera vacement les petits problèmes de décalage... Et puis oui : faut en plus faire rebondir plus fort que ce n'est arrivé.
Voila, bonne chance a toi sur ce coup là et @+ |
Titre: Re:pb bete mais prise de tete...
Posté par: hacknours le le 31-08-2004 a 00:05:27
Bon, alors j'ai testé ton code, mais rien n'a changé... ha si... c'est limite pire: Quand ma balle eu atteint l'axe des abscisses, comme sa vitesse n'était pas grande, elle est restée coincée. Je pense donc que décaler le clip avant d'inverser la trajectoire reste la meilleure solution bien que cela implique une limite de vitesse... Si la balle arrive trop vite sur la parois... CRAC ! elle se bloque et tremblotte sur place.
En plus pour me compliquer la tâche je me suis dis que j'allais faire rebondir ma balle sur les bords d'une table en perspective. Dukou la taille de la balle change en fonction de ses coo, sa vitesse en fonction de sa taille, et dukou la force du décalage vers l'intérieur de la table aussi. Comment passer d'un truk simple en théorie à une réalisation compliqué... Ou comment se prendre la tête sur pas grand chose...
viite de la caféine...
|
Titre: Re:pb bete mais prise de tete...
Posté par: tavman le le 31-08-2004 a 00:44:49
Je sais plus sur quelle forum j'ai lu ca (dans la signature d'un type) :
La théorie, c'est lorsque ca devrait marcher mais que ca ne marche pas, et on ne comprend pas pourquoi. La pratique, c'est lorsque ca marche alors que ca ne devrait pas... et on ne comprend pas pourquoi non plus.
Bon alors pour ton probleme, je voit pas trop... Normalement, t'essaye pas de faire des jeux en 3D nan plus lol. Bon alors normalement, je sais qu'il faut que la position de la balle soit arrondie au pixel pret, qu'ensuite, il faut faire le test pour voir si elle touche le mur et que si elle touche le mur, alors sa vitesse X (ou Y) est inversée ET EN PLUS il faut rajoutter (ou soustraire si t'es a gauche ou a droite) 2 ou 3 pixels a sa position. Donc ca devrait donner qqch dans ce genre là en fait :
Ma_Balle._x = Math.round(Ma_Balle._x+VX); if(Ma_Balle._x<0){ VX = -VX; Ma_Balle._x += VX*2; }
Mais bon... après ca, si tu me dit que ca marche pas chez toi... c'est la fin des haricot... |
Titre: Re:pb bete mais prise de tete...
Posté par: hacknours le le 31-08-2004 a 20:57:25
C'est bon, çà roule... Merci des tuyau..
|
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|