Консультация № 59119
16.10.2006, 15:37
0.00 руб.
0 1 1
Здравствуйте.
У меня такая проблема:
Я делаю игру - гонки вид сверху, где машинка - images2, карта под ней images1 (на images1 нарисована дорога и дома рядом стоящие), мне надо сделать так, чтобы машинка ездила только по дорогам и не выходила за её пределы (чтоб она не ездила по домам) + самое главное - как сделать чтоб машинка двигалась нормально, с траекторией поворота и т.д. чтоб управляя с клавиатуры она не просто двигалась вперед, назад, влево и вправо, а при полном повороте разварачивалась на 90 градусов. При этом при каждом малейшем повороте картинка менялась на другую. Как сделать?
И еще вопрос - как сделать чтоб скорость управлялась, т.е. чем дольше жмеш вперед тем скорость становилась больше, а при отпускании кнопки постепенно уменьшалась до 0. Почему картинка мигает при движении, как это исправить? Как сделать чтоб при нажатии вперед и влево, она ехала вперед и влево, а не только вперед, или только влево.
Вобщем - как сделать правдоподобное движение машинки.
Заранее благодарен.

Обсуждение

Неизвестный
16.10.2006, 16:51
общий
это ответ
Здравствуйте, Pashenin Mihail Evgenevich!
Во-первых, статьи про программирование игр есть на www.dtf.ru
Алгоритм поворота картинки... именно по таком словосочетанию и ищется где-дь в сети.
Чтобы скорость управлялась - ввести скорость.
И в основном цикле игры, если кнопка нажата, то не
if key = VK_UP then
x := x + 0.01;
делать, а так:
if key = VK_UP then
vx := vx + 0.01;
x := x + vx;
vx := vx * 0.95; // затухание
if abs(vx) < 0.0001 then vx := 0; // до нуля
Чтобы картинка не мигала, нужна двойная буфферизация. Т.е. перед тем нарисовать изображение на экране, надо целиком подготовить его в памяти, а потом уже рисовать.
Для обработки одновременных нажатий клавиатуры надо либо отлавливать события onKeyDown/onKeyUp, либо (что более правильно) работать через DirectX (а именно DirectInput)

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