forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Проблема с "оконными" играми (http://forum.boolean.name/showthread.php?t=2142)

stone_evil 19.12.2006 13:46

Проблема с "оконными" играми
 
Всем привет.
Хотелось бы написать стратегию не так как обычно, в полноэкранном режиме, а в "оконном". В принципе особых проблем не виделось, меняй графический режим и все.
Ради минимизации трафика осуществлялась следующая схема управления юнитами: предположим, юниту на клиенте 1 надо пойти из точки А в точку Б. Клиенту 2 передаются координаты юнита, точки А и точки Б, и потом на клиенте 1 и клиенте 2 юниты независимо друг от друга двигаются куда необходимо. Так как алгоритм движения на клиентах идентичен, то и двигаться они будут синхронно. То же самое можно сказать и про все остальные действия - они завязаны на времени, и по идее должны происходить хоть и независимо, но синхронно.
Появилась следующая проблема - при перетаскивании виндового окна мышой игра зависает - и не прорисовывается, и не просчитывается. И длится это, пока мышой держишь окно. Что приводит к асинхронизации клиентов, и как следствие разного рода глюкам. Кто-нибудь сталкивался с подобной ерундой, может посоветовать, как это побороть???

Platon 20.12.2006 09:49

Re: Проблема с "оконными" играми
 
Вариант 1) Блокировать перемещение окна путем установки на окно каллбека и перехвата им сообщений WM_NCHITTEST (Может можно и без перехвата - читай MSDN)
Вариант 2) Тот же что и первый, только после перехвата сообщения выполнять функцию обновления гамесы и передачи данных по указателю, прям из каллбека.
Вариант 3) Вынести функции обновления и синхронизации в длл и запустить ее отдельным потоком
В любом случае для всего этого нужно писать длл. В принципе, если у меня будет свободное время, могу помочь.
ЗЫ
Хотя может существует и более простой выход.

stone_evil 20.12.2006 10:04

Re: Проблема с "оконными" играми
 
Спасибо за помощь, Cyan, но если при любом раскладе надо будет делать dll, то проще тогда запускать игру в полноэкранном режиме и не мучить себя и других :)

Platon 20.12.2006 10:16

Re: Проблема с "оконными" играми
 
stone_evil
В принципе, как самый простой вариант, ты можешь блокировать мышь MoveMouse(), а в игре использовать свой курсор и обновлять его перед вызовом этой функции.
ЗЫ
Еще возможно есть способ запрета на перемещение отправлением какой-то мессаги окну - надо искать в справочниках по WINAPI.

HolyDel 21.12.2006 03:00

Re: Проблема с "оконными" играми
 
можно еще ограничить перемещение указателя, но тогда пропадает смысл использовать оконное приложение.

function ClipCursor; external user32 name 'ClipCursor';
function ClipCursor(lpRect: PRect): BOOL; stdcall;

stone_evil 21.12.2006 05:47

Re: Проблема с "оконными" играми
 
Ну да, и я про то же - зачем использовать оконное приложение, если потом убивать все его плюсы. И писать под это отдельную dll тоже как-то не хочется. Значит будет полноэкранной...


Часовой пояс GMT +4, время: 19:14.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot