|
|
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
Всем привет. Пишу простую игру, есть разделение на графику и логику. Вся графика выводится в отдельном потоке со своим таймером, а логика рассчитывается в основном игровом потоке. Но есть в этом и своя проблема. Например, движение наискосок рассчитывается как движение вправо тут же вниз (это необходимо, понимаю, что с математической точки зрения неправильно); если бы графика выводилась после обработки логики, то все было бы нормально: персонаж рисовался бы в своей законной позиции, куда попал, двигаясь диагонально. Но так как графика выводится в отдельном потоке, иногда (и довольно часто) вывод персонажа попадает на тот момент, когда он пошел вправо, но еще не пошел вниз. В результате, получается некрасивое движение "ступеньками". Как можно решить эту проблему, оставив разделение обработки логики и вывода графики на разные потоки? Причем, графика ничего не знает о самой игре, получается что-то вроде небольшого графического движка, который вообще не знает об игровой логике и не имеет доступа к игровым параметрам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 13:38 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
amadeus, Я конечно может что-то не понимаю, но почему бы не сделать в логике "движение на искосок"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 13:51 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
Dimonka , вопрос здесь больше не в том, как лучше реализовать движение, а в том, как правильно синхронизировать графическую и логическую части, чтобы они остались максимально независимы друг от друга. Сделаю я движение наискосок (это не проблема, если будет такая необходимость) - появятся другие проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 13:56 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
amadeusКак можно решить эту проблему, оставив разделение обработки логики и вывода графики на разные потоки? Снапшот игрового мира сделай. Логика подготавливает новый снапшот и отправляет его графике. Графика сравнивает новый снапшот со своим старым и обновляет на экране изменившиеся места. Тогда графика не сможет видеть мир в "промежуточных" состояниях. Ну или тупо обноси "многоходовочки" критической секцией/мутексом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 14:01 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
amadeusСделаю я движение наискосок (это не проблема, если будет такая необходимость) Не сможешь. Нет атомарной операции (x,y) += (dx,dy). В любом случае ты будешь писать x += dx; y += dy; и несинхронизированный доступ из другого потока сможет вклиниться между ними. PS: Кстати, целочисленные координаты персонажа - ошибка. Если только ты не пишешь олдскульную игру, где все прыгают по квадратным клеточкам. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 14:20 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНе сможешь. Нет атомарной операции (x,y) += (dx,dy).Легко! Использовать одномерный массив, где каждые N отсчетов - новая строка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 16:00 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
а нахрена вообще отдельные потоки ? Цель какая этого ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 16:03 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
Да уж. "Простую" игру незачем бить на потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 16:20 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
Вот пара моих "простых" игр. Многопоточность (кромя аудио-потоков) им не требовалсь даже 15 лет назад, когда они были написаны. http://www.rgreat.ru/tmp/Games/NukeWar/NukeWar.exe http://www.rgreat.ru/tmp/Games/SpaceWar/SpaceWar.exe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 16:29 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
rgreatМногопоточность (кромя аудио-потоков) им не требовалсь даже 15 лет назад, когда они были написаны. А теперь процы для домашних компов 16-ядерные делают, теперь требуется! Надо же, чтобы эти процы были чем-то загружены! Тем более, битка просела. Чем же еще загружать теперь, как не "графическими потоками" игр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 16:34 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
YuRockА теперь процы для домашних компов 16-ядерные делают, теперь требуется! Надо же, чтобы эти процы были чем-то загружены!Винда найдет чем их загрузить и без нас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 16:37 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
rgreatYuRockА теперь процы для домашних компов 16-ядерные делают, теперь требуется! Надо же, чтобы эти процы были чем-то загружены!Винда найдет чем их загрузить и без нас. Тем более. Чтобы майкрософту своё личное процессорное время время не оставлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 17:39 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
rgreatВот пара моих "простых" игр. Многопоточность (кромя аудио-потоков) им не требовалсь даже 15 лет назад, когда они были написаны. http://www.rgreat.ru/tmp/Games/NukeWar/NukeWar.exe http://www.rgreat.ru/tmp/Games/SpaceWar/SpaceWar.exe SpaceWar зачет! Играл целый час на работе :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 18:26 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 18:45 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
amadeusесли бы графика выводилась после обработки логики, то все было бы нормальноне понимаю, какой вообще смысл выводить не готовую (не просчитанную до конца) картинку??? если в логике вообще есть понятие "кадра", то очевидно, что кадр должен рисоваться только по окончании его просчета логикой (тупо флаг готовности и т.п.) - если логика медленнее графики, нужно снижать частоту кадров, либо будут пропуски кадров с неприятным видимым эффектом подтормаживания. очевидно, пока графика выводит один кадр, логика должна просчитывать уже следующий. скорее всего, нужен double buffering - два набора данных для построения кадров: пока графика выводит один, логика обновляет данные в другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 19:21 |
|
||
|
Проблема с разделением графики и логики в игре на потоки
|
|||
|---|---|---|---|
|
#18+
Еще вариант - координаты объекта должны быть не значением а функцией от времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 20:01 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39740906&tid=2040055]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 416ms |

| 0 / 0 |
