UltimaForum

Skrypty [VX] - Advanced Load Bar

Domilos - Pon 25 Cze, 2012 16:26
Temat postu: Advanced Load Bar
~ Advanced Load Bar ~


Krótki opis:
Skrypt wyświetla pasek ładowania podczas zapisywania i wczytywania gry. Można go także użyć do innych celów, takich jak np. zmiana mapy.

Autor:
Moghunter http://www.atelier-rgss.com

Tłumaczenie:
Domilos (mogą być jakieś błędy, gdyż tłumaczyłem z portugalskiego)

Skrypt:
Spoiler:

Kod:
#===============================================================================
# +++ MOG - Advanced Load Bar VX (v1.0) +++
#===============================================================================
# By Moghunter
# Tłumaczenie: Domilos
# http://www.atelier-rgss.com 
#===============================================================================
# Skrypt wyświetla pasek ładowania podczas zapisywania i wczytywania gry.
#
#===============================================================================
# Możesz użyć tego skryptu w inny sposób, jak np. przejście na inną mapę.
# Wystarczy wpisać to, w polecenie "Script":
#
# $scene = Scene_Load_Bar.new
#===============================================================================
module MOG_LOAD_BAR
   # Czas ładowania (sekundy).
   LOAD_DURATION = 3
   # Pokazywać ładowanie podczas wczytywania gry?
   ENABLE_LOAD_BAR_FOR_SCENE_LOAD = true
   # Pokazywać ładowanie podczas zapisywania gry?
   ENABLE_LOAD_BAR_FOR_SCENE_SAVE = true   
   # Nazwy obrazków, które będą służyły jako tło.
   LOAD_BACKGROUND_PICTURES = [
   ""
   # Wszystkie nazwy obrazków, oprócz ostatniego, muszą mieć przecinek po cudzysłowie.
   ]
   # Pokazywać obrazki losowo?
   PICTURE_RANDOM_SELECTION = true   
   # Pozycja generalnego paska.
   LOAD_BAR_POSITION = [30,350]
   # Pozycja kolorowego paska ładowania(?).
   LOAD_BAR_METER_POSITION = [11,27]
   # Pozycja tekstu.
   LOAD_BAR_TEXT_POSITION = [ 10, -3]
   # Dźwięk, jaki zostanie wydany po zakończeniu ładowania.
   LOAD_SE = "Decision2"
   # Szybkość animacji.
   LOAD_BAR_FLOW_SPEED = 25
   # Ustawienia, które nastąpią w menu po zapisaniu.
   # Jeśli zapis jest wykonywany przez zdarzenie, nastąpi powrót do mapy.
   RETURN_TO_SCENE = Scene_Menu.new(4)
   # Lewitujący tekst?
   ENABLE_FLOAT_TEXT_ANIMATION = true
   # Wyświetlić sprite bohatera?
   ENABLE_CHARACTER_SPRITE = true
   # Pokazać boczne paski?
   ENABLE_STRIPE_SPRITE = true
   # Prędkość pasków.
   STRIPE_SPEED = 1
end

#=============================================================================
# ■ Game_Temp
#=============================================================================
class Game_Temp
  attr_accessor :load_bar_pre_index
  attr_accessor :save_calling_load_bar
  attr_accessor :load_pre_bgm
  attr_accessor :load_pre_bgs
 
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------             
 alias load_bar_initialize initialize
 def initialize
     load_bar_initialize
     @load_bar_pre_index = -1
     @save_calling_load_bar = false
 end
   
end

#=============================================================================
# ■ Game_System
#=============================================================================
class Game_System
  attr_accessor :load_bar_pre_index
 
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------             
 alias load_bar_initialize initialize
 def initialize
     load_bar_initialize
     @load_bar_pre_index = 0
 end
 
 #--------------------------------------------------------------------------
 # ● BGS Stop
 #--------------------------------------------------------------------------             
 def bgs_stop
     Audio.bgs_stop
 end
end

#=============================================================================
# ■ Scene Load Bar
#=============================================================================
class Scene_Load_Bar
 include MOG_LOAD_BAR
 
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------           
 def initialize(type = 0) 
     @bar_type = type
     @load_duration_max = 60 * LOAD_DURATION
     @load_duration_max = 60 if @load_duration_max < 60 
     @load_duration = 0
     @pictures = LOAD_BACKGROUND_PICTURES
     create_background
     create_layout 
     create_load_bar
     create_text
     create_side_strip
 end
   
 #--------------------------------------------------------------------------
 # &#9679; Create Background
 #--------------------------------------------------------------------------           
 def create_background 
     @background = Sprite.new
     if PICTURE_RANDOM_SELECTION
        $game_system.load_bar_pre_index = rand(@pictures.size)
        no_repeat_picture
     end
     image_name = @pictures[$game_system.load_bar_pre_index]   
     image_name = "" if image_name == nil     
     @background.bitmap = Cache.picture(image_name)
     $game_temp.load_bar_pre_index = $game_system.load_bar_pre_index
     unless PICTURE_RANDOM_SELECTION
        $game_system.load_bar_pre_index += 1
        $game_system.load_bar_pre_index = 0 if $game_system.load_bar_pre_index > @pictures.size - 1
     end   
 end
   
 #--------------------------------------------------------------------------
 # &#9679; No Repeat Picture
 #--------------------------------------------------------------------------           
 def no_repeat_picture
     if $game_system.load_bar_pre_index == $game_temp.load_bar_pre_index
        $game_system.load_bar_pre_index += 1
        $game_system.load_bar_pre_index = 0 if $game_system.load_bar_pre_index > @pictures.size - 1
     end 
 end
 
 #--------------------------------------------------------------------------
 # &#9679; Create Layout
 #--------------------------------------------------------------------------           
 def create_layout 
     @hud = Sprite.new
     @hud.bitmap = Cache.system("Load_Bar_Layout")
     @hud.x = LOAD_BAR_POSITION[0]
     @hud.y = LOAD_BAR_POSITION[1]
     @hud.z = 10
 end
 
 #--------------------------------------------------------------------------
 # &#9679; Create Layout
 #--------------------------------------------------------------------------           
 def create_side_strip
     if @bar_type == 0
        image_name_1 = "Load_Bar_Stripe1_L"
        image_name_2 = "Load_Bar_Stripe2_L"
     else 
        image_name_1 = "Load_Bar_Stripe1_S"
        image_name_2 = "Load_Bar_Stripe2_S"
     end 
     @stripe1 = Plane.new
     @stripe1.bitmap = Cache.system(image_name_1)
     @stripe1.z = 1
     @stripe2 = Plane.new
     @stripe2.bitmap = Cache.system(image_name_2)
     @stripe2.z = 1         
     @stripe1.visible = ENABLE_STRIPE_SPRITE
     @stripe2.visible = ENABLE_STRIPE_SPRITE
 end
 
 #--------------------------------------------------------------------------
 # &#9679; Create Load Bar
 #--------------------------------------------------------------------------           
 def create_load_bar
     @bar_flow = 0
     @bar_image = Cache.system("Load_Bar_Meter")
     @bar_bitmap = Bitmap.new(@bar_image.width,@bar_image.height)
     @bar_range = @bar_image.width / 3
     @bar_width = @bar_range  * @load_duration / @load_duration_max
     @bar_height = @bar_image.height
     @bar_width_old = @bar_width
     @bar_src_rect = Rect.new(@bar_flow, 0, @bar_width, @bar_height)
     @bar_bitmap.blt(0,0, @bar_image, @bar_src_rect)
     @bar_sprite = Sprite.new
     @bar_sprite.bitmap = @bar_bitmap
     @bar_sprite.z = 11
     @bar_sprite.x = LOAD_BAR_POSITION[0] + LOAD_BAR_METER_POSITION[0]
     @bar_sprite.y = LOAD_BAR_POSITION[1] + LOAD_BAR_METER_POSITION[1]
     update_bar_flow
 end
 
 #--------------------------------------------------------------------------
 # &#9679; Create Text
 #--------------------------------------------------------------------------           
 def create_text
     @text_float_time = 0
     @text_float_y = 0
     @text_image = Cache.system("Load_Bar_Text")
     @text_bitmap = Bitmap.new(@text_image.width,@text_image.height)
     @text_width = @text_image.width
     @text_height = @text_image.height / 2
     @text_src_rect = Rect.new(0, @text_height * @bar_type, @text_width, @text_height)
     @text_bitmap.blt(0,0, @text_image, @text_src_rect)   
     @text_sprite = Sprite.new
     @text_sprite.bitmap = @text_bitmap   
     @text_fy = LOAD_BAR_POSITION[1] + LOAD_BAR_TEXT_POSITION[1]
     @text_sprite.x = LOAD_BAR_POSITION[0] + LOAD_BAR_TEXT_POSITION[0]
     @text_sprite.y = @text_fy
     @text_sprite.z = 12
 end
 
 #--------------------------------------------------------------------------
 # &#9679; Main
 #--------------------------------------------------------------------------         
 def main
     Graphics.transition
     execute_loop
     execute_dispose
 end   
 
 #--------------------------------------------------------------------------
 # &#9679; Execute Loop
 #--------------------------------------------------------------------------           
 def execute_loop
     loop do
         Graphics.update
         update
         if $scene != self
            break
         end
     end 
  end
 
 #--------------------------------------------------------------------------
 # &#9679; Execute Dispose
 #--------------------------------------------------------------------------           
 def execute_dispose
     @hud.bitmap.dispose
     @hud.dispose
     @stripe1.bitmap.dispose
     @stripe1.dispose     
     @stripe2.bitmap.dispose
     @stripe2.dispose       
     @bar_image.dispose
     @bar_bitmap.dispose
     @bar_sprite.bitmap.dispose
     @bar_sprite.dispose     
     @background.bitmap.dispose
     @background.dispose
     @text_image.dispose
     @text_bitmap.dispose
     @text_sprite.bitmap.dispose
     @text_sprite.dispose
     Graphics.transition
     Graphics.freeze
 end 
 
 #--------------------------------------------------------------------------
 # &#9679; Update
 #--------------------------------------------------------------------------             
 def update
     update_bar_flow
     update_bar_duration
     update_float_text
     update_slide_stripe
 end
 
 #--------------------------------------------------------------------------
 # &#9679; Update Slide Stripe
 #--------------------------------------------------------------------------             
 def update_slide_stripe
     @stripe1.oy += STRIPE_SPEED
     @stripe2.ox += STRIPE_SPEED
 end   
   
 #--------------------------------------------------------------------------
 # &#9679; update_float_text
 #--------------------------------------------------------------------------             
 def update_float_text
     return unless ENABLE_FLOAT_TEXT_ANIMATION
     @text_float_time += 1
     case @text_float_time
        when 1..10
           @text_float_y += 1
        when 11..20
           @text_float_y -= 1
        else
          @text_float_y = 0
          @text_float_time = 0
     end
     @text_sprite.y = @text_fy + @text_float_y
 end
 
 #--------------------------------------------------------------------------
 # &#9679; Update Bar Flow
 #--------------------------------------------------------------------------           
 def update_bar_flow
     @bar_sprite.bitmap.clear
     @bar_width = @bar_range  * @load_duration / @load_duration_max
     @bar_width = @bar_range if @load_duration > @load_duration_max
     @bar_src_rect = Rect.new(@bar_flow, 0,@bar_width, @bar_height)
     @bar_bitmap.blt(0,0, @bar_image, @bar_src_rect)
     @bar_flow += LOAD_BAR_FLOW_SPEED
     if @bar_flow >= @bar_image.width - @bar_range
        @bar_flow = 0     
     end
 end   
   
 #--------------------------------------------------------------------------
 # &#9679; Update Bar Duration
 #--------------------------------------------------------------------------             
 def update_bar_duration
     @load_duration += 1
     if @load_duration == @load_duration_max
        Audio.se_play("Audio/SE/" + LOAD_SE,100,100) rescue nil
     elsif @load_duration == @load_duration_max + 10
        if @bar_type == 0 or $game_temp.save_calling_load_bar
           if @bar_type == 0
              $game_temp.load_pre_bgm.play
              $game_temp.load_pre_bgs.play     
           end
           $scene = Scene_Map.new
        else   
           $scene = MOG_LOAD_BAR::RETURN_TO_SCENE
        end 
        $game_temp.save_calling_load_bar = false
     end
 end 
 
end

#=============================================================================
# &#9632; Game_Temp
#=============================================================================
class Scene_File < Scene_Base
 
  #--------------------------------------------------------------------------
  # * Return to Original Screen
  #--------------------------------------------------------------------------
  alias mog_adv_load_bar_return_scene return_scene
  def return_scene
      mog_adv_load_bar_return_scene
      $game_temp.save_calling_load_bar = true if @from_event
      $scene = Scene_Load_Bar.new(1)
  end
 
  #--------------------------------------------------------------------------
  # * Execute Load
  #--------------------------------------------------------------------------
  def do_load   
      file = File.open(@savefile_windows[@index].filename, "rb")
      read_save_data(file)
      file.close
      $scene = Scene_Load_Bar.new(0)
      RPG::BGM.fade(1500)
      RPG::BGS.fade(1500)
      $game_temp.load_pre_bgm = @last_bgm
      $game_temp.load_pre_bgs = @last_bgs
  end
end 

$mog_vx_advanced_load_bar = true


Dodatkowe informacje:
Tła umieszczamy w folderze Pictures.

Te obrazki w folderze System:
Spoiler:



loadbarlayout.png

loadbarmeter.png

loadbarstripe1l.png

loadbarstripe1s.png

loadbarstripe2l.png

loadbarstripe2s.png

loadbartext.png



Nie dałem screen'a, gdyż jest to animowane. Zamiast tego macie krótki filmik. Co prawda jest on do wersji na XP, ale wszystko jest takie same.

http://www.youtube.com/wa...d&v=mZ_r0xH-tTg


PS. Nie wiem czemu, ale wyświetlanie chara bohatera nie działa.

kolkav5 - Pon 25 Cze, 2012 17:18

Nie wiem, czy takie przydatne.
Może daje efekt ciekawy, ale wątpię by wszystkim chciało się czekać.
Dla mnie 6/10 nooo może 6.5/10. :lol:

Avara - Pon 25 Cze, 2012 19:20

kolkav5 napisał/a:
Nie wiem, czy takie przydatne.
Może daje efekt ciekawy, ale wątpię by wszystkim chciało się czekać.
Dla mnie 6/10 nooo może 6.5/10. :lol:

Jak Ty coś powiesz... :kable: Właśnie o to chodzi, że i tak się czeka, a przyjemniejsze dla oka.
Spoko skrypt.

INRE - Wto 03 Lip, 2012 17:49

Avara napisał/a:

Jak Ty coś powiesz... :kable: Właśnie o to chodzi, że i tak się czeka, a przyjemniejsze dla oka.
Spoko skrypt.


Ale ile się wielce tak normalnie czeka? 1s, maks 2.
Dlatego bez sensu jest moim zdaniem ten skrypt, sztucznie przedłuża czas.

Avara - Wto 03 Lip, 2012 17:55

Różnie to bywa. Przy bardziej zaawansowanym projekcie czas wczytywania gry może być dłuższy (nawet kilkanaście sekund) i jak już mówiłam, jest to przyjemniejsze dla oka niż czarne tło ;-) Przy mniejszych projektach oczywiście ten skrypt jest zbędny ^^
INRE - Wto 03 Lip, 2012 18:03

Cóż... nie spotkałem się nigdy z tak długim wczytywaniem w RM
(nawet w dużych projektach), ale skoro twierdzisz, że tak nieraz bywa, to masz rację, że lepiej to wtedy wygląda niż czarne tło.

lolek - Wto 03 Lip, 2012 19:10

Osobiście wole widzieć pasek ładowania nawet, jeśli gra miałaby się ładować 2-3 sekundy. Wtedy wiem, że coś się dzieje i że to coś dzieje się bardzo szybko.
INRE - Wto 03 Lip, 2012 20:55

*Solo Lee*, ale chodzi o to, że skrypt ten wydłuża czas ładowania o kolejne sekundy, a normalnie bez skryptu to ładowanie jest praktycznie nieodczuwalne.
lolek - Wto 03 Lip, 2012 21:27

INRE napisał/a:
*Solo Lee*, ale chodzi o to, że skrypt ten wydłuża czas ładowania o kolejne sekundy, a normalnie bez skryptu to ładowanie jest praktycznie nieodczuwalne.


Wydłuża ładowanie gry!?! A po co?

Vrona - Czw 05 Lip, 2012 08:02

Cytat:
Może daje efekt ciekawy, ale wątpię by wszystkim chciało się czekać.


Niektórzy to mają problemy...2-3 sekundy to dla was tak długo :-| ?Przecież możecie sobie wtedy pójść wypić kakałko :kiti: Skrypt mi się podoba,wprowadza jakąś taką estetykę zapisu i wczytywania,nie tylko krótki dźwięk i przez chwilę czarny ekran.


Powered by phpBB modified by Przemo © 2003 phpBB Group