如何优雅的研究 RGSS3 (七) 加入LOGO屏幕
對于游戲 LOGO 屏幕。
首先設(shè)計 LOGO Scene類。我們知道,現(xiàn)場類?Scene_Base 子類。
讓我們回顧一下現(xiàn)場的作品。
首先運行開始處理。其次是開始治療。然后停止更新屏幕,最后,治療結(jié)束前,理。
以下來逐個分析這些方法。
當進入?LOGO 畫面時,顯然不須要也不可能回到上一個畫面,因此在開始處理的方法中,我們要清空場景的切換記錄。
接下來要創(chuàng)建出須要顯示的 LOGO 圖片,可是不能讓它馬上顯示,而是要使其淡入畫面,因此要凍結(jié)住圖像的顯示。
最后播放 LOGO 畫面的音效。
#--------------------------------------------------------------------------# ● 開始處理#--------------------------------------------------------------------------def startsuperSceneManager.clearGraphics.freezecreate_logoplay_logo_musicend在畫面開始后,我們要準備圖像的漸變、接受按鍵,并初始化計數(shù)器。 #--------------------------------------------------------------------------# ● 開始后處理#--------------------------------------------------------------------------def post_startperform_transitionInput.update@count = CONF_LOGO::DISP_FLAME_LOGOend
在更新畫面時。除了調(diào)用的更新畫面方法外。還要推斷LOGO畫面是否結(jié)束,結(jié)束則進入標題畫面。
而僅僅有按下跳過鍵或達到一定時間?LOGO 畫面才會結(jié)束。而這個一定的時間我們將它設(shè)置為一個常量,每次更新畫面時將計數(shù)器減一。當計數(shù)器為零時則結(jié)束 LOGO 畫面。 #--------------------------------------------------------------------------# ● 推斷LOGO畫面是否結(jié)束#--------------------------------------------------------------------------def disp_logo?if Input.trigger?(:C)true if CONF_LOGO::SKIP_LOGOelse@count -= 1true if @count <= 0endend
在結(jié)束 LOGO 畫面前不要忘了將圖片與音樂淡出。
#--------------------------------------------------------------------------# ● 結(jié)束前處理#--------------------------------------------------------------------------def pre_terminatefadeout_all(transition_speed)end
#--------------------------------------------------------------------------# ● 淡出聲音和圖形#--------------------------------------------------------------------------def fadeout_all(time)RPG::ME.fade(time) if @use_meGraphics.fadeout(time)RPG::SE.stop if @use_seRPG::ME.stop if @use_meend<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">?</span>
之后在結(jié)束處理中將圖片精靈消除。
#--------------------------------------------------------------------------# ● 結(jié)束處理#--------------------------------------------------------------------------def terminatesuperdispose_logoend整個場景中事實上僅僅有一個精靈,也就是 LOGO 圖像精靈。
它在開始處理中創(chuàng)建。
#--------------------------------------------------------------------------# ● 生成LOGO#--------------------------------------------------------------------------def create_logo@sprite = Sprite.new@sprite.bitmap = Cache.system(CONF_LOGO::FILE_LOGO)center_sprite(@sprite)end#--------------------------------------------------------------------------# ● 釋放LOGO#--------------------------------------------------------------------------def dispose_logo@sprite.bitmap.dispose@sprite.disposeend
我們將其重載為自己的版本號。
#--------------------------------------------------------------------------# ● 獲取漸變速度#--------------------------------------------------------------------------def transition_speedif Input.trigger?(:C)return 0elsereturn CONF_LOGO::FADE_SPEED_LOGOendendLOGO 畫面中的音效在開始處理時調(diào)用 play_logo_music 播放。
#--------------------------------------------------------------------------# ● 播放LOGO顯示時的音效#--------------------------------------------------------------------------def play_logo_music@use_se = true@use_me = falselogo_music = RPG::SE.new(CONF_LOGO::MU_LOGO)logo_music.play rescue @use_se = falseunless @use_se@use_me = truelogo_music = RPG::ME.new(CONF_LOGO::MU_LOGO)logo_music.play rescue @use_me = falseendend
這樣我們的 LOGO 畫面類就設(shè)計好了,當中涉及到了很多常量,我們用一個專門的模塊來定義它們。
#============================================================================== # ■ CONF_LOGO #------------------------------------------------------------------------------ # 設(shè)定常量 #==============================================================================module CONF_LOGO# LOGO功能開關(guān)USE_LOGO = true# 回到標題畫面時是否顯示LOGO畫面RESET_LOGO = false# TEST時是否顯示LOGO畫面TEST_LOGO = true# 能否夠跳過LOGO畫面SKIP_LOGO = true# LOGO圖像文件名稱# (Graphics/System/設(shè)定的LOGO畫面文件名稱)FILE_LOGO = "logo"# LOGO畫面中的SE# (Audio/SE/設(shè)定的SE文件名稱 Audio/ME/設(shè)定的ME文件名稱)# ※當值為空時不播放MU_LOGO = ""# 淡入淡出漸變率(幀數(shù))FADE_SPEED_LOGO = 10# LOGO顯示的時間的長度(幀數(shù))DISP_FLAME_LOGO = 30end重寫 SceneManager 中的 first_scene_class,使得最初的場景中顯示 LOGO 畫面。 #============================================================================== # ■ SceneManager #------------------------------------------------------------------------------ # 場景切換的管理器。
RGSS3 內(nèi)置了新功能,在使用 call 方法切換新場景時,能夠 # 用 return 方法返回上一個場景。
#============================================================================== module SceneManager @reset_flg = true #-------------------------------------------------------------------------- # ● 獲取最初場景的所屬類 #-------------------------------------------------------------------------- def self.first_scene_class if CONF_LOGO::USE_LOGO and @reset_flg @reset_flg = false # 假設(shè)顯示LOGO if CONF_LOGO::TEST_LOGO # 假設(shè)在測試時顯示LOGO $BTEST ? Scene_Battle : Scene_Logo else # 假設(shè)不在測試時顯示LOGO $BTEST ? Scene_Battle : ( $TEST ? Scene_Title : Scene_Logo ) end else # 假設(shè)不顯示LOGO $BTEST ? Scene_Battle : Scene_Title end end end
完整的腳本插件代碼例如以下 #encoding:utf-8 #============================================================================== # ■ CONF_LOGO #------------------------------------------------------------------------------ # 設(shè)定常量 #==============================================================================module CONF_LOGO# LOGO功能開關(guān)USE_LOGO = true# 回到標題畫面時是否顯示LOGO畫面RESET_LOGO = false# TEST時是否顯示LOGO畫面TEST_LOGO = true# 能否夠跳過LOGO畫面SKIP_LOGO = true# LOGO圖像文件名稱# (Graphics/System/設(shè)定的LOGO畫面文件名稱)FILE_LOGO = "logo"# LOGO畫面中的SE# (Audio/SE/設(shè)定的SE文件名稱 Audio/ME/設(shè)定的ME文件名稱)# ※當值為空時不播放MU_LOGO = ""# 淡入淡出漸變率(幀數(shù))FADE_SPEED_LOGO = 10# LOGO顯示的時間的長度(幀數(shù))DISP_FLAME_LOGO = 30end#============================================================================== # ■ Scene_Logo #------------------------------------------------------------------------------ # LOGO畫面。 #==============================================================================class Scene_Logo < Scene_Base#--------------------------------------------------------------------------# ● 開始處理#--------------------------------------------------------------------------def startsuperSceneManager.clearGraphics.freezecreate_logoplay_logo_musicend#--------------------------------------------------------------------------# ● 開始后處理#--------------------------------------------------------------------------def post_startperform_transitionInput.update@count = CONF_LOGO::DISP_FLAME_LOGOend#--------------------------------------------------------------------------# ● 更新畫面#--------------------------------------------------------------------------alias :_orig_update :updatedef update_orig_updateSceneManager.goto(Scene_Title) if disp_logo?end#--------------------------------------------------------------------------# ● 推斷LOGO畫面是否結(jié)束#--------------------------------------------------------------------------def disp_logo?if Input.trigger?(:C)true if CONF_LOGO::SKIP_LOGOelse@count -= 1true if @count <= 0endend#--------------------------------------------------------------------------# ● 結(jié)束前處理#--------------------------------------------------------------------------def pre_terminatefadeout_all(transition_speed)end#--------------------------------------------------------------------------# ● 結(jié)束處理#--------------------------------------------------------------------------def terminatesuperdispose_logoend#--------------------------------------------------------------------------# ● 獲取漸變速度#--------------------------------------------------------------------------def transition_speedif Input.trigger?(:C)return 0elsereturn CONF_LOGO::FADE_SPEED_LOGOendend#--------------------------------------------------------------------------# ● 生成LOGO#--------------------------------------------------------------------------def create_logo@sprite = Sprite.new@sprite.bitmap = Cache.system(CONF_LOGO::FILE_LOGO)center_sprite(@sprite)end#--------------------------------------------------------------------------# ● 釋放LOGO#--------------------------------------------------------------------------def dispose_logo@sprite.bitmap.dispose@sprite.disposeend#--------------------------------------------------------------------------# ● 精靈移動到屏幕中央#--------------------------------------------------------------------------def center_sprite(sprite)sprite.ox = sprite.bitmap.width / 2sprite.oy = sprite.bitmap.height / 2sprite.x = Graphics.width / 2sprite.y = Graphics.height / 2end#--------------------------------------------------------------------------# ● 播放LOGO顯示時的音效#--------------------------------------------------------------------------def play_logo_music@use_se = true@use_me = falselogo_music = RPG::SE.new(CONF_LOGO::MU_LOGO)logo_music.play rescue @use_se = falseunless @use_se@use_me = truelogo_music = RPG::ME.new(CONF_LOGO::MU_LOGO)logo_music.play rescue @use_me = falseendend#--------------------------------------------------------------------------# ● 淡出聲音和圖形#--------------------------------------------------------------------------def fadeout_all(time)RPG::ME.fade(time) if @use_meGraphics.fadeout(time)RPG::SE.stop if @use_seRPG::ME.stop if @use_meend end#============================================================================== # ■ SceneManager #------------------------------------------------------------------------------ # 場景切換的管理器。
RGSS3 內(nèi)置了新功能,在使用 call 方法切換新場景時。能夠 # 用 return 方法返回上一個場景。 #============================================================================== module SceneManager @reset_flg = true #-------------------------------------------------------------------------- # ● 獲取最初場景的所屬類 #-------------------------------------------------------------------------- def self.first_scene_class if CONF_LOGO::USE_LOGO and @reset_flg @reset_flg = false # 假設(shè)顯示LOGO if CONF_LOGO::TEST_LOGO # 假設(shè)在測試時顯示LOGO $BTEST ? Scene_Battle : Scene_Logo else # 假設(shè)不在測試時顯示LOGO $BTEST ? Scene_Battle : ( $TEST ?
Scene_Title : Scene_Logo ) end else # 假設(shè)不顯示LOGO $BTEST ? Scene_Battle : Scene_Title end end end
總結(jié)
以上是生活随笔為你收集整理的如何优雅的研究 RGSS3 (七) 加入LOGO屏幕的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android存储数据到本地文件
- 下一篇: 51CTO平台老男孩教育精品视频全场5-