forum

[RMXP] -HtMaL(AG47)- (Test Name)

Больше
29 апр 2013 16:47 #3707 от AnnTenna
AnnTenna ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)
А, вот как, ясненько)

Ну, тебе право виднее, у меня сложилось впечатление, что игра ближе не к РПГ, а к визуальной новелле. Сейчас, когда уже есть наработки, это звучит даже не как предложение перехода на другой двиг, а просто как мысль удивления!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
29 апр 2013 18:37 - 29 апр 2013 18:41 #3710 от Lekste
Lekste ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)
Не совсем понял, что требуется, но...
Набросал небольшой скриптик вывода диалоговых сообщений.

Вывод сообщений:
Code:
if $scene2 == nil $scene2 = DialogMessageScene.new end $scene2.show_msg("Greetings", -1)

Соответственно "Greetings" это имя блока.
-1 - параметр.

Если 1-й параметр -1, то выводятся все сообщения блока по очереди.
Если 1-й параметр nil, то выводится случайное сообщение из набора.
Если 1-й параметр -- что-то другое, то выводится сообщение с соответствующим ключом.
Если 1-й параметр циферка которая больше или равна нулю, то выводится сообщение с порядковым номером в списке блока, смотря какая цифра.
Ключ - то, что до знака равно.

Например: "block_name=Greetings"
Ключ - "block_name"

В функцию show_msg ключ передается обязательно в кавычках. Т.к. строка.
Или без кавычек, если как цифра-порядковый номер.

1-й записью каждого блока должно быть:
"block_name=имя блока сообщений"

Под спойлером код. По этой ссылке есть проект с демонстрацией, если нужно.

Возможно код кривоват. Но работать должен. :)

ВНИМАНИЕ: Спойлер!

Не воспринимай воздействие с негативной стороны, и жизнь станет проще... :)
Последнее редактирование: 29 апр 2013 18:41 пользователем Lekste.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Yin
  • Автор темы
  • Не в сети
  • Ценитель
  • Ценитель
  • И в тот день появилась она, чтобы поглотить его.
Больше
29 апр 2013 19:05 #3711 от Yin
Yin ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)
Ты всё ещё неправильно понял концепт, Lekste.
Для того, чтобы сделать всё необходимое, мне нужно запускать сообщения из-под конкретной сцены, сделанной на базе Window_Command. К примеру, вот схема выбора блока сообщений:

ВНИМАНИЕ: Спойлер!


Но проблема в том, что сообщения из-под сцен не запускаются. Я уже пыталась попробовать запускать их через параллельный коммон-ивент после выбора команды, однако это потерпело неудачу. Твоя схема тоже не возымела действия - она направлена на запуск с игрового поля, но не со скрипта, а сама схема больше напоминает систему скриптовых сокращений запуска диалогов в игре, а не запуска самих сообщений скриптом. Возможно, что ты не до конца меня понял, но это нормально.

А пока - небольшой апдейт скриншотами - обработанная и модифицированная для проекта Scene_Name:
ВНИМАНИЕ: Спойлер!


Теперь в проекте можно легко печатать имена при помощи клавиатуры - также этот скрипт поддерживает часть символики, однако существует одна весомая проблема, которая мной не может быть решена - это переход между русской раскладкой и английской. Если найдётся человек, который будет способен доработать эту систему, то я буду очень благодарна.

Проект-HtMaL(AG47)-
NST: Серьёзные недоработки в активном интерфейсе.
PST: Системный сбой. Критическое состояние.
PDT: Анонс маловероятен.
Yin

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
30 апр 2013 12:14 - 30 апр 2013 12:16 #3720 от Lekste
Lekste ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)
Похоже я наконец понял что имелось ввиду.

Т.е. нужно перенести обработку и обновление диалогового окна в сцену,
код которой под спойлером?

Или сделать отдельную сцену, которая будет отображать сообщения?

Через параллельный ивент сообщения не показываются, т.к. диалоговое окно обрабатывается в Scene_Map, а у вас значение переменной $scene заменяется на Scene_Talk.
Т.е. Scene_Map перестает функционировать.

Также есть такой вариант:
# Отсюда должен запускаться блок 1
$scene = Scene_Map.new
# Вывод сообщений


Насчет переключения раскладки. Возможно смогу чем-то помочь, но нужно взглянуть на код.
Здесь или по почте: lekste@mail.ru

Не воспринимай воздействие с негативной стороны, и жизнь станет проще... :)
Последнее редактирование: 30 апр 2013 12:16 пользователем Lekste.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Yin
  • Автор темы
  • Не в сети
  • Ценитель
  • Ценитель
  • И в тот день появилась она, чтобы поглотить его.
Больше
30 апр 2013 12:31 #3721 от Yin
Yin ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)

Т.е. нужно перенести обработку и обновление диалогового окна в сцену,
код которой под спойлером?

Или сделать отдельную сцену, которая будет отображать сообщения?


Рассматривается оба варианта, но второй с точки моего зрения предпочтительнее - однако здесь возникает вопрос в том, способна ли будет написанная система будет гармонировать с модифицированными системами сообщений.

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


Само собой:
ВНИМАНИЕ: Спойлер!


Здесь используется стандарная схема управления от Близзарда, которая является частью ToA.

ВНИМАНИЕ: Спойлер!

Проект-HtMaL(AG47)-
NST: Серьёзные недоработки в активном интерфейсе.
PST: Системный сбой. Критическое состояние.
PDT: Анонс маловероятен.
Yin

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
05 мая 2013 18:52 - 05 мая 2013 18:55 #3761 от Lekste
Lekste ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)
Возможно поздно, но как-то так работает.
Code:
class Scene_Message def initialize(block_id, key) @mode = nil # режим показа сообщений @key = key # идентификатор текущего сообщения @block_id = block_id # идентификатор блока сообщений $game_temp.message_text = nil # Фоновое изображение @bkgnd = Sprite.new(Viewport.new(0, 0, 640, 480)) #@bkgnd.bitmap = RPG::Cache.picture("pic") @bkgnd.x = 0 @bkgnd.y = 0 # Объект-контейнер для блоков сообщений @dlg_container = DialogMessageContainer.new @mode = setup_mode(@key) end def setup_mode(key) if key == nil return 0 elsif key == -1 @key = 0 return 1 elsif key.is_a?(Integer) return 2 elsif key.is_a?(String) return 3 else close end end def execute case @mode when 0: $game_temp.message_text = @dlg_container.get_msg_rand(@block_id) when 1: $game_temp.message_text = @dlg_container.get_msg_by_index(@block_id, @key) if $game_temp.message_text == nil close end when 2: $game_temp.message_text = @dlg_container.get_msg_by_index(@block_id, @key) when 3: $game_temp.message_text = @dlg_container.get_msg(@block_id, @key) end end # Команда "Показать след. сообщение" # Если режим подразумевает лишь 1 сообщение, остановить показ def next_msg case @mode when 1: @key += 1 execute return end close end def close $scene = Scene_Map.new end #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main @msg_win = Window_Message.new # Execute transition Graphics.transition # Main loop execute loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if screen is changed if $scene != self break end end # Prepare for transition Graphics.freeze # Dispose of windows @msg_win.dispose end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Update windows @msg_win.update update_key end def update_key if Input.trigger?(Input::C) next_msg end end end

Параметры вывода задаются как в пред. варианте, но передаются при создании SceneMessage.
Например: $scene = Scene_Message.new("Greetings", nil)
Результат: Выведется 1 случайное сообщение из блока "Greetings".

К сожалению, я так и не вспомнил, как отключал очистку карты при смене сцены.
Если вспомню, допишу.

Насчет подсистемы ввода имени.
Как называется система, из которой взят скрипт?

Не воспринимай воздействие с негативной стороны, и жизнь станет проще... :)
Последнее редактирование: 05 мая 2013 18:55 пользователем Lekste.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Yin
  • Автор темы
  • Не в сети
  • Ценитель
  • Ценитель
  • И в тот день появилась она, чтобы поглотить его.
Больше
06 мая 2013 04:12 #3763 от Yin
Yin ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)

Возможно поздно, но как-то так работает.


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

Насчет подсистемы ввода имени.
Как называется система, из которой взят скрипт?


Я не поняла основу вопроса. Этот скрипт полный и включает в себя все системы. Во втором скрипте - система управления и написания сообщений.

Проект-HtMaL(AG47)-
NST: Серьёзные недоработки в активном интерфейсе.
PST: Системный сбой. Критическое состояние.
PDT: Анонс маловероятен.
Yin

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
06 мая 2013 15:47 #3768 от Lekste
Lekste ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)
Насчет подсистемы ввода имени.
Предлагаю такой вариант:

1) В модуль Input добавляем ассоциативный массив, содержащий символы языка.
Например: KeyRus = {'A' => 'Ф', 'R' => 'К' }
В данном случае, английской букве 'A' соответствует русская 'Ф' и т д.

2) В измененный Scene_Name добавляем функции инициализации и преобразования символа в активный язык:
Code:
def initialize @langs = ["RU", "EN"] @active_lang_id = 0 end def getActiveLangLetter(let) case @langs[@active_lang_id] when "RU": new_let = Input::RusKey[let] if new_let != nil return new_let end end return let end

Здесь, массив @langs содержит идентификаторы доступных языков,
а @active_lang_id указывает номер текущего активного языка.

Функция преобразования в зависимости от активного языка (проверка по идентификатору из массива), заменяет английский символ на, соответствующий ему, символ активного языка.

Если соответствие не найдено (т.е. в данном случае, не найдено соответствие в массиве Input::RusKey), то вернется исходный англ. символ.
В ином случае, вернется соответствующий русский символ.

Таким образом, нет необходимости определять соответствие для всех клавиш, если их значение на текущем языке совпадает с англ. значением.
Например, можно не определять соответствие для "C", т.к. на клавиатуре англ. "С" и русский "С" расположены на одной клавише и не отличаются по внешнему виду.

Также не приходится переопределять спецсимволы такие, как #, $ и т д.

Ну, и добавим комбинацию клавиш для переключения языка.
Для этого добавим следующие строчки в функцию "update".
Code:
if Input.press?(Input::Key['Shift']) if Input.trigger?(Input::Key['Ctrl']) @active_lang_id += 1 @active_lang_id %= @langs.size end end

Например, после:
Code:
if Input.trigger?(Input::Key['Backspace']) @edit_window.back end

У меня все.
Надеюсь, помог.

Не воспринимай воздействие с негативной стороны, и жизнь станет проще... :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Yin
  • Автор темы
  • Не в сети
  • Ценитель
  • Ценитель
  • И в тот день появилась она, чтобы поглотить его.
Больше
07 мая 2013 14:30 - 07 мая 2013 14:41 #3774 от Yin
Yin ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)
Я уже пробовала осуществлять сходную модель переключения между массивами, но это оказалось неработоспособным. Причина скорее всего кроется в этой части кода:

ВНИМАНИЕ: Спойлер!


И кодом здесь:
Code:
def getActiveLangLetter(let) case @langs[@active_lang_id] when "RU": new_let = Input::RusKey[let] if new_let != nil return new_let end end return let end
... который не воздействует на данный кусок никаким образом - даже при переключении здесь остаётся именно стандартный массив let, а не новый массив new_let. Не говоря уже о том, что часть буквенных символов при данном методе скорее всего не способна к переключению в прописной режим - причина кроется в разннице буквенных и символьных значений между английской и русской раскладкой (в русском алфавите больше букв) Возможно, следует пересмотреть метод? Буду искать проблему...

Проект-HtMaL(AG47)-
NST: Серьёзные недоработки в активном интерфейсе.
PST: Системный сбой. Критическое состояние.
PDT: Анонс маловероятен.
Yin
Последнее редактирование: 07 мая 2013 14:41 пользователем Yin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
07 мая 2013 14:45 - 07 мая 2013 14:52 #3775 от Lekste
Lekste ответил в теме [RMXP] -HtMaL(AG47)- (Test Name)
Так мы же заменим "let = Input::Key.index(i)"
на "let = getActiveLangLetter(Input::Key.index(i))".

Таким образом, полученный символ передастся в функцию и, в переменную let
попадет измененный символ.

Про "Больше букв". Так ведь на клавиатуре части русских букв соответствуют
другие символы в англ. разметке.
Думаю, единственная особенность здесь будет в двойном указании соответствия
(для заглавной и строчной буквы)

Например: '>' => 'Ю' '.' => 'ю'

Не воспринимай воздействие с негативной стороны, и жизнь станет проще... :)
Последнее редактирование: 07 мая 2013 14:52 пользователем Lekste.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.076 секунд
Работает на Kunena форум
сайт друга Светлая зона и Академия РПГ Мейкера Коленка Chrono Series iFiction DK Plugins Дневник нэко PDP-11 Новая Реальность Топ Разработки игр