Плохо! Плохо!:  0
Показано с 1 по 8 из 8

Тема: Измененные и расширенные возможности Window_Scroll

  1. #1

    По умолчанию Измененные и расширенные возможности Window_Scroll

    NEW_Window_ScrollText

    Автор: Lipton
    Версия скрипта: 1.0
    Версия мейкера: VX Ace
    Тип: Измененные и расширенные возможности Window_ScrollText
    Условия использования/Лицензия: Разрешаю использовать везде.

    Описание:
    Изменяет свойства Window_ScrollText. Позволяет на его основе сделать прокручиваемое вверх-вниз окошко.

    Особенности:
    Позволяет задать координату нахождения окошка, ширину, высоту, скорость прокрутки, скорость ускоренной прокрутки и прозрачность окошка (не текста!).
    Так же сделан перенос слов, если предложение больше окна.

    Спойлер Код:
    Код:
    #==============================================================================
    # NEW_Window_ScrollText
    # From: Lipton
    # Версия 1.0
    #
    # ** Изменяем работу с Window_ScrollText
    # редактируется полностью класс Window_ScrollText
    #------------------------------------------------------------------------------
    # Возможность создавать окошки текста с прокруткой и авто форматированием по 
    # ширине окна.
    # 
    # новые доступные тэги
    # \x[100] - координата "X" верхнего левого угла окна
    # \y[100] - координата "Y" верхнего левого угла окна
    # \w[240] - ширина окна
    # \h[400] - высота окна
    # \op[120] - прозрачность окна (именно окна. а не выводимого текста!)
    # \spd[0.5] - скорость прокрутки (число обязательно с точкой, 
    #             то есть если вы хотите поставить скорость равную единице то нужно 
    #             писать \\spd[1.0]!)
    # \sspd[4.0] - скорость ускоренной прокрутки (Когда зажат Enter или Shift и 
    #               так же число должно быть с точкой!)
    # А так же:
    #
    # Если в окошке Show Scrolling Text поставить галку на No Fast Forward,
    # то работать это будет так.
    # Вы сможете прокручивать текст вверх вниз. Конечно при условии что текст 
    # больше окна по высоте.
    # Прокручивать текст соответственно стрелками вверх-вниз.
    # Если зажать при этом Shift то будет ускоренная прокрутка.
    # Ну и выход по нажатию Enter
    #
    # Если включить переключатель, номер которого указан в скрипте
    # WINDOWS_VARIABLE_ON = 19
    # то скрипт будет брать координаты окна, ширину и высоту из переменных 
    # так же указанных в скрипте.
    # WINODW_X = номер переменной хранящей координату "X" окна
    # WINDOW_Y = номер переменной хранящей координату "Y" окна
    # WINDOW_WIDTH = номер переменной хранящей ширину окна
    # WINDOW_HEIGHT = номер переменной хранящей высоту окна
    # игнорируя тэги внутри текста.
    # Но теги на скорость и прозрачность по-прежнему будут работать!
    #
    # 
    # ВНИМАНИЕ! Если слово больше окна, то точно вылезет за пределы.
    #
    #==============================================================================
    # Разрешаю использовать где угодно. =)
    #
    #
    #==============================================================================
    module NEW_Window_ScrollText
      # WINDOWS_VARIABLE_ON = номер переключателя включающего работу окон от
      # переменных
      WINDOWS_VARIABLE_ON = 19
      
      # WINODW_X = номер переменной хранящей координату "X" окна
      # WINDOW_Y = номер переменной хранящей координату "Y" окна
      # WINDOW_WIDTH = номер переменной хранящей ширину окна
      # WINDOW_HEIGHT = номер переменной хранящей высоту окна
    
      WINDOW_X = 11
      WINDOW_Y = 12
      WINDOW_WIDTH = 13
      WINDOW_HEIGHT = 14
      
    end
    class Window_ScrollText < Window_Base
      #--------------------------------------------------------------------------
      # * Object Initialization
      #--------------------------------------------------------------------------
      def initialize
        super(0, 0, Graphics.width, Graphics.height)
        self.opacity = 0 #if !$game_message.scroll_no_fast
        self.arrows_visible = true
        @text_speed=0.5
        @text_shift_speed=1.0
        hide
      end
      #--------------------------------------------------------------------------
      # * Frame Update
      #--------------------------------------------------------------------------
      def update
        super
        if $game_message.scroll_mode
          update_message if @text
          start_message if !@text && $game_message.has_text?
        end
      end
      #--------------------------------------------------------------------------
      # * Start Message
      #--------------------------------------------------------------------------
      def start_message
        draw_text_ex(1, 1, $game_message.texts[0])
        if $game_switches[NEW_Window_ScrollText::WINDOWS_VARIABLE_ON]
          self.x = $game_variables[NEW_Window_ScrollText::WINDOW_X]
          self.y = $game_variables[NEW_Window_ScrollText::WINDOW_Y]
          self.width = $game_variables[NEW_Window_ScrollText::WINDOW_WIDTH]
          self.height = $game_variables[NEW_Window_ScrollText::WINDOW_HEIGHT]
        end
        @text = $game_message.all_text_new(self.width)
        @max_height=(($game_message.line_number*Font.default_size)- height+(Font.default_size/2)).to_i
        self.opacity = 255 if $game_message.scroll_no_fast
        self.opacity = 0 if !$game_message.scroll_no_fast
        self.arrows_visible = true if $game_message.scroll_no_fast
        self.arrows_visible = false if !$game_message.scroll_no_fast
        refresh
        show
      end
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
        reset_font_settings
        update_all_text_height
        create_contents
        draw_text_ex(4, 0, @text)
        self.oy = @scroll_pos = -height
        self.oy = @scroll_pos = 0 if $game_message.scroll_no_fast
      end
      #--------------------------------------------------------------------------
      # * Update Height Needed to Draw All Text
      #--------------------------------------------------------------------------
      def update_all_text_height
        @all_text_height = 1
        convert_escape_characters(@text).each_line do |line|
          @all_text_height += calc_line_height(line, false)
        end
        reset_font_settings
      end
      #--------------------------------------------------------------------------
      # * Calculate Height of Window Contents
      #--------------------------------------------------------------------------
      def contents_height
        @all_text_height ? @all_text_height : super
      end
      #--------------------------------------------------------------------------
      # * Update Message
      #--------------------------------------------------------------------------
      def update_message
        if !$game_message.scroll_no_fast
          @scroll_pos += scroll_speed 
        else
          @scroll_pos += scroll_speed if Input.press?(:DOWN)
          @scroll_pos -= scroll_speed if Input.press?(:UP)
          @scroll_pos = 0 if @scroll_pos <0
          @scroll_pos = @max_height if @scroll_pos > @max_height
        end
        self.oy = @scroll_pos
        terminate_message if @scroll_pos >= contents.height
        terminate_message if $game_message.scroll_no_fast && Input.trigger?(:C) #(Input.trigger?(:A) ||
      end
      #--------------------------------------------------------------------------
      # * Get Scroll Speed
      #--------------------------------------------------------------------------
      def scroll_speed
        if !$game_message.scroll_no_fast
          $game_message.scroll_speed * (show_fast? ? @text_shift_speed : @text_speed) #1.0 0.5
        else
          $game_message.scroll_speed * (Input.press?(:SHIFT) ? @text_shift_speed : @text_speed) #if $game_message.scroll_no_fast
        end
      end
      #--------------------------------------------------------------------------
      # * Determine if Fast Forward
      #--------------------------------------------------------------------------
      def show_fast?
        !$game_message.scroll_no_fast && (Input.press?(:A) || Input.press?(:C))
      end
      #--------------------------------------------------------------------------
      # * End Message
      #--------------------------------------------------------------------------
      def terminate_message
        @text = nil
        $game_message.clear
        hide
        self.x = 0
        self.y = 0
        self.width = Graphics.width
        self.height = Graphics.height
        @text_speed=0.5
        @text_shift_speed=1.0
      end
      
      def process_escape_character(code, text, pos)
        case code.upcase
        when 'X'
          self.x=(obtain_escape_param(text))
        when 'Y'
          self.y=(obtain_escape_param(text))
        when 'W'
          self.width=(obtain_escape_param(text))
        when 'H'
          self.height=(obtain_escape_param(text))
        when 'SPD'
          @text_speed=obtain_escape_param_f(text)
        when 'SSPD'
          @text_shift_speed=obtain_escape_param_f(text)
        when 'OP'
          self.opacity = (obtain_escape_param(text))
        else
          super
        end
        if $game_switches[NEW_Window_ScrollText::WINDOWS_VARIABLE_ON]
          self.x = $game_variables[NEW_Window_ScrollText::WINDOW_X]
          self.y = $game_variables[NEW_Window_ScrollText::WINDOW_Y]
          self.width = $game_variables[NEW_Window_ScrollText::WINDOW_WIDTH]
          self.height = $game_variables[NEW_Window_ScrollText::WINDOW_HEIGHT]
        end
      end
      
      def obtain_escape_param_f(text) 
        a=text.slice!(/^\[\d+(\.\d+)\]/) [/\d+(\.\d+)/].to_f rescue 0
        a=10 if a>10
        a
      end
      
    end
    class Game_Message
      attr_reader   :line_number                  # кол-во линий текста
      alias clear_new_text clear
      def clear
        clear_new_text
        @line_number = 1
      end
      
      def all_text_new(new_width=Graphics.width)
        test = Bitmap.new(1,1)
        r=""
        @texts.each {|text|
          s=test.text_size(text).width
          if s>new_width-32
            string=""
            word=""
            delta=""
            text.scan(/./) {|symb|
              word +=symb
              if symb == " "
                delta = string + word
                a=test.text_size(delta).width
                delta = ""
                if a > new_width-32
                  r += string + "\n"
                  @line_number+=1
                  string =""
                end
                string += word
                word=""
              end
            }
            delta = string + word
            a=test.text_size(delta).width
            if a > new_width-32
              string += "\n" + word
            else
              string += word
            end
            r += string + "\n"
          else
            r += text + "\n"
          end
          @line_number+=1
        }
        test.dispose
        r
      end
    end


    Спойлер Скриншот:




    Скачать демо:

    Архив ZIP (1,32 МБ)
    Ядиск

    Благодарности:
    Всем! =)

  2. #2
    Маститый Аватар для Seibur
    Информация о пользователе
    Регистрация
    07.01.2012
    Адрес
    Изумрудный город
    Сообщений
    1,206
    Записей в дневнике
    3
    Репутация: 58 Добавить или отнять репутацию

    По умолчанию

    А возможность вставлять картинку в окно можно добавить?)
    Последний раз редактировалось Пётр; 12.08.2015 в 21:03. Причина: Так сложно под спойлер прятать, да?
    Прохлада и спокойствие мне вполне по душе

    Спойлер :

    き っ と 、 女 の 子 は お 砂 糖 と ス パ イ ス と 素 敵 な 何 か で で き て い る。

  3. #3

    По умолчанию

    Картинку в каком виде? Как фон или как изображение между строками текста?
    В принципе думаю да, нужно покопаться. =)

  4. #4
    Хранитель Аватар для Paranoid
    Информация о пользователе
    Регистрация
    22.12.2014
    Сообщений
    2,776
    Записей в дневнике
    34
    Репутация: 28 Добавить или отнять репутацию

    По умолчанию

    Божественный скрипт, обязательно утащу себе!
    Лицензионный VX Ace. Спасибо Петр.
    2 года мукеризма в пустую.

  5. #5
    Маститый Аватар для Seibur
    Информация о пользователе
    Регистрация
    07.01.2012
    Адрес
    Изумрудный город
    Сообщений
    1,206
    Записей в дневнике
    3
    Репутация: 58 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Lipton Посмотреть сообщение
    Картинку в каком виде? Как фон или как изображение между строками текста?
    В принципе думаю да, нужно покопаться. =)
    как изображение между строками текста) Было бы круто если бы выводилась в своем окошке внутри предыдущего. Аккуратно и красиво.
    Прохлада и спокойствие мне вполне по душе

    Спойлер :

    き っ と 、 女 の 子 は お 砂 糖 と ス パ イ ス と 素 敵 な 何 か で で き て い る。

  6. #6
    Маститый Аватар для HopeBree
    Информация о пользователе
    Регистрация
    27.03.2013
    Сообщений
    1,204
    Записей в дневнике
    6
    Репутация: 38 Добавить или отнять репутацию

    По умолчанию

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

  7. #7
    Маститый Аватар для Seibur
    Информация о пользователе
    Регистрация
    07.01.2012
    Адрес
    Изумрудный город
    Сообщений
    1,206
    Записей в дневнике
    3
    Репутация: 58 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от HopeBree Посмотреть сообщение
    по той причине, что с телефона демку глянуть Не могу, но как я понял выдает текст как команда скрол текст, если это оно и есть то туда должен лечь скрипт от янфлая на сообщения, если не то, то прикрути поддержку скрипта от него и весь геммор с этими картинками и другими функциями отпадает сразу же
    У янфлая вроде есть такие возможности уже..
    Прохлада и спокойствие мне вполне по душе

    Спойлер :

    き っ と 、 女 の 子 は お 砂 糖 と ス パ イ ス と 素 敵 な 何 か で で き て い る。

  8. #8
    Маститый Аватар для HopeBree
    Информация о пользователе
    Регистрация
    27.03.2013
    Сообщений
    1,204
    Записей в дневнике
    6
    Репутация: 38 Добавить или отнять репутацию

    По умолчанию

    а все, правильно понял, воткнуть вместе с ним скрипт от янфлая, проблема решена.
    проверил, работает как кремлевские часы

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

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

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

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

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

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

Ваши права

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