2011-06-17 5 views
0

![マイマップ] [1]iは、ステージの内部で打ったとき、私の形をしたい回転させ、真の角度での移動をcountinueの永遠

私は私のプロジェクトでビリヤードのボールをシミュレートします。 しかし、私のコードはうまくいきません。 壁(この例ではステージ)でヒットしたときに(たとえば)34度で始まると、真の度合いで復帰します。フラッシュで は、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

あなたの質問がありますか? – 2smacks

答えて

2

あなたの物理学は間違っている:ボールが壁に跳ね返るとき、その速度は90度(通常は)変わらない、それを反映しています。また、xを使用してx の位置とx の速度を使用していますが、それらは異なっています。

あなたの質問は角度に関するものですが、位置/速度のものを修正するまで修正することはできません。

0

この回答のコードは、オブジェクトを移動するための良い方法を示します。 (今使っているのと同じシステム) これをあなたのシステムに簡単に適応させることができます。 Movement of Objects in a simulation

ここで壁に反射するには、どの壁に当たるかによってxまたはyの速度を逆転させます。

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. 

注:このような壁から物事をバウンスする際に問題があります。あなたが跳ね返ったときに、オブジェクトが振動し、フレームからずっと離れて跳ね上がります。

ステージの境界との衝突をチェックするときに最も簡単な方法は、オブジェクトのサイズを考慮していることです。

このようなものです。

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; 
} 

y軸についても同じ基本的なものです。 これが役立つことを願っています。

編集:ビリヤードボールをしたい場合は、実際にベクトルを使用する必要があります。彼らはあなたが高速に動くオブジェクトに対して衝突検出を行うために行くときに頭痛を軽減します。

+0

thx、しかし私の数学は貧しいです、私のコードを修正できますか? – ewfwefewfewf

関連する問題