Project1

标题: 新手翻译标题窗口有错的请前辈指出 [打印本页]

作者: 啊兴    时间: 2014-2-22 23:28
标题: 新手翻译标题窗口有错的请前辈指出
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
#  处理标题画面的类。
#==============================================================================

class Scene_Title
#class处理某类 Scene_Title处理标题画面
  #--------------------------------------------------------------------------
  # ● 住处理
  #--------------------------------------------------------------------------
  def main#def定义main
    # 战斗测试的情况下
    if $BTEST#如果在战斗测试的情况下
      battle_test#显示战斗者
      return#刷新
    end#结束
    # 载入数据库(数据库文件一般会在Data文件夹找到)
    $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#窗口x-高除2
    @command_window.y = 288#窗口y
    # 判定继续的有效性
    # 存档文件一个也不存在的时候也调查
    # 有効为 @continue_enabled 为 true、無効为 false
    @continue_enabled = false # 判定存档假的情况
    for i in 0..3 # 循环检查存档0,1,2,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)#载入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
作者: 芯☆淡茹水    时间: 2014-2-23 09:23
本帖最后由 芯☆淡茹水 于 2014-2-23 14:23 编辑

battle_test#调用方法:battle_test
@command_window.x = 320 - @command_window.width / 2#窗口左右居中。
@continue_enabled = false # 赋值 @continue_enabled 为 false
if FileTest.exist?("Save#{i+1}.rxdata")#如果有存档的情况下
作者: 啊兴    时间: 2014-2-23 17:26
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update#定义刷新窗口
    # 刷新命令窗口
    @command_window.update#调用一般的命令选择行窗口的刷新
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)#当按下C键的情况下至于C键是什么键呢?
      #运行游戏按加F1键在游戏手柄中你会发现是回车键空格键和C键都是C键
      #大家想制作更多键的功能吗?这个可是很有用处哦!
      # 命令窗口的光标位置的分支
      case @command_window.index#光标位置的分支就像事件指令里的选择项功能差不多。index是指光标
      when 0  # 新游戏
        command_new_game# 新游戏命令代入
      when 1  # 继续
        command_continue# 继续命令代入
      when 2  # 退出
        command_shutdown # 退出命令代入
      end# 结束
    end# 这里要注意有多少选择项就有多少结束
  end#
作者: yagami    时间: 2014-2-23 19:53
本帖最后由 yagami 于 2014-2-23 20:01 编辑

  if $BTEST#如果在战斗测试的情况下
      battle_test#显示战斗者
      return#刷新
    end#结束
rutern是 返回的意思 这句话的用意在于 如果战斗测试 执行battle_test 方法   不会执行后面的代码 直接返回了并不是刷新
作者: 啊兴    时间: 2014-2-23 20:51
yagami 发表于 2014-2-23 19:53
if $BTEST#如果在战斗测试的情况下
      battle_test#显示战斗者
      return#刷新

谢谢修正
作者: 啊兴    时间: 2014-2-23 20:58
    前面我们讲到数据库的载入
    $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")#载入图块数据库
其实这些东西没必要在这里载入我们把他全部剪切Game_Map
def initialize
    @map_id = 0
    @display_x = 0
    @display_y = 0
end
就变成这样
def initialize
    @map_id = 0
    @display_x = 0
    @display_y = 0
    $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")
   end
意思就是进入地图后在载入这些东西。
这样游戏就不会那么卡了。

作者: yagami    时间: 2014-2-23 21:07
啊兴 发表于 2014-2-23 20:58
前面我们讲到数据库的载入
    $data_skills        = load_data("Data/Skills.rxdata")#载入特技数据 ...

你这样效率差 titile里加载的话 只加载一次足矣 你放到map的初始化里 每次生成map都要重新加载 这是没必要的性能开销 从战斗场景切换到地图场景 就要生成一个新的map对象 你自己想想 会增加多少开销
作者: 啊兴    时间: 2014-2-23 21:24
yagami 发表于 2014-2-23 21:07
你这样效率差 titile里加载的话 只加载一次足矣 你放到map的初始化里 每次生成map都要重新加载 这是没必 ...

我每次进入游戏的时候都觉得卡,估计是加载这些东西的缘故不知道如何才能让他不卡。
作者: yagami    时间: 2014-2-23 21:29
啊兴 发表于 2014-2-23 21:24
我每次进入游戏的时候都觉得卡,估计是加载这些东西的缘故不知道如何才能让他不卡。 ...

就是因为开始游戏要加载很多东西 所以卡 这样的好处是 上手卡一次 后面流畅 把这种事情一次性的事情都开始做掉 换来后面的流畅 是划算的 你写map里 把应该做一次的事情 做了无数次
作者: 啊兴    时间: 2014-2-23 21:31
从数据库的载入我们明白了这些数据都是在Data文件夹里,我们就有样学样在这个地方可以看到
for i in 0..3 # 循环检查存档0,1,2,3
      if FileTest.exist?("Save#{i+1}.rxdata")#载入存档数据库
        @continue_enabled = true# 判定存档真的情况
      end#结束
全局搜索全部Save#把他改成Save/Save#让后在创建一个Save文件夹意思就是把他放进Save文件夹里,当然不能改成中文我试过也许rxdata不支持吧!嘻嘻。。
作者: 啊兴    时间: 2014-2-23 21:42
# 生成命令窗口
    s1 = "新游戏"
    s2 = "继续"
    s3 = "退出"
    @command_window = Window_Command.new(192, [s1, s2, s3])#调用一般的命令选择行窗口
我这个地方我们看到中文,呵呵,英文不懂中文总该懂吧!试一试改改中文看看,你会发现脚本还是满神奇的
   s1 = "新游戏"
    s2 = "继续"
    s3 = "退出"
  s4 ="我们的回忆“
@command_window = Window_Command.new(192, [s1, s2, s3,s4])#调用一般的命令选择行窗口
作者: 啊兴    时间: 2014-2-23 22:26
本帖最后由 啊兴 于 2014-2-23 22:36 编辑

     在这里我们看到了一个载图精灵
    # 生成标题图形
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
嘻嘻前面不变就是后面嘻嘻在title总该知道什么意思吧!
  @sprite = Sprite.new
  @sprite.bitmap = RPG::Cache.title(”你想要的图片“)
试一试在其他地方改改看Scene_Gameover哪里改改看呵呵。
记住释放,精灵就会消失
作者: 啊兴    时间: 2014-2-24 10:24
  #--------------------------------------------------------------------------
  # ● 命令 : 新游戏
  #--------------------------------------------------------------------------
  def command_new_game
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 停止 BGM
    Audio.bgm_stop
    # 重置测量游戏时间用的画面计数器
    Graphics.frame_count = 0
    # 生成各种游戏对像
    #这个是调用了game,game早就定义好了这不过现在拿来用,这个很好用可以在事件指令里调用。
    #$自定义窗口 = 自定义窗口(第一个字母大写).new,这个调用窗口以后自己创建窗口会讲到。
    $game_temp          = Game_Temp.new
    #  在没有存档的情况下,处理临时数据的类。
    $game_system        = Game_System.new
    #  处理系统附属数据的类。也可执行诸如 BGM 管理之类的功能。
    $game_switches      = Game_Switches.new
    #  处理开关的类。编入的是类 Array 的外壳。
    $game_variables     = Game_Variables.new
    #  处理变量的类。编入的是类 Array 的外壳。
    $game_self_switches = Game_SelfSwitches.new
    #  处理独立开关的类。编入的是类 Hash 的外壳。
    $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_party处理同伴的类。
    # 设置初期位置的地图
    $game_map.setup($data_system.start_map_id)
    #这个在地图右键可以看到,就是初期位置id判定。$game_map处理地图的类。
    # 主角向初期位置移动
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    # 这个是把初期位置id的x,y处代入,判定是否能移动,意思就是等事件处理完在做其他事。
    #处理主角的类。事件启动的判定、以及地图的滚动等功能。
    # 刷新主角
    $game_player.refresh
    # 执行地图设置的 BGM 与 BGS 的自动切换
    $game_map.autoplay
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 切换地图画面
    $scene = Scene_Map.new#切换地图
  end#结束
作者: 啊兴    时间: 2014-2-24 10:35
在前面我们讲到
  # 命令窗口的光标位置的分支
      case @command_window.index#光标位置的分支就像事件指令里的选择项功能差不多。index是指光标
      when 0  # 新游戏
        command_new_game# 新游戏命令代入
      when 1  # 继续
        command_continue# 继续命令代入
      when 2  # 退出
        command_shutdown # 退出命令代入
      end# 结束
    end# 这里要注意有多少选择项就有多少结束
  end#
而后面 def command_new_game定义了这个原来游戏是层层代入的,不然脚本的长呵呵
如果想添加更多东西在这里加入 when 3呵呵你懂的。。
作者: 啊兴    时间: 2014-2-24 15:18
本帖最后由 啊兴 于 2014-2-24 16:12 编辑

   #--------------------------------------------------------------------------
  # ● 命令 : 继续
  #--------------------------------------------------------------------------
  def command_continue
    # 继续无效的情况下
    unless @continue_enabled#unless是一个和if相反的词相当于不满足所发生的情况
      # 演奏无效 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#返回scene
  end#结束
作者: 啊兴    时间: 2014-2-24 16:03
本帖最后由 啊兴 于 2014-2-24 16:04 编辑

  #--------------------------------------------------------------------------
  # ● 战斗测试
  #--------------------------------------------------------------------------
  def battle_test
    # 载入数据库 (战斗测试用)
    $data_actors        = load_data("Data/BT_Actors.rxdata")# 载入角色战斗数据库
    $data_classes       = load_data("Data/BT_Classes.rxdata")#载入职业战斗数据库
    $data_skills        = load_data("Data/BT_Skills.rxdata")#载入特技战斗数据库
    $data_items         = load_data("Data/BT_Items.rxdata")#载入物品战斗数据库
    $data_weapons       = load_data("Data/BT_Weapons.rxdata")#载入武器战斗数据库
    $data_armors        = load_data("Data/BT_Armors.rxdata")#载入防具战斗数据库
    $data_enemies       = load_data("Data/BT_Enemies.rxdata")#载入敌人战斗数据库
    $data_troops        = load_data("Data/BT_Troops.rxdata")#载入队伍战斗数据库
    $data_states        = load_data("Data/BT_States.rxdata")#载入状态战斗数据库
    $data_animations    = load_data("Data/BT_Animations.rxdata")#载入动画战斗数据库
    $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")#载入图块战斗数据库
    $data_common_events = load_data("Data/BT_CommonEvents.rxdata")#载入公共事件战斗数据库
    $data_system        = load_data("Data/BT_System.rxdata")#载入系统战斗数据库
    # 重置测量游戏时间用的画面计数器
    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_battle_test_members
    #$game_party处理同伴的类。包含金钱以及物品的信息。
    #载入编号再运行,就像老师在课堂上念的座位号你可以这样理解。
    #因为软件本身就不会翻译只能通过编号处理
    # 设置队伍 ID、可以逃走标志、战斗背景
    $game_temp.battle_troop_id = $data_system.test_troop_id
    # $game_temp在没有存档的情况下,处理临时数据的类。
    #battle_troop_id战斗队伍的ID代入系统附属数据id(即怪兽)
    $game_temp.battle_can_escape = true
    # $game_temp在没有存档的情况下判定是否逃走的真假,如果以后不用用到逃走系统其实这个可以不用。
    $game_map.battleback_name = $data_system.battleback_name
    # $game_map处理地图的类。包含卷动以及可以通行的判断功能。
   # battleback_name战斗背景图名字battleback在文件夹Graphics里能找到
    #即把战斗背景图名字代入系统附属战斗背景图名字
    # 演奏战斗开始 BGM
    $game_system.se_play($data_system.battle_start_se)
    # 演奏战斗 BGM
    $game_system.bgm_play($game_system.battle_bgm)
    # 切换到战斗画面
    $scene = Scene_Battle.new
  end#这里的两个结束其实是切换的战斗画面后需要有一个,def定义需要一个。
end
作者: 啊兴    时间: 2014-2-25 21:57
芯☆淡茹水 发表于 2014-2-23 09:23
battle_test#调用方法:battle_test
@command_window.x = 320 - @command_window.width / 2#窗口左右居中。 ...

谢谢修正。
作者: 啊兴    时间: 2014-2-25 23:08
本帖最后由 啊兴 于 2014-2-25 23:14 编辑

现在我们开始创建属于自己的窗口
class Scene_Ax
    def main

    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
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update #后面会有定义刷新
      # 如果画面被切换就中断循环
      if $scene != self
        break
      end
    end
    # 执行过渡
    Graphics.freeze
   #释放@command窗口
    @command_window.dispose
  end
  def update
    # 刷新命令窗口
    @command_window.update
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 命令窗口的光标位置的分支
      case @command_window.index
      when 0  # 新游戏
         $scene = Scene_Map.new
      when 1  # 继续
        $scene = Scene_Map.new
      when 2  # 退出
         $scene = Scene_Map.new
      end
    end
  end
end
#$scene = Scene_Ax.new
作者: 啊兴    时间: 2014-2-25 23:12
在事件指令输入这句话就变成嘻嘻(但是功能我还没有设置)
$scene = Scene_Ax.new

QQ图片20140225230943.jpg (22.52 KB, 下载次数: 9)

QQ图片20140225230943.jpg

作者: 啊兴    时间: 2014-3-1 09:48
大家看到后面黑黑的没什么那是因为我们没图进去我先在开始放图了我在Graphics文件夹里新建一个自己的文件夹Ax来放图片,我把我的图片放进去。然后在脚本   
里执行过渡前添加这句话
@ax = Sprite.new #把变量ax代入精灵
@ax.bitmap = Bitmap.new("Graphics/Ax/我的图片.png")#设置地图图片途径
在#释放@command窗口
下面添加    @ax.bitmap.dispose
脚本就变成这样
class Scene_Ax
    def main

    # 生成标题图形
    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
    @ax = Sprite.new
    @ax.bitmap = Bitmap.new("Graphics/Ax/我的图片.png")
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update #后面会有定义刷新
      # 如果画面被切换就中断循环
      if $scene != self
        break
      end
    end
    # 执行过渡
    Graphics.freeze
   #释放@command窗口
    @command_window.dispose
    @ax.bitmap.dispose

  end
  def update
    # 刷新命令窗口
    @command_window.update
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 命令窗口的光标位置的分支
      case @command_window.index
      when 0  # 新游戏
         $scene = Scene_Map.new
      when 1  # 继续
        $scene = Scene_Map.new
      when 2  # 退出
         $scene = Scene_Map.new
      end
    end
  end
end
作者: 啊兴    时间: 2014-3-1 09:57
在事件指令输入这句话就变成这样嘻嘻(图片png是格式一定得记得输。。)
$scene = Scene_Ax.new

QQ截图20140301095551.png (366.8 KB, 下载次数: 15)

QQ截图20140301095551.png

作者: 啊兴    时间: 2014-3-1 11:24
我们把五号变量做为仇恨度如图

仇恨度.png (19.59 KB, 下载次数: 12)

仇恨度.png

作者: 啊兴    时间: 2014-3-1 11:30
在Scene_Ax脚本里找得到这个
def update
    # 刷新命令窗口
    @command_window.update
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 命令窗口的光标位置的分支
      case @command_window.index
      when 0  # 新游戏
         $scene = Scene_Map.new
      when 1  # 继续
        $scene = Scene_Map.new
      when 2  # 退出
         $scene = Scene_Map.new
      end
    end
  end
end
在 when 0下面分别添加
$game_variables[5] = $game_variables[5] + 1#5号变量加一
在 when 1下面分别添加
$game_variables[5] = $game_variables[5] + 2#5号变量加二
在 when 2下面分别添加
$game_variables[5] = $game_variables[5] + 3#5号变量加三
就变成这样
def update
    # 刷新命令窗口
    @command_window.update
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 命令窗口的光标位置的分支
      case @command_window.index
      when 0  # 新游戏
         $game_variables[5] = $game_variables[5] + 1
         $scene = Scene_Map.new
      when 1  # 继续
        $game_variables[5] = $game_variables[5] + 2
        $scene = Scene_Map.new
      when 2  # 退出
         $game_variables[5] = $game_variables[5] + 3
         $scene = Scene_Map.new
      end
    end
  end
end

作者: 啊兴    时间: 2014-3-1 11:33
在事件指令里设置
变量仇恨度大于等于二时进行战斗如图

QQ截图20140301113257.png (44.94 KB, 下载次数: 8)

QQ截图20140301113257.png

作者: 天地有正气    时间: 2014-3-1 16:41
这个贴子从提问帖直接变身为教学贴了吗?
教学贴发在提问区应该不会扣分,但是会几乎没有奖励的经验~
作者: 啊兴    时间: 2014-3-1 16:48
现在开始讲下一个Scene
class Scene_Map 
#这是处理地图画面的类,是开始标题所调用的唯一活动块。
#在Scene_Title命令 : 新游戏  # 切换地图画面里有把这个调用这个  $scene = Scene_Map.new
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main#这是 Scene特有的分类主处理标志
    # 生成活动块
    @spriteset = Spriteset_Map.new
    # 生成信息窗口
    @message_window = Window_Message.new
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update#这个刷新后面有定义这里是代入
      # 如果画面切换的话就中断循环
      if $scene != self#这个经常用到是用来判定scene画面是否被切换
        break#中断循环
      end#结束
    end
    # 准备过渡
    Graphics.freeze
    # 释放活动块
    @spriteset.dispose
    # 释放信息窗口
    @message_window.dispose
    # 标题画面切换中的情况下
    if $scene.is_a?(Scene_Title)#判定是否为开始标题切换过来的
      # 淡入淡出画面
      Graphics.transition#执行过渡
      Graphics.freeze#准备过渡
    end结束
  end

作者: 啊兴    时间: 2014-3-1 16:58
天地有正气 发表于 2014-3-1 16:41
这个贴子从提问帖直接变身为教学贴了吗?
教学贴发在提问区应该不会扣分,但是会几乎没有奖励的经验~ ...

我是新手,写的不是教学也有些错误,我是想让一些前辈能指出我的错误,这样我才能进步,不需要奖励,这是过来和大家一起学习,共同进步。。。希望大家给出意见,多多交流共同进步。。
作者: 啊兴    时间: 2014-3-1 22:41
本帖最后由 啊兴 于 2014-3-2 10:23 编辑

  def update
    # 循环
    loop do
      # 按照地图、实例、主角的顺序刷新
      # (本更新顺序不会在满足事件的执行条件下成为给予角色瞬间移动
      #  的机会的重要因素)
      $game_map.update#$game_map 处理地图的类updat刷新
      $game_system.map_interpreter.update
      #game_system处理系统附属数据的类。
      #map地图interpreter事件指令
      #处理系统地图事件指令的刷新
      $game_player.update
      #处理主角的类的刷新
      # 系统 (计时器)、画面刷新
      $game_system.update     
      #game_system处理系统附属数据的类的刷新
      $game_screen.update
      #更改色调以及画面闪烁、保存画面全体关系处理数据的类的刷新
      # 如果主角在场所移动中就中断循环
      unless $game_temp.player_transferring
        # player_transferring
        # 主角场所移动标志这个Game_Temp最顶端的脚本有定义的实例变量
        #这里明显在教会我们如何使用实例变量
        #实例变量全局收索attr_accessor可以找到
        break#中断循环
      end#结束
      # 执行场所移动
      transfer_player#场所移动在后面有定义
      # 处理过渡中的情况下、中断循环
      if $game_temp.transition_processing
        #这个上面有讲运用实例变量主角场所移动标志
        #和上面不同得是unless 是指不满足的情况而下面是指满足的情况
        break#中断循环
      end#结束
    end
    # 刷新活动块
    @spriteset.update
    # 刷新信息窗口
    @message_window.update
    # 游戏结束的情况下
    if $game_temp.gameover
      #$是指全局变量这里也是调用了实例
     # gameover  # 游戏结束标志
      # 切换的游戏结束画面
      $scene = Scene_Gameover.new
      return#返回
    end#结束
    # 返回标题画面的情况下
    if $game_temp.to_title
      #如果to_title # 返回标题画面标志满足的情况下
      # 切换到标题画面
      $scene = Scene_Title.new
      return#返回
    end#结束
    # 处理过渡中的情况下
    if $game_temp.transition_processing
      #transition_processing  # 调用$game_temp中实例变量标志,过渡处理中标志
      # 清除过渡处理中标志
      $game_temp.transition_processing = false
      # 判定过渡处理中标志的赋值真伪真伪true、真为false
      #这个在Scene_Title开始标题中判定存档真假有相似之处
      #这样说能大家好理解些就是菜单或标题与场景移动所用的过渡处理不同。
      # 执行过渡
      if $game_temp.transition_name == ""
        #调用$game_temp 变量标志 transition_name # 过渡 文件名
        #把实例变量代入 ""在这里可以把他当成一个没放东西的包包,嘻嘻。
        Graphics.transition(20)
        #执行渐变过渡,后面的二十是指延长2秒时间
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
        #执行渐变过渡,后面的四十是指延长4秒时间
        #$game_temp.transition_name是过渡文件名,上面提过。
        #“”里的东西是装入包包的东西。实例变量无法在包包里。
        #包包不是所有东西都能装哦!要是女人的话一定不行,呵呵!说笑的。
      end#结束
    end
    # 显示信息窗口中的情况下
    if $game_temp.message_window_showing
      #调用$game_temp实例变量 message_window_showing# 显示信息窗口
      return#返回
    end#结束
    # 遇敌计数为 0 且、且遇敌列表不为空的情况下
    if $game_player.encounter_count == 0 and $game_map.encounter_list != []
      #encounter_count是获取遇敌计数在 $game_player  # ● 获取遇敌计数有定义
      #当遇敌计数为 0
      #encounter_list获取遇敌列表这个在$game_map中有定义
      #这个!在Scene_Title有出现过意思是被切换,这里是切换遇敌列表中敌人
      #在游戏软件坐下角地图名称中点有键在地图设置里可以看到遇敌率列表。
      #这里的意思是把遇敌率列表中敌人随机挑选。
      #这个中包包大家应该明白吧!这里要注意的是变量用的包包是中包包哦!嘻嘻。
      #而且=好只有一个哦!和上面对比就知道了
      # 不是在事件执行中或者禁止遇敌中
      unless $game_system.map_interpreter.running? or
             $game_system.encounter_disabled
          #调用$game_system实例标志map_interpreter # 地图事件用解释程序
          #running?执行中判定在Interpreter 1● 执行中判定中有定义。
          #连在一起就是地图事件执行中判定
          #or是或的意思
          #这个调用了 $game_system实例变量
          #encounter_disabledencounter_disabled # 禁止遇敌
          # unless 是不满足的情况
        # 确定队伍
        n = rand($game_map.encounter_list.size)
        #这个在game_map中有定义encounter_list意思是● 获取遇敌列表
        #size数量 rand是随机数并把他代入n
        #意思是随机获取遇敌列表中的敌人中的人数的数量代入n
        troop_id = $game_map.encounter_list[n]
        #troop_id : 循环 ID在Game_Enemy中有定义
        #encounter_list意思是● 获取遇敌列表
        #循环 ID代入实例变量中[n]是人数有多少人的意思
        # 队伍有效的话
        if $data_troops[troop_id] != nil
          #nil是以数组的形式放回
          #调用数据库中的敌人队伍
          #把循环 ID切换进敌人队伍中进行判定
          # 设置调用战斗标志
          $game_temp.battle_calling = true
          #调用game_temp实例变量中battle_calling # 调用战斗的标志
          # 判定处理中标志的赋值真伪真伪true、真为false
          $game_temp.battle_troop_id = troop_id
          #调用game_temp实例变量标志battle_troop_id  # 战斗队伍ID
          #把他代入troop_id : 循环 ID
          $game_temp.battle_can_escape = true
          #调用game_temp实例变量标志中battle_can_escape  # 战斗中 允许逃跑 ID
           # 判定处理中标志的赋值真伪真伪true、真为false
          $game_temp.battle_can_lose = false
          #调用game_temp实例变量标志中battle_can_lose # 战斗中 允许失败 ID
           # 判定处理中标志的赋值真伪真伪true、真为false
          $game_temp.battle_proc = nil
          #调用game_temp实例变量标志中battle_proc   # 战斗 返回调用 (Proc)
        end
      end
    end
   # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 不是在事件执行中或菜单禁止中
      unless $game_system.map_interpreter.running? or
             $game_system.menu_disabled
        # 设置菜单调用标志以及 SE 演奏
        $game_temp.menu_calling = true
        $game_temp.menu_beep = true
      end
    end
    # 调试模式为 ON 并且按下 F9 键的情况下
    if $DEBUG and Input.press?(Input::F9)
      # 设置调用调试标志
      $game_temp.debug_calling = true
      # 判定处理中标志的赋值真伪真伪true、真为false
    end
    # 不在主角移动中的情况下
    unless $game_player.moving?
      # 执行各种画面的调用
      if $game_temp.battle_calling#清除战斗调用标志
        call_battle #后面在调用战斗有定义这里是代入的意思
      elsif $game_temp.shop_calling# 清除商店调用标志
        call_shop#后面在调用商店有定义这里是代入的意思
      elsif $game_temp.name_calling # 清除调用名称输入标志
        call_name#后面在调用名称输入有定义这里是代入的意思
      elsif $game_temp.menu_calling # 清除菜单调用标志
        call_menu#后面在调用菜单有定义这里是代入的意思
      elsif $game_temp.save_calling# 清除存档调用标志
        call_save#后面在调用存档有定义这里是代入的意思
      elsif $game_temp.debug_calling# 清除调用调试标志
        call_debug#后面在调用调试有定义这里是代入的意思
      end
    end
  end
作者: 啊兴    时间: 2014-3-2 09:47
这个刷新太长估计有点乱我在这里简单讲解一下
loop do 这里运用了一个刷新的循环
让地图里都按照这个循环处理
之后编写了各类画面的刷新以及活动块的刷新
循环中断 在Transitions文件夹里拿图进行过渡
在遇敌列表中随机挑选队伍并判定人数
之后就调用各种战斗标志及清除各种战斗标志
呵呵地图循环内容真多呀!1
这里重点掌握如何调用game_temp的实例变量
作者: 啊兴    时间: 2014-3-2 09:51
  def call_battle#定义调用战斗
    # 清除战斗调用标志
    $game_temp.battle_calling = false
    #确认战斗调用标志为真
    # 清除菜单调用标志
    $game_temp.menu_calling = false
    #调用game_temp实例变量 menu_calling # 菜单调用标志
    $game_temp.menu_beep = false
    #调用game_temp实例变量menu_beep # 菜单 SE 演奏标志
    # 生成遇敌计数
    $game_player.make_encounter_count
    # 记忆地图 BGM 、停止 BGM
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    # 演奏战斗开始 SE
    $game_system.se_play($data_system.battle_start_se)
    # 演奏战斗 BGM
    $game_system.bgm_play($game_system.battle_bgm)
    # 矫正主角姿势
    $game_player.straighten
    # 切换到战斗画面
    $scene = Scene_Battle.new
  end
#和上面进行核对后记忆地图音乐让后停止他接着切换到战斗画面,战斗画面之后在Scene_Battle会有定义这里只是代入的意思。。
作者: 啊兴    时间: 2014-3-2 09:55
#--------------------------------------------------------------------------
  # ● 调用商店
  #--------------------------------------------------------------------------
  def call_shop#定义调用商店
    # 清除商店调用标志
    $game_temp.shop_calling = false
    #确认清除商店调用标志为真
    # 矫正主角姿势
    $game_player.straighten
    # 切换到商店画面
    $scene = Scene_Shop.new
  end
这里也是和上面核对后把切换到商店画面,商店画面在后面 Scene_Shop会有定义这里只是代入的意思。。
作者: 啊兴    时间: 2014-3-2 09:57
  #--------------------------------------------------------------------------
  # ● 调用名称输入
  #--------------------------------------------------------------------------
  def call_name
    # 清除调用名称输入标志
    $game_temp.name_calling = false
    #确认清除调用名称调用标志为真
    # 矫正主角姿势
    $game_player.straighten
    # 切换到名称输入画面
    $scene = Scene_Name.new
  end
这里也是和上面核对后把切换到名称输入,名称输入在后面Scene_Name会有定义这里只是代入的意思。。
作者: 啊兴    时间: 2014-3-2 10:01
  #--------------------------------------------------------------------------
  # ● 调用菜单
  #--------------------------------------------------------------------------
  def call_menu
    # 清除菜单调用标志
    $game_temp.menu_calling = false
      #确认菜单调用标志为真
    # 已经设置了菜单 SE 演奏标志的情况下
    if $game_temp.menu_beep
      #核对菜单 SE 演奏标志
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 清除菜单演奏 SE 标志
      $game_temp.menu_beep = false
    end
    # 矫正主角姿势
    $game_player.straighten
    # 切换到菜单画面
    $scene = Scene_Menu.new
  end
这里也是和上面核对后把切换到菜单,菜单在后面Scene_Menu会有定义这里只是代入的意思。。
作者: 啊兴    时间: 2014-3-2 10:04
  #--------------------------------------------------------------------------
  # ● 调用存档
  #--------------------------------------------------------------------------
  def call_save#定义调用存档
    # 矫正主角姿势
    $game_player.straighten
    # 切换到存档画面
    $scene = Scene_Save.new
  end
这里定义调用存档,切换到存档画面,存档画面在后面Scene_Save会有定义这里只是代入的意思。
作者: 啊兴    时间: 2014-3-2 10:06
  def call_debug
    # 清除调用调试标志
    $game_temp.debug_calling = false
    #确认清除调用调试标志为真
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 矫正主角姿势
    $game_player.straighten
    # 切换到调试画面
    $scene = Scene_Debug.new
  end
这里也是和上面核对后把切换调试画面,调试画面在后面Scene_Debug会有定义这里只是代入的意思。。
作者: 啊兴    时间: 2014-3-2 10:13
本帖最后由 啊兴 于 2014-3-2 10:16 编辑

战斗商店名称输入菜单存档画面我想大家都知道调试画面是什么样子呢?
在地图输入脚本 $scene = Scene_Debug.new
如图。。

QQ截图20140302101527.png (42.7 KB, 下载次数: 17)

QQ截图20140302101527.png

作者: 啊兴    时间: 2014-3-2 10:19
原来这里是开关和变量的显示窗口按下Esc然后按下F9试试

QQ截图20140302101724.png (90.73 KB, 下载次数: 11)

QQ截图20140302101724.png

作者: 啊兴    时间: 2014-3-2 10:47
  #--------------------------------------------------------------------------
  # ● 主角的场所移动
  #--------------------------------------------------------------------------
  def transfer_player#定义场所移动
    # 清除主角场所移动调试标志
    $game_temp.player_transferring = false
    #核对主角场所移动调试标志这个是在上面中断循环后在这里处理的
    # 移动目标与现在的地图有差异的情况下
    if $game_map.map_id != $game_temp.player_new_map_id
      #      地图 ID  !讲过切换的意思 # 主角 移动目标地图 ID
      #就是出发点切换到目标地的意思
      # 设置新地图
      $game_map.setup($game_temp.player_new_map_id)
      #在挂号里面优先处理 主角 移动目标地图 ID移动后在新地图里接受地图设置
      #setup在game_map中有定义
    end
    # 设置主角位置
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
     #moveto移动到指定位置
     #player_new_x  # 主角 移动目标 X 坐标
     #player_new_y  # 主角 移动目标 Y 坐标
    # 设置主角朝向
    case $game_temp.player_new_direction
    #player_new_direction  # 主角 移动目标 朝向
    when 2  # 下
      $game_player.turn_down
      #脸部朝下
    when 4  # 左
      $game_player.turn_left
      #脸部朝左
    when 6  # 右
      $game_player.turn_right
      #脸部朝右
    when 8  # 上
      $game_player.turn_up
      #脸部朝上
    end
    # 矫正主角姿势
    $game_player.straighten
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 在生成活动块
    @spriteset.dispose
    @spriteset = Spriteset_Map.new
    #释放活动块并调用Spriteset_Map
    # 处理过渡中的情况下
    if $game_temp.transition_processing
      #这个也是上面中断循环在这里处理
      # 清除过渡处理中标志
      $game_temp.transition_processing = false
      #核对过渡中的情况下
      # 执行过渡
      Graphics.transition(20)
    end
    # 执行地图设置的 BGM、BGS 的自动切换
    $game_map.autoplay
    # 设置画面
    Graphics.frame_reset
    # 刷新输入信息
    Input.update
  end
end

作者: RyanBern    时间: 2014-3-2 12:58
看你写得这么认真,都不忍心打断你了。不过不知道你注意到没有,从正气君那一楼开始,你就一直在连楼。如果说你的帖子不是教程贴,而是一个学习交流贴的话,它似乎没有起到它应有的效果。写这么多很累的,而且没有什么成效。论坛里面很多人还是不会脚本的,根本看不懂你在说些什么。回想当初我傻乎乎写教程的时候,也是这样,自己一个人跟说评书似的,一个回应也没有。因此如果新手练习的话,这样的东西写出来不能帮助你,还是亲自实践的效果比较好。

我的意思不是打消你学习的积极性,只是这种方法没有必要。不妨你自己写写脚本,模拟一下论坛中成型脚本的功能,自己写一个脚本能够实现相同功能,然后把论坛上的脚本拿来比对一下,看有什么不同。从比较的过程中,你自然会看到很多问题,好好琢磨一下,实在不懂的就拿出来问。总比你写一堆脚本注释,然后让我们跟判卷子似的找毛病要好。现在这样你写着也累,看帖子的也累。

找准问题关键问出来,这才是互相交流,互相进步。话扯得有点多,见谅。
作者: 啊兴    时间: 2014-3-2 13:20
本帖最后由 啊兴 于 2014-3-2 13:23 编辑
RyanBern 发表于 2014-3-2 12:58
看你写得这么认真,都不忍心打断你了。不过不知道你注意到没有,从正气君那一楼开始,你就一直在连楼。如果 ...


在Scene_Map中
Graphics.transition(40, "Graphics/Transitions/" +
$game_temp.transition_name)看到这里是执行过渡
在当初建立的Scene_Ax 中Graphics.transition
改成 Graphics.transition(40, "Graphics/Ax/我的图片.png" )#40是渐变时间
运行游戏就会看到过渡效果,文件调用途径可以自由更改,过渡图片随你选择什么图片。
嘻嘻(*^__^*) 嘻嘻……
作者: 啊兴    时间: 2014-3-2 13:22
RyanBern 发表于 2014-3-2 12:58
看你写得这么认真,都不忍心打断你了。不过不知道你注意到没有,从正气君那一楼开始,你就一直在连楼。如果 ...

既然在翻译上找不出错误,那就希望看看我的这些功能有那些需要改进,摆脱了,在此谢谢了
作者: 啊兴    时间: 2014-3-2 14:45
在Scene_Map下找到这行。
# 调试模式为 ON 并且按下 F9 键的情况下
    if $DEBUG and Input.press?(Input::F9)
      # 设置调用调试标志
      $game_temp.debug_calling = true
    end
既然调试窗口可以按F9调用那么自己创建的窗口能不能用按键调用呢?
在Game_Temp定量实例定义属于自己的实例变量
attr_accessor :ax # 啊兴调用标志
在Game_Temp初始化对像定义属于自己false
即@ax = false
在Scene_Map中
调试模式为 ON 并且按下 F9 键的情况下
end的后面添加
if  Input.press?(Input::F8)
    # 设置调用调试标志
    $game_temp.ax = true
  end
在Scene_Map中# 不在主角移动中的情况下
elsif $game_temp.debug_calling# 清除调用调试标志
call_debug#后面在调用调试有定义这里是代入的意思
这句后面添加
elsif $game_temp.ax# 清除啊兴调试标志
ax#后面在调用调试有定义这里是代入的意思
在● 调用调试end
后面添加
def ax
    # 清除调用调试标志
    $game_temp.ax = false
    #确认清除调用调试标志为真
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 矫正主角姿势
    $game_player.straighten
    # 切换到调试画面
    $scene = Scene_Ax.new
  end
运行界面发现按F8可以自由的调用自己的窗口。。F8可以F6呢?呵呵大家试一试不就知道吗?
作者: 啊兴    时间: 2014-3-2 15:34
终于讲到菜单窗口了
class Scene_Menu
#--------------------------------------------------------------------------
  # ● 初始化对像
  #     menu_index : 命令光标的初期位置
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
我们在这看到了初始化呵呵开始兴奋了,我们看到初始化menu_index为0 局部变量代入光标@menu_index = menu_index
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成命令窗口
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip#物品技能装备在调用需要用到数据库所以这里必须这样写。。
    s4 = "状态"
    s5 = "存档"
    s6 = "结束游戏"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
   #@command_window我们再熟悉不过了之前标题窗口就有调用
    @command_window.index = @menu_index
  #将@command_window光标对应@menu_index光标为0也就是左上角的位置
    # 同伴人数为 0 的情况下
    if $game_party.actors.size == 0#如果同伴数量为0的情况下
      # 物品、特技、装备、状态无效化
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    # 禁止存档的情况下
    if $game_system.save_disabled
      # 存档无效
      @command_window.disable_item(4)
    end
    # 生成游戏时间窗口
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    # 生成步数窗口
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    # 生成金钱窗口
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    # 生成状态窗口
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果切换画面就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end
作者: 啊兴    时间: 2014-3-2 15:55
本帖最后由 啊兴 于 2014-3-2 16:21 编辑

  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @command_window.update
    @playtime_window.update
    @steps_window.update
    @gold_window.update
    @status_window.update
    # 命令窗口被激活的情况下: 调用 update_command
    if @command_window.active
      update_command#这个后面有定义
      return
    end
    # 状态窗口被激活的情况下: 调用 update_status
    if @status_window.active
      update_status#这个后面有定义
      return
    end
  end
刷新各类窗口
作者: 啊兴    时间: 2014-3-2 16:25
  #--------------------------------------------------------------------------
  # ● 刷新画面 (命令窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_command
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换的地图画面
      $scene = Scene_Map.new
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 同伴人数为 0、存档、游戏结束以外的场合
      if $game_party.actors.size == 0 and @command_window.index < 4
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 命令窗口的光标位置分支
      case @command_window.index
      when 0  # 物品
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到物品画面
        $scene = Scene_Item.new
      when 1  # 特技
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 激活状态窗口
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # 装备
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 激活状态窗口
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # 状态
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 激活状态窗口
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 4  # 存档
        # 禁止存档的情况下
        if $game_system.save_disabled
          # 演奏冻结 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到存档画面
        $scene = Scene_Save.new
      when 5  # 游戏结束
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到游戏结束画面
        $scene = Scene_End.new
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (状态窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_status
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 激活命令窗口
      @command_window.active = true
      @status_window.active = false
      @status_window.index = -1
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 命令窗口的光标位置分支
      case @command_window.index
      when 1  # 特技
        # 本角色的行动限制在 2 以上的情况下
        if $game_party.actors[@status_window.index].restriction >= 2
          # 演奏冻结 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到特技画面
        $scene = Scene_Skill.new(@status_window.index)
      when 2  # 装备
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换的装备画面
        $scene = Scene_Equip.new(@status_window.index)
      when 3  # 状态
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到状态画面
        $scene = Scene_Status.new(@status_window.index)
      end
      return
    end
  end
end
作者: 啊兴    时间: 2014-3-7 10:09
Scene_Menu菜单窗口好长哦!晕。。
不怕我现在就把他删了。
首先把
生成命令窗口
    #s1 = $data_system.words.item
    #s2 = $data_system.words.skill
    #s3 = $data_system.words.equip
    #s4 = "状态"
    #s5 = "存档"
    #s6 = "结束游戏"
    #@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    #@command_window.index = @menu_index
删了
再把# 释放窗口中
    @command_window.dispose
删了
再把# 刷新窗口中
   @command_window.update
删了
再把
  # 命令窗口被激活的情况下: 调用 update_command
    if @command_window.active
      update_command#这个后面有定义
      return
    end
    # 状态窗口被激活的情况下: 调用 update_status
    if @status_window.active
      update_status#这个后面有定义
      return
删了

刷新画面 (命令窗口被激活的情况下)后面全删了。
作者: 啊兴    时间: 2014-3-7 10:11
就变成这样
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  处理菜单画面的类。
#==============================================================================

class Scene_Menu
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     menu_index : 命令光标的初期位置
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成命令窗口
    #s1 = $data_system.words.item
    #s2 = $data_system.words.skill
    #s3 = $data_system.words.equip
    #s4 = "状态"
    #s5 = "存档"
    #s6 = "结束游戏"
    #@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    #@command_window.index = @menu_index
    # 同伴人数为 0 的情况下
    if $game_party.actors.size == 0
      # 物品、特技、装备、状态无效化
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    # 禁止存档的情况下
    if $game_system.save_disabled
      # 存档无效
      @command_window.disable_item(4)
    end
    # 生成游戏时间窗口
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    # 生成步数窗口
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    # 生成金钱窗口
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    # 生成状态窗口
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果切换画面就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    #@command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    #@command_window.update
    @playtime_window.update
    @steps_window.update
    @gold_window.update
    @status_window.update
  end
end
哈哈短了好多咯!运行游戏看看。。
作者: 啊兴    时间: 2014-3-7 10:16
看到菜单选择项被我们删了,黑黑的部分显示出来了。
不过我们还是删得不够彻底啊!!我们得把时间,步数和金钱窗口也给删了。。

QQ截图20140307101218.png (103.09 KB, 下载次数: 11)

QQ截图20140307101218.png

作者: 啊兴    时间: 2014-3-7 10:30
# 生成游戏时间窗口 # 生成步数窗口# 生成金钱窗口
好吧!现在我不说你们也知道在哪里删除了,嘻嘻。Window_PlayTime,Window_Gold,Window_Steps在前面Window类都有定义。。
@playtime_window.dispose
@steps_window.dispose
@gold_window.dispose
@status_window.dispose
@playtime_window.update
@steps_window.update
@gold_window.update
@status_window.update
在刷新释窗口和刷新窗口也得删除。
作者: 啊兴    时间: 2014-3-7 10:31
本帖最后由 啊兴 于 2014-3-7 10:37 编辑

#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  处理菜单画面的类。
#==============================================================================

class Scene_Menu
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     menu_index : 命令光标的初期位置
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成命令窗口
    #s1 = $data_system.words.item
    #s2 = $data_system.words.skill
    #s3 = $data_system.words.equip
    #s4 = "状态"
    #s5 = "存档"
    #s6 = "结束游戏"
    #@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    #@command_window.index = @menu_index
    # 同伴人数为 0 的情况下
    if $game_party.actors.size == 0
      # 物品、特技、装备、状态无效化
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    # 禁止存档的情况下
    if $game_system.save_disabled
      # 存档无效
      @command_window.disable_item(4)
    end
    # 生成状态窗口
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果切换画面就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @status_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
@status_window.update
  end
end
删得好爽哦!脚本变得短且容易看。。
作者: 啊兴    时间: 2014-3-7 10:33
运行游戏后嘻嘻!就变成这样了

QQ截图20140307103239.png (88.53 KB, 下载次数: 16)

QQ截图20140307103239.png

作者: 啊兴    时间: 2014-3-7 11:00
本帖最后由 啊兴 于 2014-3-9 20:52 编辑

好吧!现在我们终于明白在main里可以运行多个窗口了,而这些窗口都属于window系列的,我们在window中找到Window_MenuStatus也就是我们还没有删除的
显示菜单画面和同伴状态的窗口。。我们可以看都   这里 super(0, 0, 480, 480)
第一个480是window窗口的宽第二个480是高0,0是X和y这个在菜单里重新定义了
在  Scene_Menu  
# 生成状态窗口
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
更改Scene_Menu的中xy看看有什么变化
呵呵!!
作者: 啊兴    时间: 2014-3-9 20:53
本帖最后由 啊兴 于 2014-3-12 23:12 编辑

接着我们在看看Window_MenuStatus并翻译他。
# ■ Window_MenuStatus
#------------------------------------------------------------------------------
#  显示菜单画面和同伴状态的窗口。
#==============================================================================

class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化目标
  #--------------------------------------------------------------------------
  def initialize#定义初始化
    super(0, 0, 480, 480)
    self.contents = Bitmap.new(width - 32, height - 32)#把位图代入精灵,并设置位图的宽和高。
    #位图是什么呢?我在菜单看到的只有角色的行走图,但这些图片都放在窗口里面
    #和我们之前的图片不同,32的大小刚好就是行走图的大小。
    refresh#刷新后面有定义
    self.active = false#光标是否闪烁
    self.index = -1#光标位置
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh#定义刷新
    self.contents.clear#清除位图全体clear是清除的意思
    @item_max = $game_party.actors.size
    #@item_max是返回的最大元素代入角色人数,即有多少人就有多少行的意思。。
    #如果有3人就显示3人的位图。
    for i in 0...$game_party.actors.size
      #这是个循环即把循环的角色数量代入变量i
      #从下面可以看到人数与y轴对应相关
      x = 64
      y = i * 116
      actor = $game_party.actors#以i即角色数量决定角色位置
      draw_actor_graphic(actor,x - 40, y + 80)#这个是行走图的位置
      draw_actor_name(actor, x, y)#这个是角色名字的位置
      draw_actor_class(actor, x + 144, y)#这个是角色还需要多少经验上升等级的位置
      #draw_actor_level(actor, x, y + 32)#这个是角色等级的位置
      draw_actor_state(actor, x + 90, y + 32)#这个是角色状态的位置
      draw_actor_exp(actor, x, y + 64)#这个是角色exp的位置
      draw_actor_hp(actor, x + 236, y + 32)#这个是角色hp的位置
      draw_actor_sp(actor, x + 236, y + 64)#这个是角色sp的位置
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新光标矩形
  #--------------------------------------------------------------------------
  def update_cursor_rect#刷新光标矩形
    if @Index < 0#如果光标小于0的场合
      self.cursor_rect.empty#光标矩形不变动
    else#除此之外
      self.cursor_rect.set(0, @Index * 116, self.width - 32, 96)
      # 更新光标矩形(x, y, 宽度, 高度)
    end
  end
end
  
作者: 啊兴    时间: 2014-3-9 20:55
更改xy调节窗口里面行走图,和各文字数字位置,你懂的呵呵O(∩_∩)O~
作者: 啊兴    时间: 2014-3-15 21:09
Scene的翻译会不断更新在此先讲明,希望大伙不要怪我连贴,这贴这是想和大家一起学习,共同进步。
作者: 啊兴    时间: 2014-3-15 21:15
在Scene_Menu里把@status_window的窗口更改为的xy更改为00,把Window_MenuStatus窗口super右边的括号里更改为(0, 64, 640, 416)运行游戏会发现。。

QQ图片20140315211510.jpg (23.82 KB, 下载次数: 20)

QQ图片20140315211510.jpg

作者: 啊兴    时间: 2014-3-15 21:20
本帖最后由 啊兴 于 2014-3-15 22:32 编辑

大家会发现状态窗口下的名字等级的字消失了那是被我删了
      #draw_actor_name(actor, x, y)
      #draw_actor_class(actor, x + 144, y)
      #draw_actor_level(actor, x, y + 32)
      #draw_actor_state(actor, x + 90, y + 32)
      #draw_actor_exp(actor, x, y + 64)
      #draw_actor_hp(actor, x + 236, y + 32)
      #draw_actor_sp(actor, x + 236, y + 64)
在Window_MenuStatus窗口这些东西前面都加上#我们要开始重新定义所有角色数据的xy
作者: 啊兴    时间: 2014-3-15 21:27
本帖最后由 啊兴 于 2014-3-15 22:34 编辑

  在  for i in 0...$game_party.actors.size
后面的xy都加上#因为我们要重定义xy所有得把xy删掉。
从Scene_Title也就是以前讲到过
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  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
从这里可以看出case光标位置的进行分支而@command_window.index是变量,我们就有样学样的,嘻嘻你懂的。
在actor = $game_party.actors
后面加上      case i
意思是把 i进行分支处理
when 0
actor = $game_party.actors[0]#一号角色代入actor
draw_actor_graphic(actor,40,  80)#一号角色代入的行走图以此类推。
when 1
actor = $game_party.actors[1]
draw_actor_graphic(actor, 40,180)
when 2
actor = $game_party.actors[2]
draw_actor_graphic(actor, 40,300)
when 3
actor = $game_party.actors[3]
draw_actor_graphic(actor, 40,360)
    end
  end
end
作者: 啊兴    时间: 2014-3-15 22:31
把Window_MenuStatus刷新更改为
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      case i
    when 0
      actor = $game_party.actors[0]
      draw_actor_graphic(actor,80,  100)
      draw_actor_name(actor, 90, 40)
      draw_actor_class(actor, 190, 40)
      draw_actor_level(actor, 250, 40)
      draw_actor_state(actor, 250, 60)
      draw_actor_exp(actor, 90, 100)
      draw_actor_hp(actor, 90, 60)
      draw_actor_sp(actor, 90, 80)
     when 1
      actor = $game_party.actors[1]
      draw_actor_graphic(actor, 350,100)
      draw_actor_name(actor, 360, 40)
      draw_actor_class(actor, 460, 40)
      draw_actor_level(actor, 520, 40)
      draw_actor_state(actor, 520, 60)
      draw_actor_exp(actor, 360, 100)
      draw_actor_hp(actor, 360, 60)
      draw_actor_sp(actor, 360, 80)
     when 2
      actor = $game_party.actors[2]
      draw_actor_graphic(actor, 80,200)
      draw_actor_name(actor, 90, 140)
      draw_actor_class(actor, 190, 140)
      draw_actor_level(actor, 250, 140)
      draw_actor_state(actor, 250, 160)
      draw_actor_exp(actor, 90, 200)
      draw_actor_hp(actor, 90, 160)
      draw_actor_sp(actor, 90, 180)
     when 3
      actor = $game_party.actors[3]
      draw_actor_graphic(actor, 350,200)
      draw_actor_name(actor, 360, 140)
      draw_actor_class(actor, 460, 140)
      draw_actor_level(actor, 520, 140)
      draw_actor_state(actor, 520, 160)
      draw_actor_exp(actor, 360, 200)
      draw_actor_hp(actor, 360, 160)
      draw_actor_sp(actor, 360, 180)
      end
    end
  end
我们把所有坐标都改了就变成这样
我对修改坐标比较懒惰希望大家不要吐槽。

QQ图片20140315222948.jpg (50.9 KB, 下载次数: 19)

QQ图片20140315222948.jpg

作者: 啊兴    时间: 2014-3-18 23:03
本帖最后由 啊兴 于 2014-3-18 23:05 编辑

全局收索draw_actor_graphic可以发现这个行走图在Window_Base中有定义
我现在就来开始讲解
  #--------------------------------------------------------------------------
  # ● 图形的描绘
  #     actor : 角色
  #     x     : 描画目标 X 坐标
  #     y     : 描画目标 Y 坐标
  #--------------------------------------------------------------------------
  def draw_actor_graphic(actor, x, y)
    bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)#代入角色行走图模块
    cw = bitmap.width / 4#矩形宽等于图片宽除于4
    ch = bitmap.height / 4#矩形高等于图片高除于4
    src_rect = Rect.new(0, 0, cw, ch)#显示图片内部图片矩形(x,y,宽,高)可以理解为用放大镜看东西,嘻嘻。
    self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)#(图片xy,bitmap和src_rect在这里是代入的意思)
  end

作者: 啊兴    时间: 2014-3-19 09:43
从图片可以看出,行走图的图片和状态窗口所显示的图片的区别,在状态窗口只显示4分之1的左上角人物行走图,我想大概大家能理解放大镜显示图片的意义和意思了吧!

001-Fighter01.png (5.55 KB, 下载次数: 14)

001-Fighter01.png

作者: 啊兴    时间: 2014-3-19 10:06
我们先把游戏中战斗图010-Lancer02导出放到Pictures文件夹夹中,也就是系统默认的战斗图。让后在Window_Base定义这张图片。
在def draw_actor_graphic(actor, x, y)的end后面添加
def draw_actor_ax( x, y)
   bitmap = RPG::Cache.picture("010-Lancer02")
   src_rect = Rect.new(0, 0, 200, 200)
   self.contents.blt(x , y, bitmap, src_rect)
  end
然后在Window_MenuStatus
actor = $game_party.actors[0]
后面添加draw_actor_ax(450,200)
然后就运行游戏如图。

QQ图片20140319100514.jpg (59.17 KB, 下载次数: 12)

QQ图片20140319100514.jpg

作者: 啊兴    时间: 2014-3-19 10:13
我们现在要显示该图的上半身部分该怎么做呢?在Window_Base里我们之前定义的那部分def draw_actor_ax( x, y)中找到这个  src_rect = Rect.new(0, 0, 200, 200)
把后面的200改成100  就变成这样src_rect = Rect.new(0, 0, 200, 100)然后运行游戏看看有什么变化。是不是很有趣呢!呵呵。

QQ图片20140319101134.jpg (54.15 KB, 下载次数: 7)

QQ图片20140319101134.jpg

作者: 啊兴    时间: 2014-3-19 14:13
  在Window_Base可以看到等级的描绘,我们可以在这里学到很多东西,先把这个翻译一下。
def draw_actor_level(actor, x, y)#这里是描绘角色等级的项目
    self.contents.font.color = system_color#把字体颜色代入系统文字色这个在Window_Base76行有定义
    self.contents.draw_text(x, y, 32, 32, "Lv")#写个Lv并定义矩形
    self.contents.font.color = normal_color#把字体颜色代入普通文字色这个在Window_Base74行有定义
    self.contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2)
    #将角色依次循环显示等级
  end#结束

作者: 啊兴    时间: 2014-3-19 15:20
system_color#把字体颜色代入系统文字色
我们在刷新的前面也定义自己的字体文字
def ax_color #定义啊兴字体颜色
    return Color.new(255, 255, 64, 255)
  end
作者: 啊兴    时间: 2014-3-19 15:22
本帖最后由 啊兴 于 2014-3-19 15:29 编辑

在后面定义啊兴教学字体
def draw_actor_zt(x, y)
    self.contents.font.color = ax_color
    self.contents.draw_text(x, y, 100, 100, "啊兴教学")
  end
在Window_MenuStatus 里actor = $game_party.actors后面添加
draw_actor_zt(70,300)
然后运行游戏

QQ图片20140319152705.jpg (56.33 KB, 下载次数: 13)

QQ图片20140319152705.jpg

作者: 啊兴    时间: 2014-3-19 15:47
在Scene_Menu
@status_window = Window_MenuStatus.new下面输入
@status_window.z =-1#使图片叠在窗口上面所有把状态窗口的z调得很低
@status_window.back_opacity = 0#把状态窗口透明度更改为o
如何载入图片前面有讲。

QQ图片20140319154637.jpg (152.85 KB, 下载次数: 8)

QQ图片20140319154637.jpg

作者: 凤龙飞    时间: 2014-3-20 07:23
谢谢啊兴同志努力更新,狂頂楼主,真的学到很多东西。。
作者: 啊兴    时间: 2014-3-20 09:05
凤龙飞 发表于 2014-3-20 07:23
谢谢啊兴同志努力更新,狂頂楼主,真的学到很多东西。。

感谢大家的给力支持,大家的支持是我写作的动力
作者: 啊兴    时间: 2014-3-20 09:06
很多选择性窗口都是调用了Command
包括Scene_Title处理标题画面的类Scene_Menu处理菜单画面的类Scene_End处理游戏结束画面的类
Scene_Battle处理战斗画面的类但他们都有一个共同点那就是选择项都是竖向的而不是横向的。
而Window_Command是Window_Selectable延伸出来的子类,你可以把Window_Selectable当做妈妈那么
Window_Command自然就是儿子,儿子血液里流着是母亲的血。
而选择项横向的有Window_Item 物品画面、战斗画面、显示浏览物品的窗口
Window_Skill特技画面、战斗画面、显示可以使用的特技浏览的窗口。
Window_EquipItem装备画面、显示浏览变更装备的候补物品的窗口
Window_ShopCommand 商店画面、选择要做的事的窗口
Window_PartyCommand战斗画面、选择战斗与逃跑的窗口
他们都是Window_Selectable的儿子
在这些窗口中都发现了这个@column_max
很明显者个是横向的的分化行数。
作者: 啊兴    时间: 2014-3-20 09:18
本帖最后由 啊兴 于 2014-3-20 09:45 编辑

我们现在制作横向的菜单,我是新手当然不会啦~\(≧▽≦)/~啦啦啦!不会制作可以模仿嘛!我们复制Window_ShopCommand也就是商店画面、选择要做的事的窗口
把他复制到Scene_Menu菜单窗口下面方便更改把一个的class Window_ShopCommand < Window_Selectable也就这个的儿子改了,改成这样class Window_Ax2 < Window_Selectable这就是我们的啊兴2号窗口,嘻嘻。(请无视我偷换孩子)在Scene_Menu中@status_window = Window_MenuStatus.new后面加入
@ax2_window = Window_Ax2.new在#释放窗口下面添加@ax2_window.dispose在 # 刷新窗口下面添加@ax2_window.update。运行游戏。

QQ图片20140320091746.jpg (149.32 KB, 下载次数: 7)

QQ图片20140320091746.jpg

作者: 啊兴    时间: 2014-3-20 09:26
看来窗口位置不符合我们的要求更改窗口位置很矩形前面有讲过现在就来从新温习一下。 在初始化定义 def initialize下面看到这个    super(0, 64, 480, 64)
把他更改为super(0, 0, 640, 64)
#super(窗口x坐标,窗口y坐标,窗口宽,窗口高)

QQ图片20140320091746.jpg (144.71 KB, 下载次数: 8)

QQ图片20140320091746.jpg

作者: 啊兴    时间: 2014-3-20 09:33
当然这还是不符合我们的要求
我们把这个@commands = ["买", "卖", "取消"]
改成    @commands = ["物品", "技能", "装备","状态","存档","退出"]
和@column_max = 3改成6行@column_max = 6

QQ图片20140320091746.jpg (146.48 KB, 下载次数: 7)

QQ图片20140320091746.jpg

作者: 啊兴    时间: 2014-3-20 09:38
字体显示出来了
字体是6行不错可是光标不是6行,我们在把最大返回元素更改为6@item_max = 3更改为6

QQ图片20140320091746.jpg (146.22 KB, 下载次数: 9)

QQ图片20140320091746.jpg

作者: 啊兴    时间: 2014-3-20 09:44
我们可以看到字体和光标矩形不重和在描绘项目
下面def draw_item(index)后面看到这个x = 4 + index * 160
这个的意思是字体的x坐标会更加index光标进行变化。
也就光标为一x就是4 + 1 * 160,如果是2就是4 + 2* 160
我们把x = 4 + index * 160更改为x =  index * 110

QQ图片20140320091746.jpg (148.25 KB, 下载次数: 11)

QQ图片20140320091746.jpg

作者: 啊兴    时间: 2014-3-20 09:53
啊兴2号窗口叠在图片上面不好看在@ax2_window = Window_Ax2.new也就是生成啊兴2号窗口下面添加
@ax2_window.z =-1
@ax2_window.back_opacity = 0
然啊兴2号的z变为最低让图片叠在上面并更改透明度为0

QQ图片20140320091746.jpg (157.04 KB, 下载次数: 13)

QQ图片20140320091746.jpg

作者: 啊兴    时间: 2014-3-20 10:16
本帖最后由 啊兴 于 2014-3-20 10:25 编辑

  我们把菜单窗口删除部分填补上
在 def update刷新窗口后面添加
   if @ax2_window.active
      update_command
      return
    end
    # 状态窗口被激活的情况下: 调用 update_status
    if @status_window.active
      update_status
      return
    end
在最后面添加
#--------------------------------------------------------------------------
  # ● 刷新画面 (命令窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_command
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换的地图画面
      $scene = Scene_Map.new
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 同伴人数为 0、存档、游戏结束以外的场合
      if $game_party.actors.size == 0 and @command_window.index < 4
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 命令窗口的光标位置分支
      case @ax2_window.index
      when 0  # 物品
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到物品画面
        $scene = Scene_Item.new
      when 1  # 特技
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 激活状态窗口
        @ax2_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # 装备
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 激活状态窗口
        @ax2_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # 状态
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 激活状态窗口
        @ax2_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 4  # 存档
        # 禁止存档的情况下
        if $game_system.save_disabled
          # 演奏冻结 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到存档画面
        $scene = Scene_Save.new
      when 5  # 游戏结束
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到游戏结束画面
        $scene = Scene_End.new
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (状态窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_status
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 激活命令窗口
      #@ax2_window.active = true
      @status_window.active = false
      @status_window.index = -1
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 命令窗口的光标位置分支
      case @ax2_window.index
      when 1  # 特技
        # 本角色的行动限制在 2 以上的情况下
        if $game_party.actors[@status_window.index].restriction >= 2
          # 演奏冻结 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到特技画面
        $scene = Scene_Skill.new(@status_window.index)
      when 2  # 装备
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换的装备画面
        $scene = Scene_Equip.new(@status_window.index)
      when 3  # 状态
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到状态画面
        $scene = Scene_Status.new(@status_window.index)
      end
      return
    end
  end


作者: 啊兴    时间: 2014-3-20 10:19
可以发现command窗口都被我们更改为ax2啊兴窗口了
作者: 啊兴2    时间: 2014-3-25 14:41
不好意思因为忘记密码,所以重新申请账号进来了。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1