2011-02-06 12 views
1

私は衝突の応答方法で苦労しています。のアクションスクリプト3で、私は長い間、このコードの意味を説明することができます。それ。私は最初から書きませんでした。また、私は、Collision Detection Toolkitを使用して、衝突がどこで起きているのかを発見しています。
何をしようとしているのは、ボール(キーボードで画面上を移動するオブジェクト)が壁やオブジェクトに当たって壁やオブジェクトを通過しないようにすることです。ゲームのAS3衝突の応答

これは私が理解しているところは、衝突が起こっている角度を見つけて、新しいベクトルである隣接する角度を見つける必要があります。この機能がどのように機能するか理解できません。

vx0:Number = ball.vx * cos + ball.vy * sin; 

が見つかりましたか?さらに、私はボールを加速させたくない。オブジェクトに当たるまで速度が一定であることが欲しい。この配列を逆方向に検索する方が速いでしょうか?

- 私はこれを試して助けてくれる人に感謝しています。スペルミスがあればごめんなさい。

 for(i = 0; i < collisions.length; i++) 
     { 
      var collision:Object = collisions[i]; 

      var angle:Number = collision.angle; 
      var overlap:int = collision.overlapping.length; 
      var ball:Ball = collision.object1; 

      var sin:Number = Math.sin(angle); 
      var cos:Number = Math.cos(angle); 

      var vx0:Number = ball.vx * cos + ball.vy * sin; 
      var vy0:Number = ball.vy * cos - ball.vx * sin; 

      vx0 = .4; 
      ball.vx = vx0 * cos - vy0 * sin; 
      ball.vy = vy0 * cos + vx0 * sin; 

      ball.vx -= cos * overlap/ball.radius; 
      ball.vy -= sin * overlap/ball.radius; 
     } 
+0

スピードが懸念される場合は、[反復する](http://stackoverflow.com/questions/1950878/c-for-loop-indexing-is-forward-indexing-faster-in-new-cpus/1951271) #1951271)はおそらく大幅に高速ではなく、わずかに遅くなる可能性もあります。具体的な状況をベンチマークする必要があります。 – Cameron

+0

ありがとうございます。私はそれを念頭に置いておきます。 –

答えて

4

キース・ピーターズにはFoundation Actionscript 3.0 Animation: Making Things Moveという素晴らしい本があります。

第9章では、問題が発生しているトピックについて説明します。

このページは特に役立ちます。

http://books.google.ca/books?id=nzyu5TytMEUC&lpg=PP1&dq=actionscript%203.0%20animation&pg=PA235#v=onepage&q&f=false

彼は自家製、三角衝突テスト使用していますが、あなたは彼の距離は、衝突検出キットに組み込まれた機能やプロパティをチェック置き換えることができるはずです。

+0

+1素晴らしい本。また、その本の続編には、「先進的な衝突検出」と呼ばれるチャプターがあります。http://www.amazon.ca/AdvancED-ActionScript-Animation-Keith-Peters/dp/1430216085/ref= sr_1_2?ie = UTF8&qid = 1296963055&sr = 8-2 – TheDarkIn1978

+0

私は最近両方を持っています。キース・ピーターズはわずか数ヶ月前にFITCエドモントンのゲストスピーカーを務め、すばらしい仕事をしました。 –

+0

ありがとうございました!この本はまさに私が探していたものです。私の問題は解決されました。また、迅速な応答時間に感謝します。 –