2011-06-17 1 views
0

! [Ma carte] [1]Je veux que ma forme lorsqu'il est frappé avec à l'intérieur de la scène, faites pivoter et countinue déplacer l'angle vrai pour toujours

je veux simuler boule de billard dans mon projet. mais mon code ne fonctionne pas bien. quand commencer avec (par exemple) 34 degrés, quand frappé avec le mur (scène dans cet exemple) retour avec un vrai degré. en flash, AS3

public function loop(e:Event) : void 
     { 
      if(luanch) 
      { 



       y += Math.sin(degreesToRadians(rotation)) * speed; 
       x += Math.cos(degreesToRadians(rotation)) * speed; 






      if (x > stage.stageWidth){ 

       rotation -= 90; 
       x = stage.stageWidth; 


       trace("X :" , x , rotation); 


       } 
      else if (x < 0) 
      { 
       rotation += 90; 
       x=3; 

       //rotation += 90; 

       trace("X :" , x , rotation); 



      } 

      if (y > stage.stageHeight) 
      { 
       y = stage.stageHeight; 
       rotation -= 90; 

       trace("Y : " , y , rotation); 


      } 

      else if (y <0) 
      { 
       rotation += 90; 

       //rotation += 90; 
       trace("Y :" , y , rotation); 


      } 
     } 






     } 

     public function degreesToRadians(degrees:Number) : Number 
     { 
      return degrees * Math.PI/180; 
     } 

    } 


} 
+0

Quelle est votre question? – 2smacks

Répondre

2

Votre physique est faux: quand une balle rebondit sur un mur, sa vitesse ne change pas (habituellement) de 90 degrés, il reflète . En outre, vous utilisez x pour signifier x position et aussi x vitesse, mais ils sont différents.

Votre question concerne l'angle, mais vous ne pouvez pas résoudre ce problème tant que vous n'avez pas corrigé la position/vitesse.

0

Mon code dans cette réponse vous montrera comment déplacer vos objets. (même système que vous utilisez maintenant) Vous pouvez facilement l'adapter à votre système. Movement of Objects in a simulation

Maintenant, pour réfléchir sur le mur, il suffit d'inverser la vitesse x ou y selon le mur touché.

vx *= -1; // if you hit the left or right side of the stage. 
vy *= -1; // if you hit the top or bottom of the stage. 

Remarque: Il y a un problème avec le rebondissement des choses du mur comme ceci. De temps en temps, lorsque vous rebondissez, l'objet oscille et se coince en rebondissant sur le mur. La façon la plus simple de contourner ce problème (avec le code que vous utilisez) est de vérifier la prise en compte de la taille de l'objet lors de la vérification d'une collision avec les limites de la scène.

Quelque chose comme ça.

if(x - width < 0) 
{ 
    x = width; 
    // we would now want to change the velocity. 
    vx *= -1; 
} 

if(x + width > stage.stageWidth) 
{ 
    x = stage.stageWidth - width; 
    // we would now want to change the velocity. 
    vx *= -1; 
} 

même chose de base pour l'axe y. J'espère que cela aide. Edit: d'ailleurs, si vous voulez faire des boules de billard, vous devriez vraiment utiliser des vecteurs. Ils vous éviteront des maux de tête lorsque vous ferez une détection de collision contre des objets en mouvement rapide.

+0

thx, mais mes maths sont pauvres, pouvez-vous me corriger mon code? – ewfwefewfewf

Questions connexes