emergency
23:08 10-05-2009 Время вспять
Время, как головная боль - его на самом деле нет (как и болевых рецепторов в мозгу), только ощущение.

Время - это наше ощущение причинно следственной связи.
Как в часах - одна шестерёнка двигает другую, другая - третью, третья - четвёртую. Если заставить шестерёнки двигаться в обратную сторону - часы будут двигаться назад. Ускорить их - они ускорятся. Замедлить - замедлится в часах и время.

Так как все шестерёнки взаимосвязаны - всё "время" можно провернуть, заставивив двигаться назад лишь одну.

То есть управление временем, это не некий мистический процесс из области хай-фая. Это вполне формализумая вещь.

Для эмуляции значит нужна система, работающая по линейным причинно-следственым связям и такая, в которой импульс не исчезает в никуда.
Возьмём, к примеру, классический арканоид. [изображение] Получилось бы его "развернуть"?

Предположим, что "основной шестерённкой" мы делаем шарик. Тогда:
1) Поведение доски мы делаем линейно зависимым от движений шарика (не имеет значение каким именно способом, к примеру - пишем бота, который бы пытался всегда подставлять доску под шарик).

Далее возникает проблема. Даже повернув "главную шестерёнку" назад (то есть, направив назад шарик) игра назад не пустится. Почему? Потому что не будут появляться назад кирпичи.
А появляться они не будут, потому что от удара шарика по кирпичам теряется импульс.

Добавим тогда "сохранение импульса":
2) Каждый кирпич разобьём на десять частиц. Если эти десять частиц оказываются в одной точке друг с другом и с шариком - они образовывают целый кирпич. После удара шарика по кирпичу, они разлетаются из одной точки в разные стороны и летают по уровню, отбиваясь от стен так же, как шарик, но не влияя ни на шарик, ни на доску ни на какие другие элементы игры.

Теперь другая проблема - полёт частиц от шарика не зависит. Т.е. под "главную шестерёнку" шарик больше не подходит. Значит нужно:

3) Сделать некий механизм, позволяющий ускорить, замедлить или повернуть назад движение всех свободно летающих по уровню элементов (а это шарик и частицы - других нет).
Конкретнее: Каждому "летающему" элементу нужно передать [изображение] импульс, который его бы и двигал.

Теперь этот этот импульс становится "временем". Повернув везде импульс (просто умножив скорость на -1), мы поворачиваем назад всю игру, которую теперь можно как угодно отматывать в любую сторону. Кирпичи будут разлетаться на частицы в обычном времени и собираться назад в обратном.

Это, конечно, максимально упрощённый пример.
Комментарии:
d_r
00:01 11-05-2009
Почему мы разбиваем кирпич на 10 частиц, а не на две, например? Чтобы гарантировать, что эти частицы через некоторое время не "соберутся" в другой точке с шариком, что при перемотке обратно создаст "неправильный" кирпич? А можно ли гарантировать, что этого не произойдет с 10 частицами?

Мне почему-то кажется, что при разбиении на любое количество частиц вероятность их сбора в будущем в другой точке будет ненулевой.
emergency
00:12 11-05-2009
Можно вообще на частицы не разбивать - просто выставить таймер на пустую точку, отсчитывайющий время после разбивания и потом пускать таймер назад.

С частицами нагляднее.

А, собственно, зачем мне гарантировать нулевую вероятность неправильного срабатывания?

Речь идёт о наглядной эмуляции простой системы.
Упор на словах "наглядной" и "эмуляции".
emergency
00:17 11-05-2009
Ну и ещё - от частиц мне будет легко пойти дальше, если я захочу продолжить размышления, расширив систему.
d_r
00:19 11-05-2009
А зачем вообще эта возня с частицами, когда просто можно запоминать время уничтожения кирпича?
emergency
00:24 11-05-2009
Дубль два: Для наглядности.
Vital
03:16 11-05-2009
А в таком эксперименте "игра" должна оставаться игрой? То есть сохранять элемент контроля и развлекательности? При положительном ответе такие эксперименты вносят неплохой вклад в развитие жанра (я сейчас про Braid).
Vital
03:21 11-05-2009
К чему я это спросил то - если мы можем пустить время в обратную сторону, то цель игры (в данном случае, например, арканоида) становится бессмысленной. Ну либо бессмысленной становится эта фича - про изменение причинно-следственных связей. Я понимаю, что изначально такой цели не ставилось, но ведь куда интересней, когда мысленный экперимент имеет реальное приложение. Я бы, например, с удовольствием своего кота назвал Шрёдингером... ))
emergency
03:25 11-05-2009
Я сейчас не об игре писал, а об эмуляции поворота времени.

Braid - совсем другое дело.
Там "отмотка плёнки", а не поворот времени назад.

Поэтому в Braid, к примеру, предметы часто отскакивают от воздуха при "обратной отмотке" и это используется в геймплее.

То есть определённые сходства со временем там присутствуют, но принципы совершенно другие.
Т.е. к примеру если ты запишешь игру в арканоид на плёнку, а потом отмотаешь назад - оно будет выглядеть, как будто назад запустилась сама игра, однако это никакого отношения к времени иметь не будет. Просто кадры показали с начала в одной последовательности, а потом в другой.
emergency
03:28 11-05-2009
Давай предположим, что в арканоиде при обратной отмотке доска как-либо изменит своё поведение (без разницы, управляемая игроком или ботом)

Возникает вопрос - возрождать ли уничтоженные кубики если шарика рядом с ними не пролетало?

Это я к тому, что во взаимосвязанной системе вообще отсутствует понятие "вариантов". То есть ты можешь представить себе часы, в которых одна из шестерёнок может двигаться с той скоростью, которую выберешь?
Там всё взаимосвязано, начинает по другому двигаться одна - синхронно ей двигаются и остальные.
Vital
03:29 11-05-2009
А как же введение элементов, "не подвластных ходу времени" (не знаю, как лучше их назвать)? Не превращают они простую отмотку в нечто большее?
Vital
03:30 11-05-2009
Вот именно!! Ответ на вопрос - положительный. А при отмотке - такого просто быть не может.
Vital
03:33 11-05-2009
Так и в Braid - может получиться так, что при развороте импульса, к примеру, ключ, который до этого валялся в яме с шипами, окажется в руках персонажа, который до этого в этой яме "умер". А персонаж будет жив и здоров. Это уже выходит за пределы отмотки.
emergency
03:35 11-05-2009
На самом деле - можно сделать систему (даже в рамках того же арканоида) в которой будет праивльно работать разлёт частиц при отмотке вперёд или назад.
Vital
03:36 11-05-2009
( Блин, не так. Понятно, что доска не может измениться сама по себе. Но она ведь меняется от действий шарика, или что мы там выбрали.
Vital
03:37 11-05-2009
Прошу прощения, что пишу невпопад. ) На такую систему было бы любопытно взглянуть.
emergency
03:38 11-05-2009
То есть предположим что детали на уровне нужно не разбивать, а выталкивать шариком за пределы поля.

Тогда нужно добавить только уход импульсов в "пол" и возникновение их в нужный момент - и всё будет работать очень хорошо и красиво.
emergency
03:42 11-05-2009
Ну то есть. Вот представь - есть камень (A). Кинул ты на этот камень другой (B). Они остались лежать рядом.
С первого взгляда - кажется "с чего бы это при обратной отмотке камню (В) со улетать от (А)? это же противоречит законам физики"

Однако если подумать - нет, не противоречит. Сила удара (В) ушла в А, так что к примеру, если ты отмотаешь время назад, то А в нужный момент соберёт силу чтобы "пнуть" то, что на нём лежит.

Останется только сэмулировать это в арканоиде - и пол сам будет "отпинывать" кубики, возвращая их на поле при обратной отмотке.
Vital
03:42 11-05-2009
А управляем мы чем? Шариком? Или просто "направлением времени"?
emergency
03:43 11-05-2009
Управляешь доской.
emergency
03:45 11-05-2009
То есть, при такой механике - представим ты выкинул с поля некий кубик. Он отлетел на 5 метров и остановился.

Ты поиграл немного, а потом решил поиграть в "обратном времени".
Вот ты играешь - и в нужный момент пол "пинает" кубик назад. Оданко, так как доской ты двигаешь по другому, то кубик, не встречая перед собой шарика - пролетает не пять метров, а уже десять (т.е. пять метров его "разгоняет" пол, а следующие пять - он останавливается, так как не встретил шарика)
Vital
03:46 11-05-2009
Понял. То есть можно будет даже переставлять блоки на поле произвольным образом. Или даже указывать новое место для уже выбитых. )
emergency
03:49 11-05-2009
Конечно. Система держит в себе импульс - ей наплевать, что ты куда поставишь.
Она будет довольно странно работать - если долго мотать время туда-обратно потому что тогда пол будет "создавать" импульсы в самых неожиданных местах, отпинывая вообще некие левые предметы.
Однако всё будет правильно работать.
Vital
03:55 11-05-2009
А если убрать кубик с того места, откуда его система должна толкнуть обратно и включить обратную перемотку? Куда денется импульс?
emergency
04:04 11-05-2009
Никуда. Уйдёт в воздух.
А если на этом месте в тот момент окажется что-то другое (например если рядом будет пролетать шарик) - толкнёт его.

отредактировано: 11-05-2009 04:29 - emergency

Vital
12:47 11-05-2009
Тогда нарушается замкнутость системы, если только воздух не является ее частью.
emergency
13:06 11-05-2009
Если очень хочется - можно создать мелкие частицы, которые бы разлетались при этом.
Но зачем?

Я вроде бы не замкнутую систему придумывал, а играбельную версию арканоида с промоткой туда-обратно.
Vital
14:42 11-05-2009
Вообще, конечно, незачем. Однако, во-первых, оригинальный арканоид все же является замкнутой системой, во-вторых, этот факт у тебя указан в посте. Ну, и в-третьих, как-то не по-чистоплюйски это! Ну, незамкнутые системы.
Vital
14:50 11-05-2009
Вообще-то это подстава, все-таки. Если пустить шестеренки назад, это как раз и будет просто "промотка"!!
emergency
20:37 11-05-2009
Оригиальный арканоид был замкнутой системой?
Что ты имеешь ввиду по этим?
Vital
04:21 12-05-2009
Означает, что там есть абсолютно упругий шарик и весь импульс, который ему придают кирпичи и ракетка, никуда не исчезает. А что ты имел ввиду, когда писал, что Для эмуляции значит нужна система, работающая по линейным причинно-следственым связям и такая, в которой импульс не исчезает в никуда.
Vital
04:21 12-05-2009
?
emergency
04:33 12-05-2009
Я не понимаю, нафига ты связал в своих рассужениях замкнутую систему и сохранние импульса шарика, и каким боком ты соотнёс это с промоткой времени. Какая-то мешанина у тебя получилась.

Что я имею ввиду - я подробно расписал в записи по пунктам.
Vital
16:48 12-05-2009
Не сохранение импульса шарика, а сохранение импульса системы. "Полный импульс замкнутой системы тел остается постоянным при любых взаимодействиях тел этой системы между собой." Далее, определение замкнутой системы - "Замкнутой системой называют группу тел, не взаимодействующих ни с какими другими телами, которые не входят в состав этой группы." Твое определение импульса по сравнению с "Векторную величину р = m v, равную произведению массы тела на его скорость, называют импульсом тела." отличается не сильно, поэтому я позаимствовал и остальную терминологию из физики.
Vital
16:50 12-05-2009
А насчет времени - по-моему, любая попытка честно смоделировать все эти взаимодействия в обратном порядке упрется в обычную отмотку назад. Как нейтрино. Вот, что я имел ввиду. Если только не менять импульс системы перестановками кубиков.
Vital
16:54 12-05-2009
Вообще, это отдельные мысли были. Типа, параллельные
Vital
16:56 12-05-2009
Кстати, если тебя я уже задолбал, прямо напиши. ) И будем считать, что ты автоматически прав
Vital
17:00 12-05-2009
Вот тебе такая идея, кстати - шарик при прямом ходе не уничтожает кубики, а забивает их в землю, а при обратном - их вытаскивает. В полном соответствии с законом сохранения импульса. Тогда главной шестеренкой будет именно шарик. А то у тебя неясно, что ей стало.
emergency
17:44 12-05-2009
Шарик вытаскивающий кубики при обратной отмотке будет работать неправильно (если не сохранять в нём количество касаний с вбитым кубиком).

Ипульс системы я не рассматривал.
Я брал импульс отдельных элементов.
Смысл сохранения импульса в том, чтобы любое действие, активировало за собой другое. В после активации тем или иным образом "сохранялось" и время и место действия.

Место сохранить не сложно. Сложнее сохарнить время. Можно делать это банальнмы выставлением таймера. Но значительно красивее - если таймер будет скрытый (т.е. как я написал в примере с "выталкивающим кубики полом").

Смысла обязательно делать главной шестерёнкой шарик - я не вижу. Это можно сделать, но тогда придётся отказаться от остальных движущихся элементов на поле (бонусов, деталей, монстров). И это будет значительно менее красиво.
Vital
19:55 12-05-2009
Сила удара (В) ушла в А, так что к примеру, если ты отмотаешь время назад, то А в нужный момент соберёт силу чтобы "пнуть" то, что на нём лежит. В чем здесь скрытость таймера?
И какие именно "неправильности" может вызвать шарик, вытаскивающий кубики при обратной отмотке?
Vital
19:57 12-05-2009
И все же - а в твоем плане где главная шестеренка?
emergency
00:37 13-05-2009
> Сила удара (В) ушла в А, так что к примеру, если ты отмотаешь время назад, то А в нужный момент соберёт силу чтобы "пнуть" то, что на нём лежит. В чем здесь скрытость таймера?

Таймер тут находится не в кубиках а в полу. С первого взгляда кажется, что таймера нет.

> И какие именно "неправильности" может вызвать шарик, вытаскивающий кубики при обратной отмотке?

А подумай. Если не догадаешься - я обьясню.
emergency
00:40 13-05-2009
> И все же - а в твоем плане где главная шестеренка?

Переменная скорости.
К ней добавляется коэффициент. Пока этот коэфициент равен одному - игра идёт обычно.
Когда минус одному - игра идёт в обратном времени.
Когда двум - с двойной сокростью вперёд.
Когда минус двум - с двойной скоростью назад.

Этот коэффициент и есть главная шестерёнка.

Ты наверное просто не понимаешь, потому что с программированием не знаком.
Vital
04:28 13-05-2009
> Ты наверное просто не понимаешь, потому что с программированием не знаком.

Все-таки знаком. :) Нас знакомили. Вот только я еще и с математикой знаком.

> Этот коэффициент и есть главная шестерёнка.

Этот коэффициент является шестеренкой более высокого порядка абстракции. Потому что он есть и в шестеренках тоже. И влияет, фактически, на поведение их всех сразу, ни разу не являясь частью системы, а будучи самым что ни на есть ее свойством. Или характеристикой, что то же.

> Таймер тут находится не в кубиках а в полу. С первого взгляда кажется, что таймера нет.

Я просто этот таймер представлял, как глобальную последовательность событий. Имеет ли смысл помещать его в пол или в кубики? И даже, если это будут раздельные таймеры - все равно их видно.

> А подумай.

Думаю.
Vital
04:53 13-05-2009
Если использовать модель, предложенную мной:
1. Запоминать ничего не надо, и таймеров не надо также. Все время четко эмулируется шариком, достаточно по нажатию кнопки "Развернуть" разворачивать только его. Полный аналог шестеренок.
2. Ракетку можно оставить интерактивным элементом - нам ведь хочется играть и при обратном ходе времени - а можно и написать бота, чтобы была полная причинно-следственная связь. Хотя по мне это будет не полнота, а излишества.
3. Если сильно охота управлять полем - на здоровье. Импульсов, возникающих в непонятном месте, здесь не будет, просто потому что они содержатся неявно в кубиках, а не в полу.
4. Однако эта система, разумеется, не обладает всем этим потенциалом - типа, летит шарик, а тут его ни с того ни с сего РРАЗ! и как толкнет.
5. Но, обращу твое внимание, что сам этот потенциал мало того, что напоминает набор багов, так и по сути своей неразвлекателен. Если только не отмечать места в полу, которые скоро отдадут импульс, цветом и показывать таймером, когда.
6. Что начисто обнажает этот таймер, где бы он ни лежал.
7. Остается еще вопрос (в моей модели), как быть, если при обратном ходе шарик попадет по уже выдвинутому кубику. Во-первых, если кубики по полю не перемещаются, такая ситуация исключена. Во-вторых, если перемещаются, то пусть, например, ничего не происходит. Просто шарик отскакивает и все. Вот в оригинальном арканоиде же кубики исчезали в никуда - никто не возмущался.

Так и не додумался. Так что, видимо, придется объяснить. )
emergency
11:17 13-05-2009
Ну, предполоим, шарик при промотке в одну сторону шарик вбивает кубики. При промотке в другую - возвращает их назад.

Есть шарик. Есть кубик.

Играешь. Сбил кубик. Играешь длаьше. Шарик ещё раз десять проехал по сбитому кубику. Запускаешь промотку назад. Первый же проезд шарика по сбитому кубику - возвращает того назад (а должен - не первый, а десятый проезд). Бага то есть.

Лечится это выставлением дополнительного таймера для каждого кубика.
Но тогда система ничем не отличается от той, что я описывал в самом начале обсуждения - где просто ставил таймеры на кубики.

Ну и плюс кубики при обратной промотке будут возникать сами собой без участия шарика, что не красиво.
Vital
17:40 13-05-2009
Точно, блин.
Vital
17:45 13-05-2009
Вот же гадство - без таймера не обойдешься
emergency
18:03 13-05-2009
Ну. если очень хочется, то можно обойтись и без явных таймеров. Вариантов можно придумать очень много - удовлетворяющих практически любым мыслимым условиям.

Но самым красивым мне кажется вариант с таймерами запуска сил трения в полу.