UltimaForum

Pomoc [VXAce] - Skrypt na title

Angius - Pon 02 Kwi, 2012 21:12
Temat postu: Skrypt na title
Czy ktoś ma/mógłby napisać skrypt na title? Chodzi mi o coś na prawdę podstawowego, tj. komendy graficzne "Nowa Gra", "Wczytaj", "Wyjdź" i cykliczne zmienianie obrazu tła między jakimiśtam trzema plikami. Komendy najlepiej tak, jak w menu, które miałem do VX-a - każda komenda byla osobną warstwą wymiarów całego okna, które zmieniały się razem ze zmianą opcji. Można było uzyskać tym fajne efekty, typu zamknięta i otwarta książka przy jakiejś opcji, czy jakiś napis na tej warstwie informujący nas, co dana opcja robi. Tak jak w tym skrypcie:
http://www.rpgrevolution....showtopic=42603

Ayene - Wto 03 Kwi, 2012 17:51

Cytat:
cykliczne zmienianie obrazu tła między jakimiśtam trzema plikami

Nie rozumiem... co ile ma się zmieniać?

Cytat:
każda komenda byla osobną warstwą wymiarów całego okna, które zmieniały się razem ze zmianą opcji

Tzn. obrazek np. New Game ma być to .png w wymiarach 544x416?

Angius - Wto 03 Kwi, 2012 17:53

Co X klatek powiedzmy, nie wiem, jaka prędkość będzie optymalna. Co zaś tyczy się komend, to tak, dokładnie o takie ich wymiary mi chodzi.
Ayene - Wto 03 Kwi, 2012 19:11

Zobacz, czy to Tobie odpowiada:
Spoiler:

Kod:
module AYE 
  # Obrazki teł - umieść je w folderze Graphics/Titles1
  TITLE_SPRITES = ["Book", "Castle"]
 
  # Obrazki komend - umieść je w folderze Graphics/Titles2
  COMMAND_SPRITES = ["Command_1", "Command_2", "Command_3"]
 
  SPRITE_CHANGE = 2 # przejście między obrazkami tła w sekundach   
 
  SMOOTH_CHANGE = true # płynne przejścia 
end

#==============================================================================
# ** Scene_Title
#==============================================================================
class Scene_Title < Scene_Base
  include AYE
  #--------------------------------------------------------------------------
  # * Start
  #--------------------------------------------------------------------------
  alias aye_custtit_sctit_start start
  def start
    @frame = 0
    @sprite_index = 0
    aye_custtit_sctit_start
    create_command_sprites
  end 
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  alias aye_custtit_sctit_crcomwin create_command_window
  def create_command_window
    aye_custtit_sctit_crcomwin
    @command_window.visible = false   
  end
  #--------------------------------------------------------------------------
  # * Create Command Sprites
  #--------------------------------------------------------------------------
  def create_command_sprites
    @sprite_command = Sprite.new
    @sprite_command.bitmap = Cache.title2(COMMAND_SPRITES[@command_window.index])
    @sprite_command.z = 100
  end   
  #--------------------------------------------------------------------------
  # * Create Background
  #--------------------------------------------------------------------------
  def create_background
    @sprite_background = Sprite.new
    @sprite_background.bitmap = Cache.title1(TITLE_SPRITES[@sprite_index])
  end
  #--------------------------------------------------------------------------
  # * Dispose Background
  #--------------------------------------------------------------------------
  def dispose_background
    @sprite_background.bitmap.dispose
    @sprite_background.dispose
    dispose_command_sprites
  end
  #--------------------------------------------------------------------------
  # * Dispose Background
  #--------------------------------------------------------------------------
  def dispose_command_sprites
    @sprite_command.bitmap.dispose
    @sprite_command.dispose
  end
  #--------------------------------------------------------------------------
  # * Update Basic
  #--------------------------------------------------------------------------
  def update_basic
    super
    @sprite_command.bitmap = Cache.title2(COMMAND_SPRITES[@command_window.index])
    @frame = (@frame + 1) % (SPRITE_CHANGE*60)
    if @frame == (SPRITE_CHANGE*60)-1
      change_background     
    end
  end 
  #--------------------------------------------------------------------------
  # * Change Background
  #--------------------------------------------------------------------------
  def change_background
    fadeout(30) if SMOOTH_CHANGE
    @sprite_index = (@sprite_index + 1) % TITLE_SPRITES.size
    create_background
    fadein(30) if SMOOTH_CHANGE
  end 
  #--------------------------------------------------------------------------
  # * Fade Loop
  #--------------------------------------------------------------------------
  def fade_loop(duration)
    duration.times do |i|
      yield 255 * (i + 1) / duration
      Graphics.update
      Input.update
    end
  end
  #--------------------------------------------------------------------------
  # # Fadein
  #--------------------------------------------------------------------------
  def fadein(duration)
    fade_loop(duration) {|v| Graphics.brightness = v }
  end
  #--------------------------------------------------------------------------
  # * Fadeout
  #--------------------------------------------------------------------------
  def fadeout(duration)
    fade_loop(duration) {|v| Graphics.brightness = 255 - v }
  end
end


Angius - Sro 04 Kwi, 2012 13:08

Ok, jest super, wielkie dzięki :)
Tylko jeden mały błąd - podczas zamiany teł zaciemniane są również komendy...

Ayene - Czw 05 Kwi, 2012 18:42

Akurat tak miało być, ale jeśli tak bardzo Tobie to przeszkadza, możesz dwukrotnie fragment:
Kod:
Graphics.brightness

zamienić na:
Kod:
@sprite_background.opacity

Angius - Czw 05 Kwi, 2012 19:41

Dzięki wielkie, o to mi chodziło :-)
Co prawda podczas zmiany tła blokuje się możliwośc zmiany komendy, ale poradziłęm sobie z tym zmniejszając fadein i fadeout :)

Ayene - Czw 05 Kwi, 2012 19:51

Jeśli chcesz, aby komendy się odświeżały podczas zmiany tła, to pod linijką:
Kod:
Input.update

dodaj:
Kod:
@command_window.update
@sprite_command.bitmap = Cache.title2(COMMAND_SPRITES[@command_window.index])

Angius - Czw 05 Kwi, 2012 19:58

Teraz jest doskonale, wielkie dzięki raz jeszcze! :mrgreen:

Powered by phpBB modified by Przemo © 2003 phpBB Group