事件标题
看到许多大触的标题菜单十分炫丽,然而身为不会脚本的事件党,却只能使用单调的默认标题,最多改改背景图片和Window好了,一点也不带感嘛。
如何才能让标题具有个性,成为许多RMer共同的疑问。
| 项目 | 描述 |
|---|---|
| 系统完善度 | ★★★★★ |
| 学习难度 | ★★☆ |
| 学习时间 | 30分钟-45分钟 |
| 范例工程 | 逐梦 v1.4 开源版 |
(范例工程链接失效了)
该系统若能掌握诀窍就不是难事,但在光标移动的表现效果上比较容易出问题,需要根据游戏中的表现准确看出是哪个地方出了问题并进行修正。
首先你需要准备一个脚本:跳过默认标题界面。
为不打乱阅读节奏,脚本放在了文章末尾,请自行查看
MV就自己搜索相关插件,MZ可以在顶部工具栏 > 游戏 > 跳过标题画面 进行设置
找到对应版本的脚本后,准备好logo,选项,光标,背景图等图片素材,放进Graphics\Pictures,然后打开数据库-系统,然后初期角色全部删掉(VA可使用“初期角色透明”),以上就是全部的准备。做好准备以后咱们正式开始吧。

看到范例工程左下角,简单的介绍一下,除了系统测试图外,名为“Start From Here”的地图就是对标题的准备。
先来查看地图内的事件,啊?找不到事件在哪的话……

找到了咱就接着看,以下就是大家看到的事件:

注释:
①自动执行:管你是自动还是并行,总之会自己运行就对了。
②更改画面色调:有人问这空白地图不是本来就是黑的么?为什么还要用画面色调调黑屏?我回答是:这个在标题是用不到的,但是会在游戏开始的时候用到,用法是:正式进入游戏剧情时做到画面淡入的效果,不至于那么突然。
③循环:这部分是对开头显示logo的消失控制,设置为循环是为了刷新玩家的按键输入和计时。
④变量计时器:计时器不能设置成等待帧,要做到刷新玩家按键输入必须使用变量,至于怎么进行判断在后面会提到。
⑤等待帧:不要觉得这个与上面那条矛盾了,此等待帧的作用有两点,一是防止自动执行下画面卡死,二是让变量计时器变得更可控,也就是说你想要等3秒后logo就消失,那么在下面分歧设置>60就可以了(VX和VA为180)。
⑥条件分歧:此处是对logo消失条件的判断。B、C键的条件分歧对应的是玩家按下确认键或退出键,变量>60是3秒以后玩家即使不操作也会淡出logo的判断。那么分歧内的命令自然不用说了吧?
以上便是准备地图的,接下来进入事件标题的核心命令所在地图,就是那个名为“菜单”的,来看看里面的事件。什么?又找不到在哪了?

找到了吧?然后再打开事件,第一页是对UI的初始和BGM的播放,初始完毕后利用独立开关运行第二页。
事件有点长,咱慢慢来,先从上边开始看吧。

注释:
①条件分歧:在初始的时候大家会发现有一个变量操作“菜单光标==0”,这个变量代表的是光标的位置信息,若选项只有“开始游戏”“继续游戏”“退出游戏”的话,则该变量的数值代表的意思是:0.开始游戏,1.继续游戏,2.退出游戏。图中的分歧就是对光标位置进行判断。
②标签跳转:现在此命令暂时无用,但后面会有大用处的。
③变量操作:先往上看,这是光标为0,玩家按了↓的情况,那么这变量操作就是将光标的位置由0,开始游戏选项设置成1,继续游戏选项。
④图片操作:对选项及光标由“开始游戏”转向“继续游戏”的动画表现。同时,上边有个只播放了音效的是因为光标为0且按下了↑,该音效是用来提示玩家光标不能往上移动的。
以上这些搞定后,咱接着往下看。

注释:
①开关操作:此开关在本系统无用,但如果你想要学习后面的系统,请把这个开关加上。
②脚本:这个脚本是用来呼出读档界面的,因为事件无法做到读档,必须使用脚本。与此同时,VX的读档画面呼叫脚本为$scene = Scene_File.new(false,false,true),VA的读档画面呼叫脚本为SceneManager.call(Scene_Load)。
mv/mz不知道该用什么脚本的话,可参考视频:RPGMaker事件教程事件做出自定义☆标题界面!?做法大揭秘~
③脚本:关闭程序用的,不用多说吧?
④标签:记得上边的标签跳转么?标签跳转会将事件执行顺序跳转到相同标签的位置。该标签为事件末尾,在上面跳转则可以跳过不必要的判断,可以提升执行性能。如果现在你还不能理解可以不使用。
好了,剩下的就是游戏剧情了,感觉比默认标题美观多了吧?但是你以为这就完了?!
如果你使用的是XP,你会发现每次呼叫读档画面后退出,便会重新显示一次logo,这是不和谐的地方咱得调整一下。
打开脚本编辑器找到Scene_Load,第61行$scene = Scene_Title.new更改为$scene = Scene_Map.new。
这样一来便和谐多了。
结束
亲手制作了事件标题是否感到神清气爽?再也不用被默认菜单束缚了,咱好好的干一场吧!
所需脚本
RMXP:
#==============================================================================
# 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
#==============================================================================
class Scene_Title
#==============================================================================
# 脚本作者:朱仔メ龍 QQ:251724722
# 脚本转载请保留以上信息
#==============================================================================
def main
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
Graphics.frame_count = 0
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$game_map.autoplay
$game_map.update
$scene = Scene_Map.new
end
end
#==============================================================================
# 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
#==============================================================================
RMVX:
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# 处理标题画面的类。
#==============================================================================
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
if $BTEST # 战斗测试的情况
battle_test # 开始处理战斗测试
else # 一般处理
super # 返回原来的主处理
end
end
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
def start
super
load_database # 读取数据库
create_game_objects # 生成游戏对象
check_continue # 继续游戏的有效判定
command_new_game
end
#--------------------------------------------------------------------------
# ● 执行过渡
#--------------------------------------------------------------------------
def perform_transition
Graphics.transition(20)
end
#--------------------------------------------------------------------------
# ● 结束处理
#--------------------------------------------------------------------------
def terminate
super
snapshot_for_background
end
#--------------------------------------------------------------------------
# ● 读取数据库
#--------------------------------------------------------------------------
def load_database
$data_actors = load_data("Data/Actors.rvdata")
$data_classes = load_data("Data/Classes.rvdata")
$data_skills = load_data("Data/Skills.rvdata")
$data_items = load_data("Data/Items.rvdata")
$data_weapons = load_data("Data/Weapons.rvdata")
$data_armors = load_data("Data/Armors.rvdata")
$data_enemies = load_data("Data/Enemies.rvdata")
$data_troops = load_data("Data/Troops.rvdata")
$data_states = load_data("Data/States.rvdata")
$data_animations = load_data("Data/Animations.rvdata")
$data_common_events = load_data("Data/CommonEvents.rvdata")
$data_system = load_data("Data/System.rvdata")
$data_areas = load_data("Data/Areas.rvdata")
end
#--------------------------------------------------------------------------
# ● 战斗测试用的读取数据库
#--------------------------------------------------------------------------
def load_bt_database
$data_actors = load_data("Data/BT_Actors.rvdata")
$data_classes = load_data("Data/BT_Classes.rvdata")
$data_skills = load_data("Data/BT_Skills.rvdata")
$data_items = load_data("Data/BT_Items.rvdata")
$data_weapons = load_data("Data/BT_Weapons.rvdata")
$data_armors = load_data("Data/BT_Armors.rvdata")
$data_enemies = load_data("Data/BT_Enemies.rvdata")
$data_troops = load_data("Data/BT_Troops.rvdata")
$data_states = load_data("Data/BT_States.rvdata")
$data_animations = load_data("Data/BT_Animations.rvdata")
$data_common_events = load_data("Data/BT_CommonEvents.rvdata")
$data_system = load_data("Data/BT_System.rvdata")
end
#--------------------------------------------------------------------------
# ● 做成各种游戏对象
#--------------------------------------------------------------------------
def create_game_objects
$game_temp = Game_Temp.new
$game_message = Game_Message.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
end
#--------------------------------------------------------------------------
# ● 继续游戏的有效判定
#--------------------------------------------------------------------------
def check_continue
$continue_enabled = (Dir.glob('Save*.rvdata').size > 0)
end
#--------------------------------------------------------------------------
# ● 指令 : 新的游戏
#--------------------------------------------------------------------------
def command_new_game
confirm_player_location
$game_party.setup_starting_members # 初期队伍
$game_map.setup($data_system.start_map_id) # 初期位置的地图
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$scene = Scene_Map.new
Graphics.frame_count = 0
$game_map.autoplay
end
#--------------------------------------------------------------------------
# ● 检查玩家的初期位置
#--------------------------------------------------------------------------
def confirm_player_location
if $data_system.start_map_id == 0
print "还没设置玩家的初期位置。"
exit
end
end
#--------------------------------------------------------------------------
# ● 指令 : 继续游戏
#--------------------------------------------------------------------------
def command_continue
if $continue_enabled
Sound.play_decision
$scene = Scene_File.new(false, true, false)
else
Sound.play_buzzer
end
end
#--------------------------------------------------------------------------
# ● 指令 : 离开游戏
#--------------------------------------------------------------------------
def command_shutdown
Sound.play_decision
RPG::BGM.fade(800)
RPG::BGS.fade(800)
RPG::ME.fade(800)
$scene = nil
end
#--------------------------------------------------------------------------
# ● 战斗测试
#--------------------------------------------------------------------------
def battle_test
load_bt_database # 战斗测试用数据库读取
create_game_objects # 作成游戏对象
Graphics.frame_count = 0 # 初期化游戏时间
$game_party.setup_battle_test_members
$game_troop.setup($data_system.test_troop_id)
$game_troop.can_escape = true
$game_system.battle_bgm.play
snapshot_for_background
$scene = Scene_Battle.new
end
end
RMVA:
#===============================================================================
#
# 可以返回标题画面的跳过标题画面脚本
# 作 者:光的圆周率
# 测试情况:RPG Maker VX ACE 测试版 以及 1.00正式版 测试通过
# 说明:脚本中注明的位置可以控制是否可以返回标题画面
# true:可以再次返回标题画面 false:不可以再次返回标题画面
# 脚本来自66RPG,转载请保留版权信息
#===============================================================================
module SceneManager
def self.stack
@stack
end
end
class Scene_Title < Scene_Base
alias old_start start
alias old_dmv dispose_main_viewport
def start
return_allowed = true # 决定可否再次返回标题画面的开关
create_background
create_foreground
@sprite1.bitmap.dispose
@sprite2.bitmap.dispose
@foreground_sprite.bitmap.dispose
chk1 = SceneManager.stack.first != nil && return_allowed
chk2 = Graphics.frame_count > 0 && return_allowed
if chk1 or chk2
old_start
return 0
end
SceneManager.clear
DataManager.setup_new_game
$game_map.autoplay
SceneManager.goto(Scene_Map)
end
def dispose_main_viewport
SceneManager.stack.first == nil ? nil : old_dmv
end
end
#===============================================================================
# 脚本来自66RPG,转载请保留版权信息
#===============================================================================