Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание игры. [Delphi, Windows]


Страницы:   1 2

Zak3D[@Tm] ©   (2004-01-04 17:22:00) 

Всем присет. Мастера, вот какая просьба у меня есть к вам. Я только учусь програмировать(пол года, три раза в недель по два часа), мне очено хочется создать игру, чтоб машинка ехала вперёд и объезжала препятствия и другие машины. Вот в чем вопрос, что для этого лучше использовать(Image или мож на канве формы рисовать...), что бы игра работала побыстрее и ещё вопрос, как сделать счётчик fps. Всем заранее спасибо.
ЗЫ Игру буду делать на Седьмой Делфи.


Zak3D[@Tm]   (2004-01-08 15:42:00) [1]

Мастера, помогите советом, сегодня начал добавлять к игре меню опции и заставку, всё было нормально, никаких ошибок не выскакивало, но машина(Image1) перестала ездить. Подробнее, сначала я добавил две формы(одну для заставки, а другую для меню), потом назначил главной форму с заставкой т.к. я не знаю как сделать, чтобы сначала проигрывался ролик, потом появлялось меню настроек и только потом игра(что не делал, всегда сначала игра появляется или вобше ошибки выдаёт), собственно после этого рисунок и замер. Помогите пожалуйста советом, если не тяжело...


Ермак   (2004-01-07 13:33:00) [2]

Насчет fps... Компонент таймера сам тормозит, поскольку работает по сообщению, которое винда посылает окну. А если окно в это время рисует? Что тогда? Правильно, торомозит. Надо юзать ВинАПИ всегда и везде. Там есть таймеры уровня ядра - эти работают с точностью до 20 мс. Но не влезая в дебри, деалем вот что:

uses Windows;

а дальше GetTickCount - возвращает число милисекунд, прошедших с начала запуска системы.

То есть:

Var time: cardinal;
   fps: real;
...
begin
...
time := GetTickCount;
...Здесь мы рисуем очередной кадр...
time := GetTickCount - time; //А здесь посчитали, сколько милисекунд ушло на кадр.
fps := 1000 / time; //Поскольку в секунде тысяча милисекунд...
...Выводим куда-нить ФПС...

end

Если хочешь писать игрушки, изучи сначала хоть немного Виндоус, а затем путь один - ДиректХ. А компоненты для ДиректХ не используй никогда. Вообще все, что можно писать через стандартные процедуры Виндоус пиши только так. Другого пути для программиста нет.

Рекомендую:
Краснов М. DirectX графика в проектах Delphi.
Финогенов. Win32 - Основы программирования.
Дж.Рихтер. Программирование Win32 для профессионалов.

Правда, первые две книжки на СИ, но у Финогенова Си с нуля объясняется. В любом случае Си чуть-чуть нужно знать, на уровне уметь перевести с Си на Паскаль. А вообще два языка абсолютно идентичны, так что привыкать надо и к тому и к другому.


Zak3D[@Tm]   (2004-01-05 16:25:00) [3]

Да, спасибо, хотя я  это уже на соседнем обсуждении нашёл. Кстати помогает.


Thor   (2004-01-05 15:55:00) [4]

Положим на Form.Create нужно написать DoubleBuffered:=True;


Zak3D[@Tm]   (2004-01-05 14:28:00) [5]

Короче решил я шас сделать игру на простом делфи, но вот возник вопрос, как избавиться от мерщиния?


Thor   (2004-01-05 12:47:00) [6]


> Omar2002 ©   (04.01.04 23:30) [15]

ну не знаю.
меня лично такая скорость не устроила. особенно когда много объектов имеется. конечно, довольно удобный спрайтовый движок для тех кто свой еще не в силах сделать, но вот работа с альфой и, например, поворотами спрайтов там плохо сделана. лучше тогда сразу учиться на PowerDraw. Примеров там достаточно :)


Zak3D[@Tm]   (2004-01-05 10:22:00) [7]

Ладно Omar2002, так и сделаю. Спасибо. Farcaller библиотеку тоже ща скачаю, посмотрю, чт там.


Omar2002   (2004-01-04 23:30:00) [8]


> Zak3D[@Tm] ©   (04.01.04 22:38) [12]
> Ладно.

Пиши на Дельыиксах. Это как раз вариант для спрайтовой графики наиболее оптимальный в соотношении сложность\скорость.
А про DelphiX документацию можешь найти либо на DelphiGFX, либо на Геймдеве.


TButton   (2004-01-04 23:18:00) [9]

ну это как посмотреть ОГЛ работает одинаково плохо на всех платформах, директХ чутка по лучше, но только на виндах


Farcaller   (2004-01-04 22:58:00) [10]

А я бы посоветовал не лезть в дебри GUI'шные. А посоветовал бы библиотеку SDL ( http://www.delphi-jedi.org/Jedi:TEAM_SDL_HOME). IMHO полезнее будет. Я и сам раньше на GLScene сидел (ДиректХ не юзаю, так как пишу софт и под винду и под линух).


Zak3D[@Tm]   (2004-01-04 22:38:00) [11]

Ладно.


TButton   (2004-01-04 22:36:00) [12]

я разницы особой не вижу.


Zak3D[@Tm]   (2004-01-04 21:46:00) [13]

Да... Ладно, спасибо вам за помошь, как сделаю игру олязательно вам рассажу. Если что понадобится можете найти меня по аське 265627188, или написать на мыло.
ЗЫ и на последок такой вопрос, всётаки как лучше на канде рисовать, или можь в Паинт боксе, или просто Имейджем обойтись?
Ещё раз спасибо, удачного всем програминга...:)


TButton   (2004-01-04 21:35:00) [14]

да, а я те посоветую как начнешь разбираться средненько с уклоном в сторону хорошо, не изучай компонентов изучай чистый директ - х.. а то привыкнешь к компонентам, потом тяжело бует.


Thor   (2004-01-04 21:28:00) [15]

хе-хе...
в этом-то и заключается основной конфликт - на чем делать игру.
многие начинали с обычного Image. ну а потом переходили на DirectX, OpenGL. если хочешь научиться делать игры, то сначала сделай свою игру на обычных имаджах. а потом уже изучай другие компоненты, коих немало. лично я сейчас на PowerDraw Deluxe учусь :)


Zak3D[@Tm]   (2004-01-04 21:22:00) [16]

Всё, нормально работает, но если сделать как ты сказал Timer1.interval=100, то fps=10 если Timer1.interval=1 то fps=64, почему так мало, всего-то 1 image с картинкой БТР'а гоняет с одного края формы на другую? Отсюда возникает вопрос, как увеличить fps или скорость таймера что ли??? А то Дум 3 35 fps, а у меня картинка на 10 fps гоняет... вопрос.


TButton   (2004-01-04 21:21:00) [17]

не за что


Zak3D[@Tm]   (2004-01-04 21:05:00) [18]

Нормально, ща будем делать. Спасибо!


Thor   (2004-01-04 20:50:00) [19]


> Zak3D[@Tm] ©   (04.01.04 19:14) [3]

У тебя есть таймер при событии которого происходит отображение чего-либо на канву или имадж. Положим интервал у этого таймера 100 миллисекунд. Тебе нужно завести глобальную переменную frames: integer. При каждом событии твоего таймера (в котором у тебя происходит рисование), ты увеличивашь значение frames, иными словами сколько раз было отрисовано. заводишь у себя второй таймер. в нем интервал ставишь на 1 секунду. в событии этого нового таймера пишешь fps:=frames; frames:=0; и соответственно куда-нить выводишь это значение FPS, например на ту же канву. Таким образом получатся что ты каждую секунду смотришь, сколько тиков таймера-отрисовщика имело место. Это и будет твой FPS. ведь FPS - Frames Per Second, т.е. Кадров в секунду.

фуф. вроде все так объяснил.


Zak3D[@Tm]   (2004-01-04 19:14:00) [20]

Попробовал создать счётчик fps... не получилось, можно поподробней создание описать плз...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо