2011-12-20 5 views
1

Я разрабатываю простую игру, в которой есть кирпичи, мяч и весло, где вы должны поражать кирпичи мячом (вы все знаете эту игру).Разработка игр для android, дискретное движение

Моя проблема немного сложна, мяч движется с постоянной скоростью, предположим, 200px в секунду, и предположим, что у меня 30 кадров в секунду. это означает, что каждый кадр шара перемещается примерно на 7 пикселей.

У меня есть 2 вещи, которые я делаю каждый кадр: 1. нарисуйте игру на экране. 2. перемещение шара, обнаружение столкновения и т. Д.

проблема в том, что в кадре X мяч ничего не ударил, но в кадре X + 1 он перемещается на 7 пикселей, а затем частично находится внутри кирпича (или частично внутри двух соседних кирпичей, что намного хуже).

Это происходит потому, что движение является дискретным и не непрерывным.

Я не знаю, как мне с этим бороться, я получил эту проблему в каждой игре, которую я разработал (не только для Android, но и на ПК). вероятно, я пропустил что-то важное в моем понимании развития игры.

благодарит заранее.

ответ

3

Это немного здоровенный по математике, но есть хорошая статья на

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

(в связи с _ в URL, кажется, расстроить разметку для SO ...)

По сути, вы «В значительной степени это делается правильно - конечно, есть больше, чем один способ сделать это». Просто убедитесь, что у вас есть old(x,y) и new(x,y), доступные во время поиска, и рассмотрите путь движения «предварительный» до тех пор, пока вы не проведете обнаружение столкновения. (Возможно, present(x,y) и destination(x,y) являются лучшими условиями)

В случае кирпича подпрыгивая игры Breakout, вы будете искать, где линия (или вектор) 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-адрес, когда я попытался вставить его. (Правильные слои цитирования будут смертью меня.) – BRFennPocock

0

Простейшим решением было бы использовать какой-либо физический движок. Box2d - отличный 2D-движок физики с множеством оберток, написанных на нескольких языках.

Используя физический движок, вам не придется беспокоиться о обнаружении столкновений. Все это заботится о вас, чтобы вы могли больше сосредоточиться на разработке основных функций вашей игры.

Смежные вопросы