La Communauté Webmaster  forum rss


  Forum-webmaster
  Webdesign / graphisme
  Flash / Director
(Modérateurs: Shain, Netah, Lilian, lauryv, ToToMaStEr)
  pb bete mais prise de tete...
« Précédent Suivant »
Pages: [1] Descendre
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
  Auteur  Sujet: pb bete mais prise de tete...  (Lu 913 fois)
pb bete mais prise de tete...
« sur: le 27-08-2004 a 17:26:29 »
hacknours
P'tit nouveau
**

Hors-Ligne

Sexe: Male
Messages: 137



Vive ActionScript !!!

Voir le Profil    WWW    E-Mail
Répondre avec citation

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.

Rapporter au modérateur  

Re:pb bete mais prise de tete...
« Répondre #1 sur: le 29-08-2004 a 15:12:35 »
tavman
Habitué
***

Hors-Ligne

Messages: 466



HS

Voir le Profil
Répondre avec citation

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 @+

Rapporter au modérateur  

I-Radian
Re:pb bete mais prise de tete...
« Répondre #2 sur: le 31-08-2004 a 00:05:27 »
hacknours
P'tit nouveau
**

Hors-Ligne

Sexe: Male
Messages: 137



Vive ActionScript !!!

Voir le Profil    WWW    E-Mail
Répondre avec citation

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...

Rapporter au modérateur  
Re:pb bete mais prise de tete...
« Répondre #3 sur: le 31-08-2004 a 00:44:49 »
tavman
Habitué
***

Hors-Ligne

Messages: 466



HS

Voir le Profil
Répondre avec citation

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...

Rapporter au modérateur  

I-Radian
Re:pb bete mais prise de tete...
« Répondre #4 sur: le 31-08-2004 a 20:57:25 »
hacknours
P'tit nouveau
**

Hors-Ligne

Sexe: Male
Messages: 137



Vive ActionScript !!!

Voir le Profil    WWW    E-Mail
Répondre avec citation

C'est bon, çà roule...
Merci des tuyau..

Rapporter au modérateur  
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
Pages: [1] Monter
« Précédent Suivant »
Sauter à: 

Votre statut : Invité
Vous devez être membre pour participer.
 
 
Let’s Encrypt : le certificat SSL gratuit
Tester votre site internet sur différents navigateurs
[WordPress] Des problèmes avec l’administration ?
Rappel : Mettez à jour vos CMS et vos sites E-commerce
Le .fr fête ses 25 années d’existence !
Mesurer votre audience en temps réel avec BubbleStat
Porter réclamation contre Google Panda ?
Zlio n’est plus …
 
 
 
 
 

Copyright (c) Devclic 2002 - 2026 - Tous droits réservés

creation site internet strasbourg