设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
Project1 查看内容

改用事件制作标题画面(RGSS部分)

2005-10-19 00:00| 发布者: 柳柳| 查看: 19535| 评论: 0|原作者: CountD

摘要:    作者 CountD  版本与更新  2005年6月更新  相关网址    范例工程 不提供  教程内容 XP里面所有的Scene其实都是一个画面……而每张地图也是。因此,标
 

 作者

CountD

 版本与更新

 2005年6月更新

 相关网址

 

 范例工程

不提供



 教程内容

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, [s1, s2, s3])
    @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了……

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

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

这一个部分,是用来判断是否有存档的。这里的@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哪里有那么神秘高深……惹不起,难道还躲不起么?


 

教程的通用说明

本站发布的教程,大多经过一些测试,应该都能够实现相应功能。但不保证所有的教程都是最优化的制作方法。

相关问题,点击发布贴进行讨论。谢谢您的鼓励与支持。

3

鲜花

刚表态过的朋友 (3 人)

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 15:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部