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

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

DXTimer


Страницы:   1 2

breakmaster ©   (2004-08-01 22:58:00) 

Люди, никто не знает, почему когда я размещаю второй ДХТаймер, первый прекращает работу?


cyborg   (2004-08-04 10:36:00) [21]


> cyborg ©
> Ну если у тебя фиксед-FPS тогда понятно.
>
> Только вот Quake`s, Doom`s, UnrealTournament`s, сдаланы
> по тому же принципу как и у меня(даже несколько проще),
> и тем не менее сетевая игра  у них имеется.  ;-D
> Ну и как это объяснишь?

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


NailMan   (2004-08-04 10:32:00) [22]

cyborg ©
Ну если у тебя фиксед-FPS тогда понятно.

Только вот Quake`s, Doom`s, UnrealTournament`s, сдаланы по тому же принципу как и у меня(даже несколько проще), и тем не менее сетевая игра  у них имеется.  ;-D
Ну и как это объяснишь?

Micah'GF ©
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1089528478&n=9

с шестого поста

Мой подход работает всегда и независимо от производительности компа. Синхронизация естественно изменений состояний объектов и производительности компьютера.

Только вот зачем много потоков в игре?

---
WBR, NailMan aka 2:5020/3337.13


cyborg   (2004-08-03 16:14:00) [23]


> [11] NailMan ©   (03.08.04 12:38)

Мои игры играют 33 кадра в секунду, каждый кадр счётчик увеличивается, соответственно каждую секунду на 33, только в танчиках старых 25 помоему сделано. И делаю я так из расчёта на сетевую игру и синхронизацию между клиентами, посылаешь например что, например, на сотом кадре нужно создать бомбу, мессага приходит, если указанный кадр ещё не дошёл, то пока её не создаём, как кадр подошёл, создаём её, время жизни бомбы, например 330 (=10 секунд), соответственно бомба должны взорваться на 430-ом кадре у обоих клиентов. А с таймерами и твоими синхронизерами, которые работают с системным временем компьютера, по сети игру не сделаешь.

Сейчас скажут, что "раз такой умный, то почему игру по сети не сделал?" :), отвечаю - потому, что это не простая задача ;).


Micah'GF   (2004-08-03 15:23:00) [24]

[11] NailMan
расскажи как нужно синхронизировать объекты когда много потоков? без таймера?


NailMan   (2004-08-03 12:38:00) [25]

cyborg ©
А с какой частотой обновляется эта переменная. Каков по продолжительности промежуток между "игровыми кадрами"? ;-)

---
WBR, NailMan aka 2:5020/3337.13


cyborg   (2004-08-03 11:51:00) [26]

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


NailMan   (2004-08-03 11:45:00) [27]

А у меня вообще нет ни одного таймера на события(акромя WinAPI таймера на обновление строки FPS) типа передвижений - синхро у каждого объекта решают все проблемы и геморрои.

Думаю применить их к DelphiX также просто как и к любому API.

---
WBR, NailMan aka 2:5020/3337.13


Ландграф Павел   (2004-08-03 10:58:00) [28]

breakmaster>монстры, скажешь, не в таймере должны двигаться?
скажу - нет! NikeOLD приавельно сказал, есть такая стучка как inherited DoMove(movecount), вот ее и используй... у меня например выстрел происходит после первой перезарядки, и потом еще время на прицеливание... дык чтож мне три таймера на один выстрел цеплять что-ль?!


NikeOLD   (2004-08-02 22:33:00) [29]


> breakmaster ©   (02.08.04 22:12) [6]

Я с DelphiX особо не возился, но если правильно помню, то в методе DoMove (или как он там называется) как раз и передается значение таймера. Просто сравнивайте это значение с монстрами (250) или что там еще и двигайте монстров только в этом случае.
Неужели Вы думаете, что в профессиональных играх куча таймеров? Один и только один.
А если заводить таймеры на каждый спрайт, то ресурсов Win98 просто не хватит.

Событие OnTimer объекта TDXTimer - это событие OnIdle объекта Application, с установленным в False значением Done. Читаем MSDN: если Done установлен в False, то это приводит к тому, что событие возникает так часто насколько это возможно в системе, что вызывает повышенную нагрузку на процессор. Приложения не должны это допускать за исключением .... За исключением игр.

Посмотри подробнее примеры. Их даже на этом сайтеполно (см. http://DelphiGFX.mastak.ru).


breakmaster   (2004-08-02 22:12:00) [30]

начнем...
если у delphiX таймера интервал 0 - значит событие ontimer работает постоянно.
так вот у меня куча таймеров:
1 с интервалом 0 ответственен за клавиатуру(getkeyboardstate)
2 с интервалом 250 ответственен за монстров.
3 с инт. 125 ответственен за летающие предметы (fireball)
4 с инт 3500 ответственен за систему охраны(появится в новой версии)
и еще там до фига всякой фигни...
монстры, скажешь, не в таймере должны двигаться?


Ландграф Павел   (2004-08-02 20:29:00) [31]

breakmaster>? что-то я проблемы не вижу... я лично всегда одним обходился... а нафиг тада таймер, если интервал 0??? используй delphix, никакие переменные не придется заводить... в таймере у тебя должно быть только перерисовка экрана и опрос клавиатуры... что ты туда еще напихал-то?=)


breakmaster   (2004-08-02 17:41:00) [32]

это, блин, сложно...
тем более, что у меня в 1-ом таймере интервал 0.
как быть с остальными? Заводить переменную типа longint для отсчета fps?


NikeOLD   (2004-08-02 13:02:00) [33]


> Ландграф Павел ©   (02.08.04 12:56) [2]

во-во.
А зачем вообще тебе несколько таймеров? Уменьши интервал и обходись одним.


Ландграф Павел   (2004-08-02 12:56:00) [34]

breakmaster>используй один Дх, другие простые...


NikeOLD   (2004-08-02 11:37:00) [35]

Потому что, если мне память не изменяет, то в этой лобуде под названием DelphiX таймер использует событие OnIdle объекта Application.
В связи с этим наличие второго таймера или перекрытие OnIdle приведет к потере функциональности первого таймера.


Страницы:   1 2

Наверх

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