2011-12-20 14 views
1

私は、レンガ、ボール、ボールでレンガを打つべきパドルがあるシンプルなゲームを開発しています(皆さんはこのゲームを知っています)。アンドロイドのためのゲーム開発、離散的な動き

私の問題はちょっと複雑です。ボールは一定速度で動いています.200px /秒と仮定して、毎秒30フレームがあるとしましょう。これは、各フレームがボールを約7ピクセル動かすことを意味する。

私は各フレームを2つ持っています: 1.画面にゲームを描きます。 2.ボールを動かす、衝突の検出など。

問題は、フレームXではまだボールが何もヒットしなかったのですが、フレームX + 1では7ピクセル移動してから部分的にレンガの内側にありますまたは部分的に2つの隣接したレンガの内側にあり、これははるかに悪い)。

動きが離散的で連続的ではないため、これが発生します。

私はそれをどのように処理すべきか分かりません。私は開発したすべてのゲームでこの問題を抱えています(アンドロイドだけでなくPCでも)。おそらく私はゲーム開発の理解に欠かせない何かを失っているでしょう。

ありがとうございます。

答えて

3

あなたは、それは数学上のビット多額のだが、(SOのマークアップをひっくり返すように思われるURLに起因して_ ...)

http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-verlet-based-approach-for-2d-game-physics-r2714? 

で素晴らしい記事

は基本的にありますもちろん、それは正しいことです。もちろん、これ以上のことはありません。衝突を探している間にold(x,y)new(x,y)が利用可能であることを確認して、衝突検出を完了するまで移動パスを「暫定」と見なしてください。 (おそらくpresent(x,y)destination(x,y)がより良い条件です)

ブレイクアウトレンガバウンスゲームの場合は、あなたはpresent (x,y) + movement (x,y) → destination (x,y)の行(またはベクトル)はレンガのエッジと交差するところを探していて、作成されます交差点におけるその頂点との反射角。リジッドボディレスポンスについて、その記事の後半部分全体をすばやく簡単に見て回ることができます。

+1

上記のリンクはChromiumでは機能しませんでした。試してみてくださいhttp://www.gamedev.net/page/resources/_/technical/math-and-physics/a-verlet-based-approach-for-2d-game-physics-r2714 – austinmarton

+0

ありがとうございます。ここのMarkdownはURLを貼り付けようとしたときにそのURLを食べていたようだ。 (引用符の適切な層は私の死になります。) – BRFennPocock

0

最も簡単な解決策は、ある種の物理エンジンを使用することです。 Box2dは、複数の言語で書かれたラッパーを備えた、優れた2D物理エンジンです。

物理エンジンを使用することで、衝突の検出を心配する必要はありません。そのすべてがあなたの世話をしているので、ゲームの中核機能の開発にもっと集中することができます。

関連する問題