Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/03/2011, 20h17   #1
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2011
Messages : 2
Points : 0
Points : 0
Par défaut Rond tronqué lors du déplacement

Bonjour,

Je me met à l'as3 et je rencontre déjà un soucis des le début. J'ai fait un rond qui rebondit sur les rebords de l'écran. Mais lors de son déplacement, le rond est tronqué de la valeur de déplacement que je lui ai donné. Vous pouvez visualiser le soucis à l'adresse suivante (faites pas attention à l'adresse ^^ => http://gros-caca.fr)

Le code est le suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
import flash.display.Shape;
import flash.events.Event;
 
stage.frameRate=60;
 
var balle:MovieClip = new MovieClip();
var modifX:Number = 5;
var modifY:Number = 5;
 
balle.graphics.lineStyle(4, 0x000000);
balle.graphics.beginFill(0xFF0000);
balle.graphics.drawCircle(20, 20, 20);
balle.x = 100;
balle.y = 100;
 
this.addChild(balle);
 
this.addEventListener(Event.ENTER_FRAME, bouge);
 
function bouge(pEvt:Event):void{
	if(balle.x > stage.stageWidth - 40 || balle.x < 1) modifX *= -1;
	if(balle.y > stage.stageHeight - 40 || balle.y < 1) modifY *= -1;
 
	balle.x += modifX;
	balle.y += modifY;
}
Si je baisse le framerate le soucis n'est plus présent, mais ce n'est plus aussi fluide. Comment puis je corriger cela ?

Par avance, merci.

Threonine
threonine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 09h18   #2
Membre du Club
 
Inscription : avril 2011
Messages : 58
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 58
Points : 56
Points : 56
Avec un algo aussi basique t'aura pas le bons résultat.

Si tu veux que ta balle rebondisse de manière plus réaliste il va falloir se creuser les méninge un peu plus.

Premièrement si tu utilise le centre de ta balle, il faut que le rectangle de collision aie une marge de la taille du rayon de la balle. Donc on teste entre si x<rayon pour la gauche et si x>(largeur-rayon) pour la droite.

Ensuite il faut un peut d'imagination. Imagine la balle se déplace au moment T elle arrive proche de mur, à T+1 elle devrait être de l'autre coté du mur (imagine) mais comme le mur est là il agit comme un miroir

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
         |
    x'   |   x <- position de la balle à t+1 si y'avait pas de mur
      \  |  /
       \ | /
        \|/
         |
        /|
       / |
      /  |
     /   |
    /    |
  B      |
         mur
B balle à T
x position théorique de la balle
x'position où on doit placer la balle

il faut donc que tu inverse la position de la balle.

si la balle a traversé le mur alors :
position de la balle = position du mur + distance entre la balle et le mur

Code :
1
2
3
4
5
6
7
8
 
// calcul de la positon théorique
balleX+=vitesseX;
 
if(balleX<rayon){
     balleX=rayon+(rayon-balleX);
     vitesseX=-vitesseX;
}
rayon-balleX c'est la distance qu'a parcouru la balle à travers le mur à droite.
rayon c'est le rayon de la balle mais c'est aussi la position du mur

Je suis méchant je t'ai fait le schéma dans un sens et le code pour l'autre coté.

Tu peux extrapoler pour tout les cotés de la boite et puis rajouter un petit facteur de rebond genre 0.9
Code :
1
2
     balleX=rayon+(rayon-balleX)*rebond;
     vitesseX=-vitesseX*rebond;
bokan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h36.


 
 
 
 
Partenaires

Hébergement Web