Четверг, 28 Марта 2024, 16:14

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Общие обсуждения программистов » Как использовать двойную буферизацию для игрового цикла?
Как использовать двойную буферизацию для игрового цикла?
Ghost_in_the_shellДата: Четверг, 21 Января 2016, 11:47 | Сообщение # 1
участник
Сейчас нет на сайте
или как решить проблему вроде этой:
есть два атакующих друг друга персонажа. Когда персонаж получает урон, он должен отбежать. По задумке персонажи должны ударить друг друга и разбежаться, но тот кто первый в списке на обновление все время бьёт, а кто второй всё время убегает
vasua99Дата: Четверг, 21 Января 2016, 11:51 | Сообщение # 2
GNU follower
Сейчас нет на сайте
Используй систему событий dry

Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
GudleifrДата: Четверг, 21 Января 2016, 14:30 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Ghost_in_the_shell, ни одно красивое название все проблемы не решит. Сначала решите, что Вам надо, и только затем - как это сделать. Допустим, здесь Вас не устраивает "неодновременность удара", допустим исправим (простейшим способом - разбиванием действия на фазы, сначала считаем для обоих силу удара, затем - повреждения, потом реакцию на повреждения...). Но тут наши персонажи одновременно тянуться за одним яблоком... Делаем аналогично и каждый получает по яблоку?
Лекарство одно - сначала обдумываем модель мира, и только потом начинаем программировать.

Добавлено (21 января 2016, 14:30)
---------------------------------------------
P.S. Программисту на заметку: механизмы буферов (файлов) и событий (сообщений) друг друга полностью дублируют и использовать оба - вредное излишество.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
FlyOfFlyДата: Четверг, 21 Января 2016, 15:55 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Цитата Gudleifr ()
ни одно красивое название все проблемы не решит. Сначала решите, что Вам надо, и только затем - как это сделать. Допустим, здесь Вас не устраивает "неодновременность удара", допустим исправим (простейшим способом - разбиванием действия на фазы, сначала считаем для обоих силу удара, затем - повреждения, потом реакцию на повреждения...). Но тут наши персонажи одновременно тянуться за одним яблоком... Делаем аналогично и каждый получает по яблоку?
Лекарство одно - сначала обдумываем модель мира, и только потом начинаем программировать.

O_o, умный комментарий
Я так один раз не сделал и щас приходится работать над двумя проектами, над готовым, где приходится делать маленькие, ну костыли.
и над Work on the bugs версии своего кода, чисто для себя, где как раз я постараюсь все предусмотреть. Не через голову, так через заднее место дойдет, что не надо программировать стразу, как только идея в голову пришла


Сообщение отредактировал FlyOfFly - Четверг, 21 Января 2016, 15:56
SaiteiДата: Четверг, 21 Января 2016, 16:49 | Сообщение # 5
старожил
Сейчас нет на сайте
(обработка логики: все изменения, которые должны произойти, запоминаем) -> (когда все объекты обновились, переносим изменения)

Проблема с яблоком решается легко: ищем ближайшие объекты, которые могут подобрать яблоко. Если их несколько, то случайным образом выбираем нужный (или выбираем того, у кого приоритет выше)
GudleifrДата: Четверг, 21 Января 2016, 17:02 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Saitei, это все только красивые слова.

"Запоминаем изменения"? Где? В переменных! А что есть запоминание в переменной? "Изменение"! Которое, в свою очередь, надо запомнить в другой переменной... В любой практической реализации грань между "запоминанием" и "немедленным исполнением" должна быть проведена. И чем меньше будет "запоминаний", тем лучше.

Цитата Saitei ()
Проблема с яблоком решается легко:
К сожалению, ваше решение не легкое. Если программист для любого действия будет "проверять окружение", то он никогда ничего не сделает.

Может ли Вася взять яблоко? Нет, у Пети приоритет выше! Значит, Петя возьмет яблоко? Нет, он не хочет! Значит, Вася все-таки, может взять яблок? Нет, пока мы считали приоритеты, Петя захотел взять его! Но тем временем вырос приоритет Маши... Дурдом программеру обеспечен.

Если Вы хотите теории, см. статью Дейкстры "Взаимодействие последовательных процессов". Но проще, повторяю, заранее подумать.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
SaiteiДата: Четверг, 21 Января 2016, 17:24 | Сообщение # 7
старожил
Сейчас нет на сайте
Цитата Gudleifr ()
Может ли Вася взять яблоко? Нет, у Пети приоритет выше! Значит, Петя возьмет яблоко? Нет, он не хочет! Значит, Вася все-таки, может взять яблок? Нет, пока мы считали приоритеты, Петя захотел взять его! Но тем временем вырос приоритет Маши... Дурдом программеру обеспечен.

Цитата Gudleifr ()
"Запоминаем изменения"? Где? В переменных! А что есть запоминание в переменной? "Изменение"! Которое, в свою очередь, надо запомнить в другой переменной... В любой практической реализации грань между "запоминанием" и "немедленным исполнением" должна быть проведена. И чем меньше будет "запоминаний", тем лучше.

Вы не поняли идеологию. Дальнейшие изменения запоминаются, чтобы состояние мира не менялось в ненужных местах (а следовательно во время обновления Петя не сможет ВДРУГ захотеть съесть яблоко).
GudleifrДата: Четверг, 21 Января 2016, 17:32 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Saitei, дело не в том, что всегда можно зафиксировать границу между "уведомлением" и "свершением", а в том, что е нельзя провести раз и навсегда, решив, что следование запомненной "идеологии" будет работать всегда, при программировании чего угодно. На один случай, когда сохранение изменений поможет, найдется сто случаев, когда оно само будет действием, разрушающим мир, и миллион случаев, когда оно будет никому не нужно.

Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
SaiteiДата: Четверг, 21 Января 2016, 17:37 | Сообщение # 9
старожил
Сейчас нет на сайте
Gudleifr, для этого и нужен программист, который может отделить "надо" и "не надо". Конкретный вопрос- конкретный ответ, абстрактный вопрос - абстрактный ответ : )
GudleifrДата: Четверг, 21 Января 2016, 17:47 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
Saitei, хороший программист всегда говорит "не надо".

В контексте изначального вопроса это означает следующее. Сначала подумать: "А нужно ли, чтобы персонажи отлетали одновременно?", "Не сделает ли это невозможным некоторые финты?", "Будет ли такое встречаться на практике?". Потом: "Что означает "отлететь одновременно" на языке программы?", "Что означает там "одновременность""? И только потом, подставить оду разнесчастную переменную, которая будет за это отвечать. Без всяких "идеологий" и "механизмов".


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.

Сообщение отредактировал Gudleifr - Четверг, 21 Января 2016, 18:08
Форум игроделов » Программирование » Общие обсуждения программистов » Как использовать двойную буферизацию для игрового цикла?
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг