Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Создание игры.   Найти похожие ветки 

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

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


 
TButton ©   (2004-01-04 17:29) [1]

при у мелом использовании можно и в Имадже.а счетчик фпс - относительно просто ставишь таймер на одну секунду, заводишь переменную frames: integer; после каждой прорисовки увеличиваешь ее, а по событию таймера

 fps:=frames;
 frames:=0;

и усе...


 
Zak3D[@Tm] ©   (2004-01-04 19:03) [2]

Спасибо TButton, но умелое использование у меня врядли особо получится, так что хотелось бы всётаки узнать, что быстрее...


 
Zak3D[@Tm] ©   (2004-01-04 19:14) [3]

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


 
Thor ©   (2004-01-04 20:50) [4]


> 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 21:05) [5]

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


 
TButton ©   (2004-01-04 21:21) [6]

не за что


 
Zak3D[@Tm] ©   (2004-01-04 21:22) [7]

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


 
Thor ©   (2004-01-04 21:28) [8]

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


 
TButton ©   (2004-01-04 21:35) [9]

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


 
Zak3D[@Tm] ©   (2004-01-04 21:46) [10]

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


 
TButton ©   (2004-01-04 22:36) [11]

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


 
Zak3D[@Tm] ©   (2004-01-04 22:38) [12]

Ладно.


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

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


 
TButton ©   (2004-01-04 23:18) [14]

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


 
Omar2002 ©   (2004-01-04 23:30) [15]


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

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


 
Zak3D[@Tm] ©   (2004-01-05 10:22) [16]

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


 
Thor ©   (2004-01-05 12:47) [17]


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

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


 
Zak3D[@Tm] ©   (2004-01-05 14:28) [18]

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


 
Thor ©   (2004-01-05 15:55) [19]

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


 
Zak3D[@Tm] ©   (2004-01-05 16:25) [20]

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


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

Насчет 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-08 15:42) [22]

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



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.035 c
9-1071479588
Cibernetic
2003-12-15 12:13
2004.05.23
Omega Project JDK


9-1074102294
HolyMan
2004-01-14 20:44
2004.05.23
Где взять обновления GLScene?


14-1083839565
Opilki_Inside
2004-05-06 14:32
2004.05.23
Задачка на логику


3-1083307934
pan
2004-04-30 10:52
2004.05.23
А есть ли набор компонет ADO для D4?


14-1083535516
Феликс
2004-05-03 02:05
2004.05.23
В сети завелся новый червь





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский