2016-04-16 7 views
0

私は 'player'オブジェクトの新しいdxとdyを計算するはずのJS関数を持っています。それは他の(静止した)循環オブジェクトからバウンスします。私は「ゴールポスト」に対するプレーヤーの角度を見つけることができますが、実際に衝突が起こったら、プレーヤーを操作することに問題があります。私は、プレイヤーとゴールポストの距離が2つのオブジェクトの半径の和以下であるかどうかをチェックすることによって、衝突を検出することができます。また、プレーヤーのdxとdyを使ってプレーヤーが衝突する角度を計算することもできます。私は発生の角度が反射の角度と同じであるべきであることを知っていますが、私はそれを正しいものにすることはできません。2Dのゲームでサーキュラーサーフェスから円形オブジェクトをバウンスするにはどうすればよいですか?

私のコードは以下の通りです:

var side_one = goal_posts[0].x - player.x; 
var side_two = goal_posts[0].y - player.y; 
var hypotenuse_player_to_post = Math.sqrt(Math.pow(side_one, 2) + Math.pow(side_two, 2)); 
var angle_player_to_post = Math.acos(side_two/hypotenuse_player_to_post) * (180/Math.PI); 
var player_travel_speed = Math.sqrt(Math.pow(player.dx, 2) + Math.pow(player.dy, 2)); 
var player_travel_angle = Math.acos(player.dy/player_travel_speed) * (180/Math.PI); 
var difference = angle_player_to_post - player_travel_angle; 
var resulting_angle = angle_player_to_post + difference; 
resulting_angle = resulting_angle/(180/Math.PI); 
player.dy = Math.cos(resulting_angle) * player_travel_speed; 
player.dx = Math.sin(resulting_angle) * player_travel_speed; 

すべてのヘルプははるかに高く評価されます! :)

+2

常にベクトルを使用する、私の友人、決してtrig関数。 –

+0

そうですよ!私は実際にベクトルを使って問題を解決し、結果として得られるベクトルを得るためにオブジェクトのドットをつけました。そして、私は実際にコードの単純さに驚いていました!それにもかかわらず、あなたの応答に感謝します! –

答えて

0

提案したように、問題は三角法の代わりにベクトルを使用して解決されました。

関連する問題