博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何优雅的研究 RGSS3 (七) 加入LOGO屏幕
阅读量:4688 次
发布时间:2019-06-09

本文共 11134 字,大约阅读时间需要 37 分钟。

对于游戏 LOGO 屏幕。

首先设计 LOGO Scene类。我们知道,现场类 Scene_Base 子类。

让我们回顾一下现场的作品。

首先运行开始处理。其次是开始治疗。然后停止更新屏幕,最后,治疗结束前,理。

以下来逐个分析这些方法。

当进入 LOGO 画面时,显然不须要也不可能回到上一个画面,因此在開始处理的方法中,我们要清空场景的切换记录。

接下来要创建出须要显示的 LOGO 图片,可是不能让它马上显示,而是要使其淡入画面,因此要冻结住图像的显示。

最后播放 LOGO 画面的音效。

#--------------------------------------------------------------------------  # ● 開始处理  #--------------------------------------------------------------------------  def start    super    SceneManager.clear    Graphics.freeze    create_logo    play_logo_music  end
在画面開始后,我们要准备图像的渐变、接受按键,并初始化计数器。

#--------------------------------------------------------------------------  # ● 開始后处理  #--------------------------------------------------------------------------  def post_start    perform_transition    Input.update    @count = CONF_LOGO::DISP_FLAME_LOGO  end
在更新画面时。除了调用的更新画面方法外。还要推断LOGO画面是否结束,结束则进入标题画面。

#--------------------------------------------------------------------------  # ● 更新画面  #--------------------------------------------------------------------------  alias :_orig_update :update  def update    _orig_update    SceneManager.goto(Scene_Title) if disp_logo?  end
而仅仅有按下跳过键或达到一定时间 LOGO 画面才会结束。而这个一定的时间我们将它设置为一个常量,每次更新画面时将计数器减一。当计数器为零时则结束 LOGO 画面。

#--------------------------------------------------------------------------  # ● 推断LOGO画面是否结束  #--------------------------------------------------------------------------  def disp_logo?    if Input.trigger?(:C)      true if CONF_LOGO::SKIP_LOGO    else      @count -= 1      true if @count <= 0    end  end
在结束 LOGO 画面前不要忘了将图片与音乐淡出。

#--------------------------------------------------------------------------  # ● 结束前处理  #--------------------------------------------------------------------------  def pre_terminate    fadeout_all(transition_speed)  end

淡出方法也非常easy。

#--------------------------------------------------------------------------  # ● 淡出声音和图形  #--------------------------------------------------------------------------  def fadeout_all(time)    RPG::ME.fade(time) if @use_me    Graphics.fadeout(time)    RPG::SE.stop if @use_se    RPG::ME.stop if @use_me  end 

之后在结束处理中将图片精灵消除。

#--------------------------------------------------------------------------  # ● 结束处理  #--------------------------------------------------------------------------  def terminate    super    dispose_logo  end
整个场景中事实上仅仅有一个精灵,也就是 LOGO 图像精灵。

它在開始处理中创建。

#--------------------------------------------------------------------------  # ● 生成LOGO  #--------------------------------------------------------------------------  def create_logo    @sprite = Sprite.new    @sprite.bitmap = Cache.system(CONF_LOGO::FILE_LOGO)    center_sprite(@sprite)  end

从缓存冲取出图像创建出精灵。然后将精灵放置在屏幕中央。

#--------------------------------------------------------------------------  # ● 精灵移动到屏幕中央  #--------------------------------------------------------------------------  def center_sprite(sprite)    sprite.ox = sprite.bitmap.width / 2    sprite.oy = sprite.bitmap.height / 2    sprite.x = Graphics.width / 2    sprite.y = Graphics.height / 2  end

该精灵在结束处理中被释放。

#--------------------------------------------------------------------------  # ● 释放LOGO  #--------------------------------------------------------------------------  def dispose_logo    @sprite.bitmap.dispose    @sprite.dispose  end

在 Scene_Base 中有一个运行渐变 perform_transition 方法,它调用 transition_speed 获取渐变速度。

我们将其重载为自己的版本号。

#--------------------------------------------------------------------------  # ● 获取渐变速度  #--------------------------------------------------------------------------  def transition_speed    if Input.trigger?(:C)      return 0    else      return CONF_LOGO::FADE_SPEED_LOGO    end  end
LOGO 画面中的音效在開始处理时调用 play_logo_music 播放。

#--------------------------------------------------------------------------  # ● 播放LOGO显示时的音效  #--------------------------------------------------------------------------  def play_logo_music    @use_se = true    @use_me = false      logo_music = RPG::SE.new(CONF_LOGO::MU_LOGO)    logo_music.play rescue @use_se = false        unless @use_se      @use_me = true      logo_music = RPG::ME.new(CONF_LOGO::MU_LOGO)      logo_music.play rescue @use_me = false    end      end

这样我们的 LOGO 画面类就设计好了,当中涉及到了很多常量,我们用一个专门的模块来定义它们。

#==============================================================================# ■ CONF_LOGO#------------------------------------------------------------------------------#  设定常量#==============================================================================module CONF_LOGO  # LOGO功能开关  USE_LOGO = true    # 回到标题画面时是否显示LOGO画面  RESET_LOGO = false    # TEST时是否显示LOGO画面  TEST_LOGO = true    # 能否够跳过LOGO画面  SKIP_LOGO = true    # LOGO图像文件名称  # (Graphics/System/设定的LOGO画面文件名称)  FILE_LOGO = "logo"    # LOGO画面中的SE  # (Audio/SE/设定的SE文件名称 Audio/ME/设定的ME文件名称)  # ※当值为空时不播放  MU_LOGO = ""    # 淡入淡出渐变率(帧数)  FADE_SPEED_LOGO = 10    # LOGO显示的时间的长度(帧数)  DISP_FLAME_LOGO = 30end
重写 SceneManager 中的 first_scene_class,使得最初的场景中显示 LOGO 画面。

#==============================================================================# ■ SceneManager#------------------------------------------------------------------------------#  场景切换的管理器。

RGSS3 内置了新功能,在使用 call 方法切换新场景时,能够 # 用 return 方法返回上一个场景。

#============================================================================== module SceneManager @reset_flg = true #-------------------------------------------------------------------------- # ● 获取最初场景的所属类 #-------------------------------------------------------------------------- def self.first_scene_class if CONF_LOGO::USE_LOGO and @reset_flg @reset_flg = false # 假设显示LOGO if CONF_LOGO::TEST_LOGO # 假设在測试时显示LOGO $BTEST ? Scene_Battle : Scene_Logo else # 假设不在測试时显示LOGO $BTEST ? Scene_Battle : ( $TEST ? Scene_Title : Scene_Logo ) end else # 假设不显示LOGO $BTEST ? Scene_Battle : Scene_Title end end end

完整的脚本插件代码例如以下

#encoding:utf-8#==============================================================================# ■ CONF_LOGO#------------------------------------------------------------------------------#  设定常量#==============================================================================module CONF_LOGO  # LOGO功能开关  USE_LOGO = true    # 回到标题画面时是否显示LOGO画面  RESET_LOGO = false    # TEST时是否显示LOGO画面  TEST_LOGO = true    # 能否够跳过LOGO画面  SKIP_LOGO = true    # LOGO图像文件名称  # (Graphics/System/设定的LOGO画面文件名称)  FILE_LOGO = "logo"    # LOGO画面中的SE  # (Audio/SE/设定的SE文件名称 Audio/ME/设定的ME文件名称)  # ※当值为空时不播放  MU_LOGO = ""    # 淡入淡出渐变率(帧数)  FADE_SPEED_LOGO = 10    # LOGO显示的时间的长度(帧数)  DISP_FLAME_LOGO = 30end#==============================================================================# ■ Scene_Logo#------------------------------------------------------------------------------#  LOGO画面。#==============================================================================class Scene_Logo < Scene_Base  #--------------------------------------------------------------------------  # ● 開始处理  #--------------------------------------------------------------------------  def start    super    SceneManager.clear    Graphics.freeze    create_logo    play_logo_music  end  #--------------------------------------------------------------------------  # ● 開始后处理  #--------------------------------------------------------------------------  def post_start    perform_transition    Input.update    @count = CONF_LOGO::DISP_FLAME_LOGO  end  #--------------------------------------------------------------------------  # ● 更新画面  #--------------------------------------------------------------------------  alias :_orig_update :update  def update    _orig_update    SceneManager.goto(Scene_Title) if disp_logo?  end  #--------------------------------------------------------------------------  # ● 推断LOGO画面是否结束  #--------------------------------------------------------------------------  def disp_logo?    if Input.trigger?(:C)      true if CONF_LOGO::SKIP_LOGO    else      @count -= 1      true if @count <= 0    end  end  #--------------------------------------------------------------------------  # ● 结束前处理  #--------------------------------------------------------------------------  def pre_terminate    fadeout_all(transition_speed)  end  #--------------------------------------------------------------------------  # ● 结束处理  #--------------------------------------------------------------------------  def terminate    super    dispose_logo  end  #--------------------------------------------------------------------------  # ● 获取渐变速度  #--------------------------------------------------------------------------  def transition_speed    if Input.trigger?(:C)      return 0    else      return CONF_LOGO::FADE_SPEED_LOGO    end  end  #--------------------------------------------------------------------------  # ● 生成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.dispose  end  #--------------------------------------------------------------------------  # ● 精灵移动到屏幕中央  #--------------------------------------------------------------------------  def center_sprite(sprite)    sprite.ox = sprite.bitmap.width / 2    sprite.oy = sprite.bitmap.height / 2    sprite.x = Graphics.width / 2    sprite.y = Graphics.height / 2  end  #--------------------------------------------------------------------------  # ● 播放LOGO显示时的音效  #--------------------------------------------------------------------------  def play_logo_music    @use_se = true    @use_me = false      logo_music = RPG::SE.new(CONF_LOGO::MU_LOGO)    logo_music.play rescue @use_se = false        unless @use_se      @use_me = true      logo_music = RPG::ME.new(CONF_LOGO::MU_LOGO)      logo_music.play rescue @use_me = false    end      end  #--------------------------------------------------------------------------  # ● 淡出声音和图形  #--------------------------------------------------------------------------  def fadeout_all(time)    RPG::ME.fade(time) if @use_me    Graphics.fadeout(time)    RPG::SE.stop if @use_se    RPG::ME.stop if @use_me  endend#==============================================================================# ■ SceneManager#------------------------------------------------------------------------------#  场景切换的管理器。

RGSS3 内置了新功能,在使用 call 方法切换新场景时。能够 # 用 return 方法返回上一个场景。 #============================================================================== module SceneManager @reset_flg = true #-------------------------------------------------------------------------- # ● 获取最初场景的所属类 #-------------------------------------------------------------------------- def self.first_scene_class if CONF_LOGO::USE_LOGO and @reset_flg @reset_flg = false # 假设显示LOGO if CONF_LOGO::TEST_LOGO # 假设在測试时显示LOGO $BTEST ? Scene_Battle : Scene_Logo else # 假设不在測试时显示LOGO $BTEST ? Scene_Battle : ( $TEST ?

Scene_Title : Scene_Logo ) end else # 假设不显示LOGO $BTEST ? Scene_Battle : Scene_Title end end end

转载于:https://www.cnblogs.com/mengfanrong/p/4606875.html

你可能感兴趣的文章
LeetCode Shortest Word Distance II
查看>>
XMLConfigBuilder文件
查看>>
外键的增删改查练习
查看>>
python 逻辑运算的短路问题
查看>>
专线维护 07/11
查看>>
ajax返回
查看>>
IE9兼容性视图与IE9标准视图
查看>>
sprint3个人总结
查看>>
七周七语言——Prolog(二)
查看>>
MLN Alchemy
查看>>
maven 的 oracle的Missing artifact com.oracle:******:jar:11.2.0.2.0
查看>>
vue服务端渲染添加缓存
查看>>
20165320 第七周学习总结
查看>>
安装及创建python虚拟环境
查看>>
数据库、C#、Java生成唯一GUID 方法
查看>>
gtest 安装
查看>>
sql中根据逗号分隔,查出多行数据
查看>>
js 回到頂部
查看>>
$ is not defined与SpringMVC访问静态资源
查看>>
第五周作业
查看>>