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 МБ)
Ядиск
Благодарности:
Всем! =)
Социальные закладки