Sonic Scenarist NT- практическое руководство

         

Пример первый - возвращение из меню в тот же момент фильма, откуда в меню уходили


      Задача: Зритель во время просмотра фильма нажимает кнопку меню, просматривает меню, или просто желает таким способом прервать на время просмотр, но потом, выбирая в меню просмотр фильма, хочет вернуться то же место, откуда он перешел в меню. Кратко это функция называется Resume. Решение этой задачи несложно и для начала рассмотрим именно ее. 

      При решении любой задачи необходимо руководствоваться обыкновенным здравым смыслом, поэтому первой операцией, которой нам надо сделать, это как-то запомнить тот факт, что мы смотрели фильм и вышли в меню именно из него. Проще всего это сделать, записав какое-нибудь число в GPRM регистр. Для этого щелкнем мышью на ярлыке Pre основного фильма. программа автоматически вызовет Simulation window и на экране появится такой диалог:

 

    Как видно из рисунка, никаких команд на Pre нет. Для ввода команды сначала следует снять флажок у No Command (Нет команды). На экране появится диалог ввода команды:

Поскольку нам надо просто записать в GPRM число, то мы выберем в ниспадающем меню Command (Команда) команду Set to GPRM (Установить GPRM):

По умолчанию команда Set to GPRM настроена на присвоение значения (Assign) одного регистра GPRM другому. Если мы хотели бы присвоить значение SPRM регистра регистру GPRM, то в поле Set следовало бы выбрать SPRM. Нам же требуется занести число и для этого в поле Set нам надо выбрать Immediate (Немедленно):

 

    Занесем в регистр GPRM0 число 100. Для нашего примера совершенно все равно, какое именно число будет занесено, лишь бы оно отличалось от нуля. Тем самым, поскольку мы "повесили" команду на Pre, при любом входе в фильм мы присваиваем GPRM0 значение 100.

    Теперь нам надо обнулить это число по окончании фильма. Для этого щелкнем мышью на ярлыке Post фильма (помните, что в нашем сценарии Post был соединен с Root меню): 

 

Как видно из рисунка, после окончания фильма программа дает возможность при использовании функции Resume вернуться к любой главе (сцене) фильма, причем по умолчанию переход происходит к началу фильма, т.е. первой главе (сцене). Для нашей задачи такой автоматический способ возвращения по завершении просмотра подходит, но мы будем считать, что его нет для чистоты эксперимента. Поскольку очередность команд менять нельзя, мы просто заменим команду перехода в Root меню на команду присвоения нулевого значения регистру GPRM0:




 
Теперь нажмем кнопку Add (Добавить) и введем команду перехода к Root меню:

C фильмом все необходимые действия проделаны, теперь настало время для работы с Root меню. Выберем ячейку Buttons (Кнопки) в Root меню и в Simulation window мы увидим:
 
 Нас интересует как раз первая команда, поскольку она относится к кнопке "Просмотр фильма". Как мы писали ранее, на кнопку можно "повесить" только одну команду, а поскольку реализовать полностью все нужные нам действия никакой единственной командой, даже Type 3, не удастся, надо придумать способ, как обойти это ограничение. Наиболее простое решение в этом случае - просто перейти к Post в Root меню, поскольку на Post можно "повесить" до 128 команд. Так мы и сделаем:
 
 Как видно из рисунка, мы "повесили" на кнопку команду безусловного перехода к Post. Теперь щелкнем мышью на ярлыке Post Root меню:

Снимем флажок с параметра No Command (Нет команды) и выберем команду Jump by Sub-Instructions с подкомандой Resume, как показано на рисунке:

Команда Jump by Sub-Instructions с подкомандой Resume как раз и возвращает зрителя в то место Title, откуда зритель попал в меню. Если оставить все как есть, то переход по Resume будет выполняться всегда, что нам не подходит, поскольку зритель может попасть в Root меню из вступительного клипа (First Play), например и тогда нажатие кнопки "Просмотр фильма" в Root меню приведет к тому, что зритель снова вернется в вступительный клип, а не перейдет к просмотру фильма. Поэтому установим флажок Compare (Сравнить):

Выбор Compare (Сравнение) означает, что действие по команде, в которой вы разрешили сравнение, будет выполнено в том и только в том случае, если результат сравнения - истина (true). Если результат ложь (false), то команда будет просто пропущена и DVD плеер перейдет к обработке следующей по списку команде. Установите в поле Compare Immediate и введите число 100 в соответствующем поле, как показано на рисунке выше. Если в GPRM будет число 100, то переход к точке выхода из фильма (Resume) произойдет, в противном случае нет. Но что означает значение регистра GPRM0, не равное 100? Это означает, что зритель еще не смотрел фильм и нам надо просто перейти к соответствующему Title, что мы и сделаем, добавив по кнопке Add команду Jump to Title (Переход к тайтлу) и выбрав в поле ниже Title_2, как показано на рисунке:


 
На этом собственно программирование закончено. Следует иметь ввиду, что вы не сможете проверить в Simulation window переход по Resume. Несмотря на то, что программа явно отрабатывает этот переход, в окне Simulation window картинка не меняется. Но, сделав образ DVD-Video на жестком диске, вы можете убедиться в правильности работы заданных вами команд, используя программный DVD плеер, такой как PowerDVD, например. Не забудьте замыкать ячейку Cell Root меню саму на себя, поскольку если вы для Root меню будете использовать видеоклип, то при незамкнутом цикле воспроизведения плеер попадет в Post и перейдет к просмотру фильма. 
На этом мы завершили описание первого примера, сценарий которого вы можете переписать отсюда. 
Создание своего DVD-Video диска программой Sonic Scenarist NT- практическое руководство - Часть 8
     
4.6.4.2.
Содержание раздела