- UID
- 3
- 帖子
- 924
- 主题
- 28
- 精华
- 5
- 积分
- 5325
- 历练
- 10
- 声望
- 119
- 人气
- 141
- 经验
- 2790
- 金钱
- 6124
- 注册时间
- 2009-7-25
- 最后登录
- 2017-9-6
- 在线时间
- 376 小时
- 阅读权限
- 200
TA的每日心情 | 衰 2010-9-25 00:07 |
---|
签到天数: 3 天 [LV.2]偶尔看看I - 精华
- 5
- 积分
- 5325
- 历练
- 10
- 声望
- 119
- 人气
- 141
|
注:本教程适用于RMXP(RPG Maker XP)
本教程原作者为七夕小雨(qq398756862)如需转帖请注明原作者并注明十里坡(www.palslp.com)为首发处
我其实一直在犹豫,教程做成什么样好,是按步骤干巴巴的讲解,还是句句详解,再带点俏皮话,虽然我是个懒人- -但是,我还是打算好好出这次的教学系列,可能会比较长,愿君也一样能有我的这份耐心。ok废话不多说~
开始我们的教程
好了~先是扫盲,如果没有任何RM基础的,请先下载基础教学包
下载地址在置顶帖
恩,扫盲完毕的可以继续往下看了
首先,仙剑时空传的标题,我使用了事件标题,所以这次我们就具体说说其做法
一、
安装过RM的童鞋都知道,RM的进入画面是个深绿色的树林,然后有选择窗口,虽然数据库内可以修改标题图片,但是却还是不能修改大体的效果,虽然脚本也一样可以制作的很华丽,但是却还是很麻烦的,所以我们选择一个还没有装载任何变量的初始地图的事件来承载我们标题画面。
好了,首先我们要做的就是跳过标题画面。我这里不是给大家一个现成的脚本,而是手把手教你把原脚本改成忽略标题画面到初始地图的方式。
1,打开电脑
2,打开十里坡《和我学做仙剑时空转——第一章:标题》
3,打开RMXP
4,打开脚本编辑器,选中Scene_Title脚本。
好了准备工作做好了
为什么要修改Scene_Title而不是别的呢,我们打开脚本中的main就会发现$scene = Scene_Title因为main是RM首先运行的东西,所以其生成的场景,便是第一个生成的场景,可能还会有人问,为什么不直接修改$scene的指针内容,其实原因很简单,应为在Scene_Title中直接生成好了数据库内所有我们需要的内容,只需要修改画面和跳转方式就能达到我们想要的方式,这不是很好嘛?既然有了轮胎,我们只要修改纹路,让他在我们需要土地上奔驰起来就好了。
好了,我们打开Scene_Title,先不要怕这些密密麻麻的东西,我一步步给你们讲解。
前面为#号的是注释,我们撇开不看
第一句class Scene_Title
生成一个名为Scene_Title的类
def main 定义一个main的方法
if $BTEST
battle_test
return
end
如果是战斗测试的情况下,就调用battle_test的方法,然后返回。
# 载入数据库
$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
装载数据库,不解释
# 生成标题图形
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
这两句便是生成标题背后那张图片的~~所以我们在修改时这两句删除
# 生成命令窗口
s1 = "新游戏"
s2 = "继续"
s3 = "退出"
@command_window = Window_Command.new(192, [s1, s2, s3])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 288
这几句是生成那个选择框的,所以修改时也删除
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata")
@continue_enabled = true
end
end
if @continue_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
这几句是判定存档内是否有文件,如果没有呢,读档那个键是不能按滴,当然,由于前面的@command_window变量已经删去,所以这几句没有留着的必要,如果真的想要在事件标题中实现此效果我等下也会说明的
$game_system.bgm_play($data_system.title_bgm)
Audio.me_stop
Audio.bgs_stop音乐控制,删除不解释
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
进入一个总循环
然后调用画面刷新的方法
调用按键刷新的方法,
调用update 方法
如果场景不是他自己,就跳出循环
这里稍加解释,我们都知道如果进入到标题画面,那么$scene = Scene_Title
所以这里的$scene != self 也可以写为$scene != Scene_Title
!=是不等于的意思
@command_window.dispose
@sprite.bitmap.dispose
@sprite.dispose
内存释放刚才定义的变量,由于刚才的变量删去了,所以如果这里留着的话,就会报错,删去
def update
# 刷新命令窗口
@command_window.update
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 命令窗口的光标位置的分支
case @command_window.index
when 0 # 新游戏
command_new_game
when 1 # 继续
command_continue
when 2 # 退出
command_shutdown
end
end
end定义一个update的方法,
调用Window_Command类内的update方法,这里说明一下,窗口类带update的很少,大多数都写在Window_Base内然后子类继承下来的,
如果按下了C 一般有经验的人都知道,c不知代表C还有空格和回车
然后判定你的选择项,如果光标停留在0号光标上,就是新游戏,如果停留在1号光标上就是读档,如果停留在3号光标上就是退出
着写语句中的command_new_game、command_continue、command_shutdown在下面也都有def定义,大家可以自己看看。但是由于我们上面的修改,所以这里我们需要的效果是什么都不用按,直接进入command_new_game这个方法,最简单的改法就是
def update
command_new_game
end
这样
自己可以想想为什么。
好了,然后我们再看看
def command_new_game
$game_system.se_play($data_system.decision_se)
Audio.bgm_stop
定义一个command_new_game的方法,
播放data_system.decision_se的声音
标题背景音乐停止播放,这里我们只需要把
$game_system.se_play($data_system.decision_se)
Audio.bgm_stop
两句删除,我们的这个脚本也就算是改好了,其下的也都是初始化数据库变量等,就不多解释了。
|
|