![]() |
Проблема с "оконными" играми
Всем привет.
Хотелось бы написать стратегию не так как обычно, в полноэкранном режиме, а в "оконном". В принципе особых проблем не виделось, меняй графический режим и все. Ради минимизации трафика осуществлялась следующая схема управления юнитами: предположим, юниту на клиенте 1 надо пойти из точки А в точку Б. Клиенту 2 передаются координаты юнита, точки А и точки Б, и потом на клиенте 1 и клиенте 2 юниты независимо друг от друга двигаются куда необходимо. Так как алгоритм движения на клиентах идентичен, то и двигаться они будут синхронно. То же самое можно сказать и про все остальные действия - они завязаны на времени, и по идее должны происходить хоть и независимо, но синхронно. Появилась следующая проблема - при перетаскивании виндового окна мышой игра зависает - и не прорисовывается, и не просчитывается. И длится это, пока мышой держишь окно. Что приводит к асинхронизации клиентов, и как следствие разного рода глюкам. Кто-нибудь сталкивался с подобной ерундой, может посоветовать, как это побороть??? |
Re: Проблема с "оконными" играми
Вариант 1) Блокировать перемещение окна путем установки на окно каллбека и перехвата им сообщений WM_NCHITTEST (Может можно и без перехвата - читай MSDN)
Вариант 2) Тот же что и первый, только после перехвата сообщения выполнять функцию обновления гамесы и передачи данных по указателю, прям из каллбека. Вариант 3) Вынести функции обновления и синхронизации в длл и запустить ее отдельным потоком В любом случае для всего этого нужно писать длл. В принципе, если у меня будет свободное время, могу помочь. ЗЫ Хотя может существует и более простой выход. |
Re: Проблема с "оконными" играми
Спасибо за помощь, Cyan, но если при любом раскладе надо будет делать dll, то проще тогда запускать игру в полноэкранном режиме и не мучить себя и других :)
|
Re: Проблема с "оконными" играми
stone_evil
В принципе, как самый простой вариант, ты можешь блокировать мышь MoveMouse(), а в игре использовать свой курсор и обновлять его перед вызовом этой функции. ЗЫ Еще возможно есть способ запрета на перемещение отправлением какой-то мессаги окну - надо искать в справочниках по WINAPI. |
Re: Проблема с "оконными" играми
можно еще ограничить перемещение указателя, но тогда пропадает смысл использовать оконное приложение.
function ClipCursor; external user32 name 'ClipCursor'; function ClipCursor(lpRect: PRect): BOOL; stdcall; |
Re: Проблема с "оконными" играми
Ну да, и я про то же - зачем использовать оконное приложение, если потом убивать все его плюсы. И писать под это отдельную dll тоже как-то не хочется. Значит будет полноэкранной...
|
Часовой пояс GMT +4, время: 19:14. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot