forum
Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2
  • 3

ТЕМА: [RMXP] -HtMaL(AG47)- (Test Name)

[RMXP] -HtMaL(AG47)- (Test Name) 29.04.2013 19:47 #3707

  • AnnTenna
  • AnnTenna аватар
  • Вне сайта
  • Администратор
  • ловлю волны настроения
  • Сообщений: 4137
  • Спасибо получено: 1390
  • Репутация: 325
А, вот как, ясненько)

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

[RMXP] -HtMaL(AG47)- (Test Name) 29.04.2013 21:37 #3710

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Разработчик
  • Мяяяяяяяяяяяяя!
  • Сообщений: 415
  • Спасибо получено: 127
  • Репутация: 82
Не совсем понял, что требуется, но...
Набросал небольшой скриптик вывода диалоговых сообщений.

Вывод сообщений:
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.04.2013 21:41 от Lekste.
Администратор запретил публиковать записи.

[RMXP] -HtMaL(AG47)- (Test Name) 29.04.2013 22:05 #3711

  • Yin
  • Yin аватар
  • Вне сайта
  • Ценитель
  • И в тот день появилась она, чтобы поглотить его.
  • Сообщений: 394
  • Спасибо получено: 169
  • Репутация: 57
Ты всё ещё неправильно понял концепт, Lekste.
Для того, чтобы сделать всё необходимое, мне нужно запускать сообщения из-под конкретной сцены, сделанной на базе Window_Command. К примеру, вот схема выбора блока сообщений:

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


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

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


Теперь в проекте можно легко печатать имена при помощи клавиатуры - также этот скрипт поддерживает часть символики, однако существует одна весомая проблема, которая мной не может быть решена - это переход между русской раскладкой и английской. Если найдётся человек, который будет способен доработать эту систему, то я буду очень благодарна.
Проект-HtMaL(AG47)-
NST: Серьёзные недоработки в активном интерфейсе.
PST: Системный сбой. Критическое состояние.
PDT: Анонс маловероятен.
Yin
Администратор запретил публиковать записи.

[RMXP] -HtMaL(AG47)- (Test Name) 30.04.2013 15:14 #3720

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Разработчик
  • Мяяяяяяяяяяяяя!
  • Сообщений: 415
  • Спасибо получено: 127
  • Репутация: 82
Похоже я наконец понял что имелось ввиду.

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

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

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

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


Насчет переключения раскладки. Возможно смогу чем-то помочь, но нужно взглянуть на код.
Здесь или по почте: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
Не воспринимай воздействие с негативной стороны, и жизнь станет проще... :)
Последнее редактирование: 30.04.2013 15:16 от Lekste.
Администратор запретил публиковать записи.

[RMXP] -HtMaL(AG47)- (Test Name) 30.04.2013 15:31 #3721

  • Yin
  • Yin аватар
  • Вне сайта
  • Ценитель
  • И в тот день появилась она, чтобы поглотить его.
  • Сообщений: 394
  • Спасибо получено: 169
  • Репутация: 57
Т.е. нужно перенести обработку и обновление диалогового окна в сцену,
код которой под спойлером?

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

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

Само собой:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


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

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Проект-HtMaL(AG47)-
NST: Серьёзные недоработки в активном интерфейсе.
PST: Системный сбой. Критическое состояние.
PDT: Анонс маловероятен.
Yin
Администратор запретил публиковать записи.

[RMXP] -HtMaL(AG47)- (Test Name) 05.05.2013 21:52 #3761

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Разработчик
  • Мяяяяяяяяяяяяя!
  • Сообщений: 415
  • Спасибо получено: 127
  • Репутация: 82
Возможно поздно, но как-то так работает.
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.05.2013 21:55 от Lekste.
Администратор запретил публиковать записи.

[RMXP] -HtMaL(AG47)- (Test Name) 06.05.2013 07:12 #3763

  • Yin
  • Yin аватар
  • Вне сайта
  • Ценитель
  • И в тот день появилась она, чтобы поглотить его.
  • Сообщений: 394
  • Спасибо получено: 169
  • Репутация: 57
Возможно поздно, но как-то так работает.

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

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

[RMXP] -HtMaL(AG47)- (Test Name) 06.05.2013 18:47 #3768

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Разработчик
  • Мяяяяяяяяяяяяя!
  • Сообщений: 415
  • Спасибо получено: 127
  • Репутация: 82
Насчет подсистемы ввода имени.
Предлагаю такой вариант:

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

2) В измененный Scene_Name добавляем функции инициализации и преобразования символа в активный язык:
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".
if Input.press?(Input::Key['Shift'])
      if Input.trigger?(Input::Key['Ctrl'])
        @active_lang_id += 1
        @active_lang_id %= @langs.size
      end
    end

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

У меня все.
Надеюсь, помог.
Не воспринимай воздействие с негативной стороны, и жизнь станет проще... :)
Администратор запретил публиковать записи.

[RMXP] -HtMaL(AG47)- (Test Name) 07.05.2013 17:30 #3774

  • Yin
  • Yin аватар
  • Вне сайта
  • Ценитель
  • И в тот день появилась она, чтобы поглотить его.
  • Сообщений: 394
  • Спасибо получено: 169
  • Репутация: 57
Я уже пробовала осуществлять сходную модель переключения между массивами, но это оказалось неработоспособным. Причина скорее всего кроется в этой части кода:

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


И кодом здесь:
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.05.2013 17:41 от Yin.
Администратор запретил публиковать записи.

[RMXP] -HtMaL(AG47)- (Test Name) 07.05.2013 17:45 #3775

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Разработчик
  • Мяяяяяяяяяяяяя!
  • Сообщений: 415
  • Спасибо получено: 127
  • Репутация: 82
Так мы же заменим "let = Input::Key.index(i)"
на "let = getActiveLangLetter(Input::Key.index(i))".

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

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

Например: '>' => 'Ю' '.' => 'ю'
Не воспринимай воздействие с негативной стороны, и жизнь станет проще... :)
Последнее редактирование: 07.05.2013 17:52 от Lekste.
Администратор запретил публиковать записи.
  • Страница:
  • 1
  • 2
  • 3
Время создания страницы: 0.191 секунд
сайт другаСветлая зона и Академия РПГ Мейкераkn4kn5Плагины для RPG MakerДневник одной нэкоknНовая Реальность Топ Разработка игр