如何优雅的研究 RGSS3 (七) 加入LOGO屏幕
对于游戏 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<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
之后在结束处理中将图片精灵消除。
#--------------------------------------------------------------------------
# ● 结束处理
#--------------------------------------------------------------------------
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 = 30 end
重写 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 = 30 end #==============================================================================
# ■ 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
end
end #==============================================================================
# ■ 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
如何优雅的研究 RGSS3 (七) 加入LOGO屏幕的更多相关文章
- 怎样优雅的研究 RGSS3 (四) 使窗体从画面边缘弹出
在非常多游戏中,窗体能够从游戏画面的边缘弹出. 而在 RGSS3 的默认脚本中时没有这样的功能的,当在地图上按下取消键时.游戏菜单会突然出现. 如今我们能够为主菜单加入动画效果,使其在屏幕边缘弹出. ...
- 怎样优雅的研究 RGSS3 番外(一) ruby 实现的后缀自己主动机
*我真的不会 ruby 呀* #encoding:utf-8 #==================================================================== ...
- 搜索引擎算法研究专题七:Hilltop算法
搜索引擎算法研究专题七:Hilltop算法 2017年12月19日 ⁄ 搜索技术 ⁄ 共 1256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 HillTop也是搜索引擎结果排序的专利,是Google工 ...
- 如何出色的研究 RGSS3 (三) 形式的调整的细节
在一个我们研究了添加到窗体方法的选择,这个问题来研究窗体类的细节. 所有形式的父类的 Window_Base 四个参数需要初始化. #--------------------------------- ...
- dubbo-2.5.6优雅停机研究
不优雅的停机: 当进程存在正在运行的线程时,如果直接执行kill -9 pid时,那么这个正在执行的线程被中断,就好像一个机器运行中突然遭遇断电的情况,所导致的结果是造成服务调用的消费端报错,也有可能 ...
- MOSS 2013研究系列---修改默认Logo
开发SharePoint2013 的时候,系统里面有一个“SharePoint” 的logo,客户很少不满意,我们的系统不能出现产品的名称,如下图: 咋么修改呢,咨询了广大网友,给出了一个解决方案: ...
- django-cms 代码研究(七)杂七杂八
实体关系图 核心对象: cms_page/cms_placeholder/cms_cmsplugin. page模型类继承关系图 CMSPlugin&Placeholder模型类继承关系图 = ...
- iOS多线程的初步研究(七)-- dispatch对象
谈起iOS的dispatch(正式称谓是Grand Central Dispatch或GCD),不得不说这又是iOS(包括MacOSX)平台的创新,优缺点这里不讨论,只有当你使用时才能真正体会到.我们 ...
- MQTT的学习研究(七)基于HTTP POST MQTT 发布消息服务端使用
参阅官方文档 http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau.doc/ts21220_.htm ...
随机推荐
- 博客搬到了http://xianglong.me
自己用Django建立个人博客.这个博客的部分已经迁移到新的个人博客. 博客地址:龙 (http://xianglong.me),欢迎. 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- [ACM] poj 1088 滑雪 (内存搜索DFS)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 73409 Accepted: 27141 Description ...
- Unity3D根据游戏的发展Terrain Toolkit地形生产
今天我们继续给我Unity3D游戏开发系列.今天我们来通过Terrain Toolkit为了使地形. 虽然Unity3D它为我们提供了一个地形渲染工具,我们发现,这个地形绘制工具并不能满足我们的 ...
- JavaEE(17) - JPA查询API和JPQL
1. 获取查询结果 2. JPQL函数和JPQL表达式 #1. 使用from子句 #2. 查询部分属性 #3. 查询中使用构造器 3. JPQL的关联查询和多态查询 #1. 多态查询 #2. 隐式连接 ...
- 什么是WEBserver? 经常使用的WEBserver有哪些?
什么是WEBserver? 经常使用的WEBserver有哪些? 一.什么是WEBserver Webserver能够解析HTTP协议.当Webserver接收到一个HTTP请求,会返回一个HTTP响 ...
- 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能
原文:利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一 ...
- 动态传递参数到DevExpress.XtraReports的小结
原文:动态传递参数到DevExpress.XtraReports的小结 前两种方法和WinForm一样,可以传递参数.数组.实体对象.DataTable等1. 采用构造函数具体用法:在Report中p ...
- NSOJ 畅通工程(并查集)
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...
- Tyvj P1015 公路骑 (DP)
叙述性说明 Description 一个特殊的单行道都在每公里公交车站.们乘坐汽车的公里使来付费. 比如例子的第一行就是一个费用的单子. 没有一辆车子行驶超过10公里.一个顾客打算行驶n公里(1 ...
- 用grunt搭建自动化的web前端开发环境
用grunt搭建自动化的web前端开发环境 jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前端开发 ...