CountD 发表于 2005-6-1 19:14:30

[菜鸟视觉研究会]标题画面-改-事件才是王道……

XP里面所有的Scene其实都是一个画面……而每张地图也是。因此,标题画面,尽管它完全是由RGSS组成的……它也可以当作地图看待。而且,系统自带标题挡路,这是一个多么碍眼的东西……

=v=其实……完全可以不用担心如何用RGSS写出一个标题,或者花三个小时去参考一个动态标题脚本。我们不需要会写RGSS,我们只需要会删就可以了……

Scene_Title里面的流程其实是:

1载入数据库。

2显示标题背景画面。播放音乐

3显示选择窗口。[在这里判断如果有存档,则“读取进度”选项可选]

4等待玩家选择。

5选择以后分为储存/读取/退出三个分歧。

6分别定义选择以后的效果。

A消除标题图片,音乐等等等……开始新游戏

B进入读取画面

C离开游戏

以上,全部是废话……因为注释里都写着。

但是这么拿出来一看。除了载入数据库……其他都可以删了嘛。=v=

class Scene_Title
#--------------------------------------------------------------------------
# ● 住处理
#--------------------------------------------------------------------------
def main
    # 战斗测试的情况下
    if $BTEST
      battle_test
      return
    end
    # 载入数据库
    $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, )
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288

    # 判定继续的有效性
    # 存档文件一个也不存在的时候也调查
    # 有効为 @continue_enabled 为 true、無効为 false
    @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
    # 演奏标题 BGM
    $game_system.bgm_play($data_system.title_bgm) #可直接在事件里播放音乐
    # 停止演奏 ME、BGS
    Audio.me_stop
    Audio.bgs_stop
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面被切换就中断循环
      if $scene != self
      break
      end
    end
    # 装备过渡
    Graphics.freeze
    # 释放命令窗口
    @command_window.dispose
    # 释放标题图形
    @sprite.bitmap.dispose
    @sprite.dispose
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
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
#--------------------------------------------------------------------------
# ● 命令 : 新游戏
#--------------------------------------------------------------------------
def command_new_game
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 停止 BGM
    Audio.bgm_stop
    # 重置测量游戏时间用的画面计数器
    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
    # 执行地图设置的 BGM 与 BGS 的自动切换
    $game_map.autoplay
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 切换地图画面
    $scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# ● 命令 : 继续
#--------------------------------------------------------------------------
def command_continue
    # 继续无效的情况下
    unless @continue_enabled
      # 演奏无效 SE
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 切换到读档画面
    $scene = Scene_Load.new
end
#--------------------------------------------------------------------------
# ● 命令 : 退出
#--------------------------------------------------------------------------
def command_shutdown
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # BGM、BGS、ME 的淡入淡出
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 退出
    $scene = nil
end


#后面是战斗测试,我们忽略它……

---------------------------------------------------------------------

无聊完毕。现在开始说正经的。

红色的部分,是100%删除掉就可以了。

但是需要把
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
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

修改为


#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------

def update
command_new_game
end
#--------------------------------------------------------------------------


这样的话,不需要选择就可以自动进入新游戏……


接下来,是蓝色的部分。可以和红色部分一样删除,但是可以用它来搞搞怪。

这部分原来是用来显示和消除标题图片的……虽然现在可以完全不需要系统定义的标题图片了,但是,在事件标题开始之前自动显示一张图片然后消除图片……这不就是所谓的LOGO了……

现在,简单版的处理完成。接下来要做的只是新建一张地图然后把队伍初始位置设在那里。然后在地图上做事件标题就行了。


[此贴子已经被作者于2005-6-2 0:19:17编辑过]

CountD 发表于 2005-6-1 19:30:07

接下来是橙色部分。本来也是删除大吉的,但是为了事件标题,留下榨干它们的价值。

这一个部分,是用来判断是否有存档的。这里的@continue_enabled是一个变量。

但是@开头的变量是不好用在事件操作里的。所以,把@改成$,作为全局变量来使用。    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?(\"Save#{i+1}.rxdata\")
      @continue_enabled = true
      end
    end


修改之后变成这样

    $continue_enabled = false
    for i in 0..3
      if FileTest.exist?(\"Save#{i+1}.rxdata\")
      $continue_enabled = true
      end
    end

这样,在制作事件标题的“读取”一栏时,“条件分歧-脚本$continue_enabled”这个指令的符合和不符合,就可以用来判断读取按钮是否可选了。

然后,我也是做到这里才发现,指令一览里居然没有叫出读取画面这样的命令。= =所以还是不得不用脚本。

不过既然已经把command_continue函数留下来了,马上就可以看出来叫出读取画面的命令是哪个,

就直接把这句当作一条指令。

脚本 : $scene = Scene_Load.new

同样的,退出游戏用的命令就是

脚本:# 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # BGM、BGS、ME 的淡入淡出
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 退出
    $scene = nil

剩下的就和RGSS完全无关了……要怎么华丽是自己的事。

我还是想说,RGSS哪里有那么神秘高深……惹不起,难道还躲不起么?

[此贴子已经被作者于2005-6-1 19:33:58编辑过]

sunsega 发表于 2005-6-2 19:55:38

那个...经过研究,最后,退出游戏的那个部分好象在我的机器上不可行。
我稍微的改动了一下,CD桑的原文是:
退出游戏用的命令就是
脚本:# 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # BGM、BGS、ME 的淡入淡出
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 退出
    $scene = nil
但是这样的语句加在事件里的话,在我的机器上会发生脚本运行的错误,所以,我就把这个部分改动了一下,供有和我出现同样问题的人参考:
退出游戏的事件:
停止SE
淡出BGM
淡出BGS
脚本:$scene = nil
这样一来似乎就没问题出现了...
页: [1]
查看完整版本: [菜鸟视觉研究会]标题画面-改-事件才是王道……