RU

Quest Navigator

Nex Moderator 15.01.2012 08:10 162 comments 94901 views

Flash плохо поддерживает сенсорные экраны, поэтому попытка напрямую портировать AeroQSP на iOS провалилась.
В связи с этим я решил разработать новый плеер, взяв за основу AeroQSP и переписав весь код, отвечающий за вывод на экран и взаимодействие с пользователем. Название - Quest Navigator. В первую очередь плеер делается с расчетом на мобильные устройства. В будущем, возможно, этот плеер будет доработан для работы в Windows, с тем чтобы заменить нынешнюю версию AeroQSP.

Сначала планируется сделать его на iOS, далее попытаюсь собрать под Android, и уж потом для Windows.

Принципиальные отличия от нынешней версии AeroQSP:
1. Используется не самописный HTML-рендер Байта, а нативный компонент браузера. Грубо говоря, игра будет запущена в “браузере по умолчанию”. Как следствие, в Quest Navigator должно работать то, что работает в обычном браузере - атрибуты, теги, форматирование текста, списки, таблицы и пр.
2. Будет использоваться JQuery(последней стабильной версии).
3. Поначалу не будут поддерживаться эффекты переходов между локациями, возможно будет реализовано позже.
4. Поначалу не будет поддерживаться “выделение действия” при наведении на него курсора - т.к. в мобильных устройствах курсора нет, а тормозит работу сильно. Для совместимости, обработчик выделения($ONACTSEL) будет вызываться сразу перед событием “действие нажато”. Возможно будет доработано позже.
5. Поначалу не будет строки ввода - т.к. с ней нужно возиться, используется она редко, а времени на разработку мало.
6. Поначалу не будет стрелочек для прокрутки текста - т.к. на мобильных устройствах это неудобно, будет скроллирование как обычно, “перетаскиванием” текста. Возможно, стрелочки будут добавлены позже.
Статус проекта на сегодняшний день:
Все уже работает.
Quest Navigator для Android
Quest Navigator для Windows
Quest Navigator для iOS

Исходный код:
JS+HTML фреймворк (папка “www/qsplib”) - http://github.com/Nex-Otaku/quest-navigator-core
Библиотечный проект для Android - http://github.com/Nex-Otaku/quest-navigator-library-android
Плеер для Windows и Macos на основе Awesomium - http://github.com/Nex-Otaku/quest-navigator-awesomium
Основная библиотека интерпретатора QSP для Quest Navigator - http://github.com/Nex-Otaku/qsplib-experimental

Текст этого сообщения будет меняться по мере работы над проектом. Также в теме буду отписываться об изменениях.

Если есть вопросы, спрашивайте, отвечу.

Edited at 30.07.2014 15:58 (11 years ago)
Серый_Волк #10 13.03.2012 11:45 (13 years ago)

Аджента писала игры под аеру задолго до “Кобольдии” и “Города Туманов”…

Ajenta,
какой плеер нравится, под такой и пиши. В будущем, игры, предназначенные для классического плеера, будут проигрываться в дефолтном оформлении Quest Navigator, и необходимость в классическом плеере отпадет.

Серый_Волк:

Аджента писала игры под аеру задолго до “Кобольдии” и “Города Туманов”…

Да, но после этих игр, всем-таки очень аэра понравилась.

Некс, понятно.

Добавлены переменные настройки интерфейса - скрываем скроллбар(полоску) для основных окошек
MAIN_SCROLL_VISIBLE
ACTS_SCROLL_VISIBLE
VARS_SCROLL_VISIBLE
OBJS_SCROLL_VISIBLE
ANY_SCROLL_VISIBLE

Хм, старый подход AeroQSP использовал не XXX_VISIBLE, а HIDE_XXX.
Причина в том, что если что-то по умолчанию показывается, то соотносим это с дефолтным значением переменных - 0.
Получается, чтобы что-то скрыть, нужно выставлять значение, отличное от 0.

Еще - сокращение для окна доп описания в AeroQSP - STAT (от “status”), а не VARS.

UPD. Также для сокрытия всех скроллбаров уже есть “HIDE_SCROLL_ARROWS”.

Byte,
уговорил, сейчас поменяю VISIBLE на HIDE и VARS на STAT.

Почему не пользуюсь HIDE_SCROLL_ARROWS - в Quest Navigator стрелок в принципе нет, не вижу смысла пользоваться переменной с таким названием. Могу сделать ради совместимости, чтобы обе переменные работали, HIDE_SCROLL_ARROWS и HIDE_SCROLL_ANY.

Переименовал.
HIDE_SCROLL_MAIN
HIDE_SCROLL_ACTS
HIDE_SCROLL_STAT
HIDE_SCROLL_OBJS
HIDE_SCROLL_ANY

HIDE_SCROLL_ARROWS работает как синоним HIDE_SCROLL_ANY.

Предлагаю такие названия:
HIDE_MAIN_SCROLL (от hide main scrollbar)
HIDE_ACTS_SCROLL
HIDE_STAT_SCROLL
HIDE_OBJS_SCROLL

HIDE_SCROLL_ANY (к тому же по смыслу должно быть HIDE_ALL_SCROLLS) предлагаю убрать совсем, достаточно HIDE_SCROLL_ARROWS. Пусть SCROLL_ARROWS означает скроллбар, т.к. по сути одно и то же.

Byte,
не вижу большой необходимости цепляться за старое название переменной. Достаточно того, что оно будет работать наравне с новым. То, что ARROWS обозначает вовсе не стрелочки, конечно можно объяснить авторам, но зачем, если можно просто переименовать в более понятное название? Путаться меньше будут.

Переименовал.
HIDE_MAIN_SCROLL
HIDE_ACTS_SCROLL
HIDE_STAT_SCROLL
HIDE_OBJS_SCROLL
HIDE_ALL_SCROLLS

HIDE_SCROLL_ARROWS работает как синоним HIDE_ALL_SCROLLS.

Добавил ключевое слово “protected” - теперь корневые элементы страницы, имеющие класс “protected”, полностью настраиваются внешним CSS и не модифицируются игрой.
Пример:

<div id="qsp-dialog-msg" class="protected">

Это необходимо для того, чтобы иметь возможность делать “растягиваемый” дизайн. Без “protected”, элементы страницы будут задаваться фиксированными координатами из переменных игры.

KOLANICH:

И зачем модифицировать игрой все элементы без протектед?
Почему нельзя просто до- и переопределять стиль, как обычно и делается
Т.е. в начале у всех стиль дефолтный (определяемый переменными игры), а после применения css - частично дефолтный + кастомный

В первую очередь потому, что момента “в начале” не существует для интерпретатора. Переменные, которые задаются игрой, даже если они задаются в стартовой локации, уже будут восприниматься интерпретатором как изменение “на лету”.
Во-вторых, потому что другие варианты сильно нарушают совместимость и дополнительно усложняют переносимость игр с AeroQSP. Это и так, к сожалению, потребует больше усилий, чем я рассчитывал.

1 Вы не ответили на мой пост про яваскрипт.
Будет ли он добавлен, или нет?
Также вы не ответили про развитие нативного плеера (qspgui).
2

В первую очередь потому, что момента “в начале” не существует для интерпретатора.

В начале - когда у элемента отсутствует аттриббут стиля.

Переменные, которые задаются игрой, даже если они задаются в стартовой локации, уже будут восприниматься интерпретатором как изменение “на лету”.

На лету так на лету.
Что мешает изменять дефолтный стиль при изменении переменных.
Короче я предлагаю сделать как в браузерах.
Если вы поковыряетесь в настройках или в about:config, то вы там найдёте определённый дефолтный стиль, применяемый ко всем элементам. Но когда вы назначаете элементу класс или стиль, часть дефолтного переопределяется. Если вы отредактируете дефолтный стиль, то изменятся все элементы без стиля и все где изменённый кусок стиля не переопределён.

Может вообще весь плеер перевести полностью на яваскрипт в виде аддона к мозилле не заморачиваясь с V8 и нативным плеером?

Так оно и должно работать именно так: есть стиль по умолчанию, но игра может его переопределить.
Повторю: JavaScript поддерживаться не будет.

Но ты, KOLANICH, можешь сделать порт движка на JavaScript. Синтаксис останется тем же, но выполняться будет в среде браузера.

Log in or Register to post comments.