Хорошо! Хорошо!:  0
Плохо! Плохо!:  0
Показано с 1 по 7 из 7

Тема: Advanced Message Window

  1. #1

    По умолчанию Advanced Message Window

    Advanced Message Window v1.0



    Предисловие:
    Данный скрипт, расширяющий доступные методы вывода сообщения в RPG Maker XP, как и все, что вышло из под моей клавиатуры, является сырым и некачественным, изобилующим глюками и недоработками. Однако, оные звери достаточно успешно прячутся от моего взора, а потому обо всех найденных экземплярах следует немедленно сообщать - буду истреблять.

    Описание:
    Данный скрипт представляет собой новый класс для вывода текстовых сообщений. Умеет показывать лица любых размеров, как из файла, так и из набора лиц, а так же выводить имя говорящего. Кроме того самостоятельно переносит не помещающиеся строки и оборудован прокруткой содержимого окна, так что в теории вы можете запихнуть в него текста на 65535 пикселей по высоте. Теоретически, потому что используется мой кривенький метод переноса из библиотеки EKLib, который все еще не научился быстро работать с большими объемами текста. Поэтому строго рекомендуется не выводить с помощью данного скрипта сообщения, длина которых превышает пять стандартных - будут заметные задержки. Ну, а если вы попытаетесь впихнуть сюда Войну и Мир, то игра благополучно закроется через десять секунд простоя. Кроме того, даже если в последствии скрипты будут модернизированы и задержки не будет, все же не рекомендуется собирать через чур длинные сообщения - это плохо скажется на динамичности игры.
    Теперь о грустном. Пока не реализована система замен и управления текстом (вернее, замены на каком то этапе, вдруг, перестали работать). А так же еще часть мелких, нужных в хозяйстве деталей. Все это обязательно появится, как только появится свободное время.

    Особенности:
    В следствии довольно сложных настроек данного скрипта, которых в будущем станет еще больше, пришлось написать отдельную программу, генерирующую код для вставки в Script... события. Программа не требует установки и проста в управлении. Умеет запоминать настройки, в неограниченном количестве, так что в целом использовать ее должно быть удобно. Любые предложения, как по скрипту, так и по проге будут рассмотрены и, возможно, реализованы (для особо внимательных: да, скриншоты от разных версий, но снимать заново было лень ^^).

    В следующих версиях планирую:
    • Исправить замену.
    • Доработать окно вывода имени.
    • Прикрутить методы управления текстом.


    Требования:
    • Наличие EKLib v2.1
    • Наличие EKLib Addon - Window Double v1.0

    Работоспособность с более поздними версиями не гарантируется.

    Установка:
    В редакторе скриптов:
    • Создайте чистую страницу над "Main" и скопируйте туда данный скрипт.
    • В классе Scene_Map, в начале метода main вставить строку:
      Код:
      $advance_message_window = Window_Dialogue_Advance.new
      В конце метода:
      Код:
      $advance_message_window.dispose
      Пример:
      Код:
      #----------------------------------------------------------------------------
        def main
          @spriteset = Spriteset_Map.new
          #-----
          $advance_message_window = Window_Dialogue_Advance.new
          #-----
          @message_window = Window_Message.new
          Graphics.transition
          loop do
            Graphics.update
            Input.update
            update
            if $scene != self
              break
            end
          end
          Graphics.freeze
          @spriteset.dispose
          #-----
          $advance_message_window.dispose
          #-----
          @message_window.dispose
          if $scene.is_a?(Scene_Title)
            Graphics.transition
            Graphics.freeze
          end
        end
      #----------------------------------------------------------------------------
    • В методе update, после цикла (loop):
      Код:
      $advance_message_window.update if $advance_message_window.visible
      Пример:
      Код:
      #----------------------------------------------------------------------------
        def update
          loop do
            $game_map.update
            $game_system.map_interpreter.update
            $game_player.update
            $game_system.update
            $game_screen.update
            unless $game_temp.player_transferring
              break
            end
            transfer_player
            if $game_temp.transition_processing
              break
            end
          end
          @spriteset.update
          #-----
          $advance_message_window.update if $advance_message_window.visible
          #-----
          @message_window.update
          if $game_temp.gameover
            $scene = Scene_Gameover.new
            return
          end
          if $game_temp.to_title
            $scene = Scene_Title.new
            return
          end
          if $game_temp.transition_processing
            $game_temp.transition_processing = false
            if $game_temp.transition_name == ""
              Graphics.transition(20)
            else
              Graphics.transition(40, "Graphics/Transitions/" +
                $game_temp.transition_name)
            end
          end
          if $game_temp.message_window_showing
            return
          end
          if $game_player.encounter_count == 0 and $game_map.encounter_list != []
            unless $game_system.map_interpreter.running? or
                   $game_system.encounter_disabled
              n = rand($game_map.encounter_list.size)
              troop_id = $game_map.encounter_list[n]
              if $data_troops[troop_id] != nil
                $game_temp.battle_calling = true
                $game_temp.battle_troop_id = troop_id
                $game_temp.battle_can_escape = true
                $game_temp.battle_can_lose = false
                $game_temp.battle_proc = nil
              end
            end
          end
          if Input.trigger?(Input::B)
            unless $game_system.map_interpreter.running? or
                   $game_system.menu_disabled
              $game_temp.menu_calling = true
              $game_temp.menu_beep = true
            end
          end
          if $DEBUG and Input.press?(Input::F9)
            $game_temp.debug_calling = true
          end
          unless $game_player.moving?
            if $game_temp.battle_calling
              call_battle
            elsif $game_temp.shop_calling
              call_shop
            elsif $game_temp.name_calling
              call_name
            elsif $game_temp.menu_calling
              call_menu
            elsif $game_temp.save_calling
              call_save
            elsif $game_temp.debug_calling
              call_debug
            end
          end
        end
      #----------------------------------------------------------------------------


    Настройка окна сообщений:
    В Script... события вставить следующий код (генерируется с помощью "Dialogue Builder.exe"):
    Код:
    $advance_message_window.set(ширина_окна, высота_окна, отступ_от_края, горизонтальное_положение, вертикальное_положение, высота_строк, непрозрачность_фона, массив_параметров_шрифта, имя_говорящего_или_индекс_персонажа, лицо_говорящего_или_индекс_в_пакете_лиц)
    (строго не рекомендуется вбивать руками)

    Вывод окна сообщений:
    В Script... события вставить следующий код (генерируется с помощью "Dialogue Builder.exe"):
    Код:
    $advance_message_window.open (массив_абзацев)
    (так же не рекомендуется вбивать руками)
    Внимание: В случае, если данное сообщение, идет в событии последним, что бы его закрытие не спровоцировало повторное обращение к событию, обязательно добавьте после вызова скрипта что-нибудь еще. К примеру, ожидание в течении одного кадра (wait 1).

    Связанные ссылки:
    Dialogue Bilder v1.3:

    Демоверсия:
    EKLib v2.1
    EKLib(Addons) - Double Window v.1.0

    Скрипт:
    Код:
    class Window_Dialogue_Advance < Window_Base
      #----------------------------------------------------------------------------
      attr_accessor :text
      #----------------------------------------------------------------------------
      def initialize
        super(20, 460 - 20, 600, 20)
        self.z = 9998
        self.back_opacity = 200
        @align = 1
        @v_align = 2
        @width = 600
        @height = 240
        @string_height = 2
        @font = Font.new
        @font.change (24, false, true, Color.new(255, 255, 255), ["Times New Roman", "Arial"])
        @name = ""
        @face = nil
        @number = nil
        @choice = nil
        @speaker_name = Window_Double.new(0, 0, 300, 32, 8, 4)
        @speaker_face = Sprite.new
        @speaker_name.visible = false
        @speaker_face.visible = false
        self.visible = false
        self.active = false
      end
      #----------------------------------------------------------------------------
      def dispose
        @speaker_name.dispose
        @speaker_face.dispose
        super
      end
      #----------------------------------------------------------------------------
      def set (width = 600, height = 240, space = 20, align = 1, v_align = 2,
        s_height = 20, back_opacity = 200,
        font = [24, false, true, Color.new(255, 255, 255), ["Times New Roman", "Arial"]],
        name = "", face = nil, number = nil, choice = nil)
        
        self.width = width                 # Ширина окна
        self.back_opacity = back_opacity   # Непрозрачность
        @align = align                     # Горизонтальное положение окна
        @v_align = v_align                 # Вертикальное положение окна
        @height = height                   # Высота окна
        @string_height = s_height          # Высота строк
        @font = Font.new                   # Шрифт
        @font.change (font[0], font[1], font[2], font[3], font[4])
        @number = number                   # Ввод номера
        @choice = choice                   # Выбор
        case @align                        # Горизонтальное положение окна
        when 0                             # Слева
          self.x = space
        when 1                             # Посередине
          self.x = 320 - self.width / 2
        when 2                             # Справа
          self.x = 640 - self.width - space
        end
        case @v_align                      # Вертикальное положение окна
        when 0                             # Сверху
          self.y = space
        when 1                             # Посередине
          self.y = 240 - @height / 2
        when 2                             # Снизу
          self.y = 480 - @height - space
        end
        if name.is_a?(Integer)             # Имя по неомеру
          @name = $game_actors[name].name
        elsif name.is_a?(String)
          @name = name                     # Имя по строке
        end
        if face.is_a?(Integer)             # Лицо из пакета лиц по номеру
          temp = []
          temp.push_image_fragments ("Graphics/Faces/faces.png", face, 100, 100)
          @face = temp[0]
        elsif face.is_a?(String)           # Лицо по названию файла
          @face = face != "" ? Bitmap.new("Graphics/Faces/" + face) : ""
        end
      end
      #----------------------------------------------------------------------------
      def open (text, hyphen = true)
        self.pause = true
        @text = text
        replace
        $game_temp.message_window_showing = true
        if hyphen
          new_y = self.y
          new_text = []
          temp = Bitmap.new(@width - 32, 460 - 32)
          temp.font = @font
          for string in @text
            hyphen_calc = temp.hyphen_draw_text (string, @width - 32, 0, 0, -1, true)
            new_y += hyphen_calc[1]
            for i in 0...hyphen_calc[0].size
              new_text.push(hyphen_calc[0][i])
            end
          end
          if @string_height < @font.size / 2 then @string_height = hyphen_calc[2] end
          @text = new_text
        end
        clear    
        draw_text
        self.visible = true
        while self.height < @height
          self.height += 10
          Graphics.update
        end
        if @name
          @speaker_name.contents.clear
          @speaker_name.contents.font = @font
          @speaker_name.width = @speaker_name.contents.text_size(@name).width + @speaker_name.x_space * 2
          @speaker_name.height = @speaker_name.contents.text_size(@name).height + @speaker_name.y_space * 2
          @speaker_name.x = @align != 2 ? self.x : self.x + self.width - @speaker_name.width
          @speaker_name.y = @v_align != 0 ? self.y - @speaker_name.height : self.y + self.height
          @speaker_name.back_opacity = self.back_opacity
          @speaker_name.contents.draw_text(0, 0, @speaker_name.contents.width, @speaker_name.contents.height, @name)
          @speaker_name.update
          @speaker_name.visible = true
        end
        if @face
          @speaker_face.bitmap = @face
    
    
          @speaker_face.x = @align != 2 ? self.x : self.x + self.width - @speaker_face.bitmap.width
          @speaker_face.mirror = @align != 2 ? false : true
          @speaker_face.y = @v_align != 0 ? self.y - @speaker_face.bitmap.height : self.y + self.height
          @speaker_face.y -= @speaker_name.height if @speaker_name.visible && @v_align != 0
          @speaker_face.y += @speaker_name.height if @speaker_name.visible && @v_align == 0
          @speaker_face.visible = true
        end
        self.active = true
        update
      end
      #----------------------------------------------------------------------------
      def close
        @speaker_name.visible = false
        @speaker_face.visible = false
        self.active = false
        self.pause = false
        y = self.y
        while self.height > 32
          self.height -= 10
          self.y += 10
          Graphics.update
        end
        self.visible = false
        self.y = y
        self.ox = 0
        self.oy = 0
        $game_temp.message_window_showing = false
      end
      #----------------------------------------------------------------------------
      def replace
        for string in @text
          string.gsub!(/\\[Nn]\[([0-9]+)\]/) do
            $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
          end
          string.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
          string.gsub!(/\\[Ee]\[([0-9]+)\]/) do
            $data_enemies[$1.to_i] != nil ? $data_enemies[$1.to_i].name : ""
          end
          string.gsub!(/\\[Qq]\[([0-9]+)\]/) do
            $data_classes[$data_actors[$1.to_i].class_id] != nil ?
            $data_classes[$data_actors[$1.to_i].class_id].name : ""
          end
          string.gsub!(/\\[Uu]/) do
            $game_map.name != nil ? $game_map.name : ""
          end
        end
      end
      #----------------------------------------------------------------------------
      def clear
        @text.delete("\260")
        @text.delete("\n")
      end
      #----------------------------------------------------------------------------
      def draw_text
        self.contents = Bitmap.new(self.width - 32,  @string_height * @text.size)
        self.contents.font = @font
        for i in 0...@text.size
          if @string_height < (@font.size.to_f / 1.2).to_f
            @string_height = self.contents.text_size(@text[i]).height
          end
          self.contents.draw_text (0, 0 + @string_height * i, 600, @string_height, @text[i])
        end
      end
      #----------------------------------------------------------------------------
      def update
        return unless $game_temp.message_window_showing
        loop do
          Graphics.update
          Input.update
          super
          if Input.trigger?(Input::C)
            close
            break
          elsif Input.repeat?(Input::DOWN)
            if self.oy < (@string_height * @text.size - self.height / 1.2)
              self.oy += @string_height
            end
          elsif Input.repeat?(Input::UP)
            if self.oy > 0
              self.oy -= @string_height
            end
          end
        end
      end
      #----------------------------------------------------------------------------
    end
    P.S.Прикрепленная "демоверсия", с которой были сняты скриншоты, являлась местом разработки скрипта, притензии по ней не принимаются(к примеру, невозможность войти в меню[исправлено]). Кстати, она является тем самым примером "как не надо делать", и показывает - что будет, если впихнуть слишком длинное сообщение.
    P.P.S. Со следующей версией скрипт переоформлю в своем традиционном стиле, с подробными комментариями, etc.
    P.P.P.S. Идеи, пожелания, багрепорты приветствуются.
    Последний раз редактировалось aisuuw; 09.04.2011 в 08:25.

  2. #2
    Хранитель Форума Аватар для Валера
    Информация о пользователе
    Регистрация
    15.04.2008
    Адрес
    Москва
    Сообщений
    14,020
    Записей в дневнике
    3
    Репутация: 165 Добавить или отнять репутацию

    По умолчанию

    Ты хочешь новых идей? Этого у меня будет сколько тебе угодно. И всегда обращайся прямо ко мне, потому что для меня литературная часть всегда очень важна.
    Я так полагаю, что новые идеи делятся на две группы: вариации стандарта и что-то совсем новое? Хорошо.

    По первому:
    1. Прокрутка текста в стандартном окне ( 3-4 строки). Может быть это альтернатива прокрутки сразу большого участка текста?
    2. Использование двух разных ( и более ) шрифтов в одном сообщении.
    3. Автоматическая прокрутка текста - с регуляторами. Так лучше подавать сообщения инфо-устройств.
    4. "Масштабирование" - рамка автоматически принимает размер периметра вокруг любого текста. Если текст больше экрана, рамка опускается за экран.

    По второму:
    1. Конечно, это для эстетов, но многие хотеле бы особенно в заставке игры пустить текст как в начале "Звездных войн" - "Однажды, в одной далекой, далекой галлактике..." Наверное видел? Я сделал это сам путем манипуляций с картинкой, но... все же это не то.
    2. "Всплывание текста" - текст из прозрачного состояние делается читаемым, потом - так же исчезает. Такую вещь можно использовать и как "чтение магических надписей" на стенах.
    3. "Волшебный текст" - тоже самое, только без первой фазы. Текст испаряется через несколько секунд.
    4. "Луч света" - текст читается как надпись на стене в темноте в луче от фонарика.
    5. Ввод слов и символов. Ввод слова ( англ. или русский ) как пароль и запоминание его в переменной ( если нет - где-то еще ). Ввод символов в том же качестве. В 2000 - 2003 можно выводить виндовские символы как текст. Хорошо бы хотя бы часть из них - луна, солнце и т.п. можно было использовать как вводимый пароль. Это могло бы использоваться и для составление алхимических зелий из ингридиентов и т.п. сборок.
    6. Запоминание какой-то части текста для последующего воспроизведения в дневниках, журналах и т.п. - по выбору игрока. Можно с ограничением.
    7. Вывод более одного фейса одновременно для общего разговора.
    8. Вывод анимированных фейсов - серий картинок с фиксацией в промежутках анимаций на новое задаваемое мурло.
    9. Смена фейса "наплывом" другого.

    Спойлер И как тебе не стыдно-то, а, Валера?:


    Оборона форта: http://rghost.ru/8kLGxFtD2
    Сделать, чтоб все происходило, как я хочу, - вот, собственно, и весь мейкер!
    Адский Рейд: http://rpgmaker.su/downloads/%D0%B7%...-2010raid-full

  3. #3
    Мастер Форума Аватар для Рольф
    Информация о пользователе
    Регистрация
    14.04.2008
    Адрес
    Южно- Сахалинск/Пенза
    Сообщений
    8,279
    Записей в дневнике
    2
    Репутация: 87 Добавить или отнять репутацию

    По умолчанию

    Валера все можно сделать, главное время.

  4. #4

    По умолчанию

    Валера
    1.1 По первому - не вижу смысла. Довольно сложно реализовать, т.к. нужно считывать блоки сообщений (ограничение в 4 строки никто не отменял). Но если нужно - можно попробовать.

    1.2 Реализуемо. На уровне строк будет работать быстро, но вызов образет еще одним блоком настроек. И все же для каждой строки или же для каждого абзаца можно задать любые варианты форматирования текста. А вот с выделением слов придется повозиться ввиду отсутствия исходников draw_text(Bitmap). Однако, я попробую, в этом случае будет нечто вроде bbcode'ов, которые будут считываться при рисовании. Теоретически, это не должно сильно ударить по производительности, но это только в теории...

    1.3 Реализовать можно, и, вроде бы, нужно, но встает вопрос реализации плавной прокрутки. А именно - как? Сейчас прокручиваются строки, и именно потому, что мне не удалось сделать быструю и плавную прокрутку. Есть идеи?

    1.4 Хм... а смысл? Тебе все равно придется как-то размещать текст... И у тебя не будет абсолютно никакого контроля над рамкой, сейчас же ты можешь построить любую рамку, какая тебе приглянется, и в нее вписать текст.

    2.1 Проблема с растягиванием и сжатием изображений - ее нет. Я пока не реализовал. Когда(если) сделаю - будем посмотреть.

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

    2.3 Аналогично + эффекты размытия... Идей пока нет, но реализовать возможно (вот только вначале неплохо бы написать сглаживание, а уж потом думать - как прикрутить сюда фотошоповские фильтры). Сложно, в общем.

    2.4 Честно говоря, не совсем осознал. Закрыть весь экран черным и выреазать в нем круглую дырку? Дырку можно перемещать? Так? Ну, тоже не очень сложно - можно сделать...

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

    2.6 Ммм... ох уж мне этот извращенный творческий ум... Можно, к сожалению... К сожалению, потому что реализовать это будет очень сложно. Поместить содержимое сообщения в массив еще можно, а вот выделить какой-то кусок, где-нибудь посередине... Можно, но я не уверен, что когда-нибудь за это возьмусь. Намного проще сделать что-нибудь альтернативное, к примеру стандартную авто-запись в дневнике или, как во вторых Демиургах - запоминать вообще все сказанное кем-бы то ни было. Даже поиск будет реализовать легче, чем сделать выделение текста в выводимых сообщениях...

    2.7 Аха! Бублик меня предупреждал! Не куплюсь! Ибо нефиг запихивать весь текст в одно сообщение! >_< Динамику на корню убьешь!

    2.8 Обязательно будет, как только я освоюсь с выводом анимации - самому надо. Вместе с посимвольным выводом сообщения будет так же реализована анимация открывания\закрывания рта говорящего.

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

    P.S. По этой - таки кто-нить поставил? Тестили? Баги-глюки есть?

  5. #5
    Хранитель Форума Аватар для Валера
    Информация о пользователе
    Регистрация
    15.04.2008
    Адрес
    Москва
    Сообщений
    14,020
    Записей в дневнике
    3
    Репутация: 165 Добавить или отнять репутацию

    По умолчанию

    Отвечаю по тем, где есть прямой вопрос.

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

    Подумаю - еще напишу.

    Спойлер И как тебе не стыдно-то, а, Валера?:


    Оборона форта: http://rghost.ru/8kLGxFtD2
    Сделать, чтоб все происходило, как я хочу, - вот, собственно, и весь мейкер!
    Адский Рейд: http://rpgmaker.su/downloads/%D0%B7%...-2010raid-full

  6. #6

    По умолчанию

    1.3 Если само будет отстукивать по целым строкам - будет некрасиво. Надо покумекать и таки сотворить нормальную прокрутку...

    1.4 Все что тебе нужно - выставить параметры окна в программке и, если больше ничего менять не нужно, можно использовать их хоть для всех диалогов. А вот если менять нужно - лицо, имя, и т.п. то каким бы образом не делалось, тебе все равно придется указать эти самые лицо и имя. Если билдер смотрел, то там можно сохранять настройки для каждого отдельного случая\персонажа. Что касается рамки... я просто не понимаю - зачем... Тобишь настройки все те же, все равно их придется делать, просто теперь ты будешь указывать только x,y начала текста и сам текст. Далее, ты сам будешь разбивать этот текст на строки, что бы эта самая рамка не улетела за пределы экрана...

    О! Замечательный пример: посмотри тег code здесь, на нейтральном, и посмотри на Светлом. Мой вариант можно сопоставить со здешним - строго отведенной пространство на странице, в котором помещается содержимое, если нужно - с прокруткой. А твой вариант - на Светлом, где нет ограничений на ширину рамки кода и она растягивается по содержимому текста. И поскольку вчера я как раз провозился с этим, размещая скрипт, я в упор не понимаю - зачем это надо...

    В общем, по четвертому пункту с тебя подробное описание того, как будет вызываться окно, откуда оно будет вызываться и с какими параметрами. А то сдается мне, что то, на что ты расчитываешь не реализуемо по причине отсутствия у мукера ИИ. ^_-
    Последний раз редактировалось Equilibrium Keeper; 06.01.2009 в 22:24.

  7. #7
    Хранитель Форума Аватар для Валера
    Информация о пользователе
    Регистрация
    15.04.2008
    Адрес
    Москва
    Сообщений
    14,020
    Записей в дневнике
    3
    Репутация: 165 Добавить или отнять репутацию

    По умолчанию

    1.3 - нормальная прокрутка... Я вижу что-то типа плоского экрана или участка экрана, или увеличившегося участка экрана - по тыку игрока или по автомату - раскрывается окно и там снизу вверх ползет сообшение. Для верности - оно зациклено, пока игрок нормально не прочитает и не выключит выделение. Все это - типа ЖК-дисплея. Это уже специально созданный под игру дисплей, а нужно - только некое окошко с задаваемыми размерами, где будет ползти текст. Тоже - с задаваемой скоростью. Вот как бы это выглядело.
    1.4 Собственно верно - подбирать окно минимальное для каждого текста - это уже ИИ повидимому... Даже не обязательно окно - а обтекание, как в комиксах - но там это рисуется от руки. Понимаю, что сам мейкер не отследит размер текста. А жаль. Тогда надо или к каждому сообщению выписывать свой размер или сделать несколько стандартов - чтобы каким-то простым числом задавать уже известную рамку.
    2.10 - еще вариант на засыпку: если сообщения "в эмоциях", то было бы хорошо, чтобы смена говорящего была заметней... Эмоция "перелетает" от одного говорящего к другому и оформляется в его реплику. Пусть не сама старая эмоция, а нечто похожее - не важно. Зато так визуально сразу понятно к кому перешло "говорение". Это хорошо, когда перед игроком толпа и говорят по-малу, но быстро.

    Спойлер И как тебе не стыдно-то, а, Валера?:


    Оборона форта: http://rghost.ru/8kLGxFtD2
    Сделать, чтоб все происходило, как я хочу, - вот, собственно, и весь мейкер!
    Адский Рейд: http://rpgmaker.su/downloads/%D0%B7%...-2010raid-full

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •