Вопросы по Quest Navigator

Re: Вопросы по Quest Navigator

HertzQ написал(а):

Код отдельно, оформление отдельно.

Вы все-равно будете делать оформление средствами игры - дивы, стили текста и блоков и офрмлять все через css. JS нужен для "костылей", крайних случаев когда средствами игры это не реализовать, как в данном случае, так как шаблон игры статичен и неизменяем средствами игры.

Babai
useravatar
Offline
26 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы по Quest Navigator

HertzQ написал(а):

Код отдельно, оформление отдельно.

Вы, кажется, чего-то не понимаете. Пример выше вам показывает, как вставить фон в див, в зависимости от локации. Так вот, это не оформление. Это - контент игры.

Вы будете весь контент выводить в JS и CSS? Тогда зачем вам QSP?

А цитата выше подразумевает, что код, логика игры должны быть отделены от оформления (внешнего представления контента) силами самого QSP. Просто не смешивайте в одной локации логику и оформление.

evp
useravatar
Offline
384 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы по Quest Navigator

И тем не менее, хотелось бы всё-таки спросить об этом Nex'а.

HertzQ
useravatar
Offline
42 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы по Quest Navigator

HertzQ,

1. Определяем набор "сцен": типов локаций, оформление которых различается.

Типичные варианты: "обложка", "основная часть", "об игре", "концовка".
Придумываем названия классов для каждой сцены. Пусть это будет "cover", "main", "about", "ending".

2. Прописываем в CSS-файле соответствующие правила, для применения этих классов к тегу BODY:

Код:

/* Если в основном экране или в концовке, то делаем верхний край основного описания ниже, чтобы оставить место для верхней панели */

body.main #qsp-wrapper-main,
body.ending #qsp-wrapper-main { top:57px; }
body:not(.main):not(.ending) #qsp-wrapper-main { top:0px; }

3. В шаблоне игры, в файле "game.js" создаётся функция "skinSetStage", которая "переключает" текущий класс тега BODY.

Код:

var skinStage = "";


function skinSetStage(cssClass)
{
    // Переключаем класс всего body, тем самым задаем разный стиль для разных игровых экранов
    var t = $(document.body);
    if ((skinStage !== '') && (t.hasClass(skinStage)))
        t.removeClass(skinStage);
    skinStage = cssClass;
    if ((cssClass !== '') && (!t.hasClass(cssClass)))
        t.addClass(cssClass);
}

4. В игре, в нужных локациях прописывается вызов этой функции.

Код:

! Стартовая локация игры.

! В начале игры, назначаем обработчик "загрузки игрового сохранения".
$ONGLOAD = 'OnLoad'
! Назначаем первую сцену - показываем "обложку" игры.
$stage = 'cover'
GS 'Stage'

! Локация "OnLoad".
! При загрузке игры,
! скрываем и показываем все необходимые элементы скина.
GS 'Stage'

! Локация "Stage"
EXEC('JS:skinSetStage("' + $stage + '");')

! Первая сюжетная локация. Показываем сцену "основная часть".
$stage = 'main'
GS 'Stage'

! Проигрыш. Показываем сцену "концовка".
$stage = 'ending'
GS 'Stage'

Nex
useravatar
Offline
4290 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы по Quest Navigator

Большое спасибо.

HertzQ
useravatar
Offline
42 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы по Quest Navigator

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

alex 74
useravatar
Offline
1 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы по Quest Navigator

Видимо, ошибка в яваскрипте. Нужно смотреть, какой яваскрипт используется в игре, искать ошибку там.

Nex
useravatar
Offline
4290 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы по Quest Navigator

Возникла задача, которую я не могу решить. Я не могу вызвать функцию JavaScript через оператор EXEC, когда перехожу на локацию, на которой записан вызов этой функции. Пример: у меня есть простенькая функция для JavaSript, которая прячет элемент с заданным ей ID:

 Спойлер Show Spoiler Hide Spoiler
 

Код:


function hideElement(elementId) {
   if (document.getElementById(elementId)) {
      var obj = document.getElementById(elementId);
      if (obj.style.display != "none") {
         obj.style.display = "none";
      }
   }
}

Расмотрим всё на примере прогрессбара. Если в файле QSP прописать эти строчки:

Код:


'<progress id="progressbar" value="50" max="100"></progress>'
EXEC('JS:hideElement("progressbar");')

то никакого скрытия не будет вообще. Брогрессбар так и останется на экране.
Но если написать такой код:

Код:


'<progress id="progressbar" value="50" max="100"></progress>'
'<a onclick="hideElement(''progressbar'')">Кнопка</a>'

то при нажатии на ссылку прогрессбар исчезает как и было задумано. Но почему он не исчезает в предыдущем варианте? Хотя если прописать вызов обычного Alert через оператор EXEC, то всё отлично работает:

Код:


EXEC('JS:alert("AAA!!!");')

Скажите чего я не понимаю и почему нет скрытия элемента страницы(прогрессбара) в первом случаи?

Storm
Хозяин грозовой башни
useravatar
Offline
92 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы по Quest Navigator

Storm,
возможно при попытке выполнить код через exec страница ещё не свёрстана. Не пробовал запустить тот же код через counter создав задержку или из действия?

Aleks Versus
воздвигатель башни
useravatar
Offline
1400 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы по Quest Navigator

Aleks Versus, я тоже подумал о том, что страница не готова в тот момент, когда выполняется функция. Тогда как правильно вызвать функцию? Из действия ACT будет тот же самый вариант, что с ссылкой. Тут вопрос немного в другом. Допустим, у нас есть страница с какими-то элементами на ней(прогрессбар тоже находится на ней); на этой же странице есть ссылка, которая выполняет другую локацию как функцию, пример такой локации:

Код:

a=1

b=2
![Ещё какой-то код]
EXEC('JS:hideElement("progressbar");')

При выполнении этой локации как функции переменные "a" и "b" приобретут свои значения. Но строчка

Код:

EXEC('JS:hideElement("progressbar");')

просто не выполниться. Вопрос: как сделать так, чтобы выполнилась?)

Storm
Хозяин грозовой башни
useravatar
Offline
92 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
1015
Всего опросов:
14
Всего сообщений:
16790398
Сообщений на этой неделе:
29
Пользователи форума:
 
Всего пользователей:
2220
Последним зарегистрировался:
ASIT