Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с разделением графики и логики в игре на потоки / 17 сообщений из 17, страница 1 из 1
30.11.2018, 13:38
    #39740840
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
Всем привет. Пишу простую игру, есть разделение на графику и логику. Вся графика выводится в отдельном потоке со своим таймером, а логика рассчитывается в основном игровом потоке. Но есть в этом и своя проблема. Например, движение наискосок рассчитывается как движение вправо тут же вниз (это необходимо, понимаю, что с математической точки зрения неправильно); если бы графика выводилась после обработки логики, то все было бы нормально: персонаж рисовался бы в своей законной позиции, куда попал, двигаясь диагонально.

Но так как графика выводится в отдельном потоке, иногда (и довольно часто) вывод персонажа попадает на тот момент, когда он пошел вправо, но еще не пошел вниз. В результате, получается некрасивое движение "ступеньками".

Как можно решить эту проблему, оставив разделение обработки логики и вывода графики на разные потоки? Причем, графика ничего не знает о самой игре, получается что-то вроде небольшого графического движка, который вообще не знает об игровой логике и не имеет доступа к игровым параметрам.
...
Рейтинг: 0 / 0
30.11.2018, 13:51
    #39740855
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
amadeus,

Я конечно может что-то не понимаю, но почему бы не сделать в логике "движение на искосок"?
...
Рейтинг: 0 / 0
30.11.2018, 13:56
    #39740862
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
Dimonka , вопрос здесь больше не в том, как лучше реализовать движение, а в том, как правильно синхронизировать графическую и логическую части, чтобы они остались максимально независимы друг от друга. Сделаю я движение наискосок (это не проблема, если будет такая необходимость) - появятся другие проблемы.
...
Рейтинг: 0 / 0
30.11.2018, 14:01
    #39740868
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
amadeusКак можно решить эту проблему, оставив разделение обработки логики и вывода графики на
разные потоки?

Снапшот игрового мира сделай. Логика подготавливает новый снапшот и отправляет его
графике. Графика сравнивает новый снапшот со своим старым и обновляет на экране
изменившиеся места. Тогда графика не сможет видеть мир в "промежуточных" состояниях.

Ну или тупо обноси "многоходовочки" критической секцией/мутексом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.11.2018, 14:20
    #39740906
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
amadeusСделаю я движение наискосок (это не проблема, если будет такая необходимость)

Не сможешь. Нет атомарной операции (x,y) += (dx,dy). В любом случае ты будешь писать x +=
dx; y += dy; и несинхронизированный доступ из другого потока сможет вклиниться между ними.

PS: Кстати, целочисленные координаты персонажа - ошибка. Если только ты не пишешь
олдскульную игру, где все прыгают по квадратным клеточкам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.11.2018, 16:00
    #39741046
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
Dimitry SibiryakovНе сможешь. Нет атомарной операции (x,y) += (dx,dy).Легко! Использовать одномерный массив, где каждые N отсчетов - новая строка
...
Рейтинг: 0 / 0
30.11.2018, 16:03
    #39741052
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
а нахрена вообще отдельные потоки ?
Цель какая этого ?
...
Рейтинг: 0 / 0
30.11.2018, 16:20
    #39741082
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
Да уж.
"Простую" игру незачем бить на потоки.
...
Рейтинг: 0 / 0
30.11.2018, 16:29
    #39741100
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
Вот пара моих "простых" игр.
Многопоточность (кромя аудио-потоков) им не требовалсь даже 15 лет назад, когда они были написаны.

http://www.rgreat.ru/tmp/Games/NukeWar/NukeWar.exe
http://www.rgreat.ru/tmp/Games/SpaceWar/SpaceWar.exe
...
Рейтинг: 0 / 0
30.11.2018, 16:34
    #39741106
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
rgreatМногопоточность (кромя аудио-потоков) им не требовалсь даже 15 лет назад, когда они были написаны.
А теперь процы для домашних компов 16-ядерные делают, теперь требуется!
Надо же, чтобы эти процы были чем-то загружены!
Тем более, битка просела. Чем же еще загружать теперь, как не "графическими потоками" игр.
...
Рейтинг: 0 / 0
30.11.2018, 16:37
    #39741111
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
YuRockА теперь процы для домашних компов 16-ядерные делают, теперь требуется!
Надо же, чтобы эти процы были чем-то загружены!Винда найдет чем их загрузить и без нас.
...
Рейтинг: 0 / 0
30.11.2018, 17:39
    #39741176
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
rgreatYuRockА теперь процы для домашних компов 16-ядерные делают, теперь требуется!
Надо же, чтобы эти процы были чем-то загружены!Винда найдет чем их загрузить и без нас.

Тем более. Чтобы майкрософту своё личное процессорное время время не оставлять.
...
Рейтинг: 0 / 0
30.11.2018, 18:26
    #39741213
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
rgreatВот пара моих "простых" игр.
Многопоточность (кромя аудио-потоков) им не требовалсь даже 15 лет назад, когда они были написаны.

http://www.rgreat.ru/tmp/Games/NukeWar/NukeWar.exe
http://www.rgreat.ru/tmp/Games/SpaceWar/SpaceWar.exe

SpaceWar зачет! Играл целый час на работе :)
...
Рейтинг: 0 / 0
30.11.2018, 18:45
    #39741229
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
КвейдSpaceWar зачет! Играл целый час на работе :)
...
Рейтинг: 0 / 0
30.11.2018, 19:21
    #39741257
L1G
L1G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
amadeusесли бы графика выводилась после обработки логики, то все было бы нормальноне понимаю, какой вообще смысл выводить не готовую (не просчитанную до конца) картинку???

если в логике вообще есть понятие "кадра", то очевидно, что кадр должен рисоваться только по окончании его просчета логикой (тупо флаг готовности и т.п.) - если логика медленнее графики, нужно снижать частоту кадров, либо будут пропуски кадров с неприятным видимым эффектом подтормаживания.

очевидно, пока графика выводит один кадр, логика должна просчитывать уже следующий.

скорее всего, нужен double buffering - два набора данных для построения кадров: пока графика выводит один, логика обновляет данные в другом.
...
Рейтинг: 0 / 0
30.11.2018, 20:01
    #39741279
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
Еще вариант - координаты объекта должны быть не значением а функцией от времени.
...
Рейтинг: 0 / 0
30.11.2018, 21:48
    #39741318
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с разделением графики и логики в игре на потоки
золотые слова )
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема с разделением графики и логики в игре на потоки / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]