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

Project1

 找回密码
 注册会员
搜索
查看: 888|回复: 2
打印 上一主题 下一主题

技能调用公共事件错误

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
60 小时
注册时间
2008-8-27
帖子
531
跳转到指定楼层
1
发表于 2009-1-18 21:28:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
我做了一个只能在菜单里使用的即能 使用后调用公共事件改变角色行走图和穿透on
公共事件截图如下

进入游戏后一使用该即能就发生错误,截图如下


它说错误的脚本如下
  1. #==============================================================================
  2. # ■ Scene_Skill
  3. #------------------------------------------------------------------------------
  4. #  处理特技画面的类。
  5. #==============================================================================

  6. class Scene_Skill
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     actor_index : 角色索引
  10.   #--------------------------------------------------------------------------
  11.   def initialize(actor_index = 0, equip_index = 0)
  12.     @actor_index = actor_index
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 主处理
  16.   #--------------------------------------------------------------------------
  17.   def main
  18.     #==========================
  19.    
  20.     @help2 = Sprite.new
  21.     @help2.bitmap = Bitmap.new("Graphics/menu/帮助窗口使用.png")
  22.     @help2.x = 15
  23.     @help2.y = -20
  24.     @help2.z = 100
  25.     #==============================
  26.    
  27.     @backsp1 = Sprite.new
  28.     @backsp1.bitmap = Bitmap.new("Graphics/menu/底板.png")
  29.     @backsp1.z = 99
  30.     @backsp2 = Sprite.new
  31.     @backsp2.bitmap = Bitmap.new("Graphics/menu/物品.png")
  32.     @backsp2.x = 15
  33.     @backsp2.y = 115
  34.     @backsp2.z = 101
  35.     #=============================================================
  36.     # 获取角色
  37.     @actor = $game_party.actors[@actor_index]
  38.     # 生成帮助窗口、状态窗口、特技窗口
  39.     @help_window = Window_Help.new
  40.     @skill_window = Window_Skill.new(@actor)
  41.     # 关联帮助窗口
  42.     @skill_window.help_window = @help_window
  43.     # 生成目标窗口 (设置为不可见・不活动)
  44.     @target_window = Window_Target.new
  45.     @target_window.visible = false
  46.     @target_window.active = false
  47.     # 执行过渡
  48.     Graphics.transition
  49.     # 主循环
  50.     loop do
  51.       # 刷新游戏画面
  52.       Graphics.update
  53.       # 刷新输入信息
  54.       Input.update
  55.       # 刷新画面
  56.       update
  57.       # 如果画面切换的话就中断循环
  58.       if $scene != self
  59.         break
  60.       end
  61.     end
  62.     # 准备过渡
  63.     Graphics.freeze
  64.     # 释放窗口
  65.     @backsp1.dispose
  66.     @backsp2.dispose
  67.     @help2.dispose
  68.     @help_window.dispose
  69.     @skill_window.dispose
  70.     @target_window.dispose
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 刷新画面
  74.   #--------------------------------------------------------------------------
  75.   def update
  76.     # 刷新窗口
  77.     @help_window.update
  78.     @skill_window.update
  79.     @target_window.update
  80.     # 特技窗口被激活的情况下: 调用 update_skill
  81.     if @skill_window.active
  82.       update_skill
  83.       return
  84.     end
  85.     # 目标窗口被激活的情况下: 调用 update_target
  86.     if @target_window.active
  87.       update_target
  88.       return
  89.     end
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 刷新画面 (特技窗口被激活的情况下)
  93.   #--------------------------------------------------------------------------
  94.   def update_skill
  95.     # 按下 B 键的情况下
  96.     if Input.trigger?(Input::B)
  97.       # 演奏取消 SE
  98.       $game_system.se_play($data_system.cancel_se)
  99.       # 切换到菜单画面
  100.       $scene = Scene_Menu.new(1)
  101.       return
  102.     end
  103.     # 按下 C 键的情况下
  104.     if Input.trigger?(Input::C)
  105.       # 获取特技窗口现在选择的特技的数据
  106.       @skill = @skill_window.skill
  107.       # 不能使用的情况下
  108.       if @skill == nil or not @actor.skill_can_use?(@skill.id)
  109.         # 演奏冻结 SE
  110.         $game_system.se_play($data_system.buzzer_se)
  111.         return
  112.       end
  113.       # 演奏确定 SE
  114.       $game_system.se_play($data_system.decision_se)
  115.       # 效果范围是我方的情况下
  116.       if @skill.scope >= 3
  117.         # 激活目标窗口
  118.         @skill_window.active = false
  119.         @target_window.visible = true
  120.         @target_window.active = true
  121.         # 设置效果范围 (单体/全体) 的对应光标位置
  122.         if @skill.scope == 4 || @skill.scope == 6
  123.           @target_window.index = -1
  124.         elsif @skill.scope == 7
  125.           @target_window.index = @actor_index - 10
  126.         else
  127.           @target_window.index = 0
  128.         end
  129.       # 效果在我方以外的情况下
  130.       else
  131.         # 公共事件 ID 有效的情况下
  132.         if @skill.common_event_id > 0
  133.           # 预约调用公共事件
  134.           $game_temp.common_event_id = @skill.common_event_id
  135.           # 演奏特技使用时的 SE
  136.           $game_system.se_play(@skill.menu_se)
  137.           # 消耗 SP
  138.           @actor.sp -= @skill.sp_cost
  139.           # 再生成各窗口的内容
  140.           @status_window.refresh
  141.           @skill_window.refresh
  142.           @target_window.refresh
  143.           # 切换到地图画面
  144.           $scene = Scene_Map.new
  145.           return
  146.         end
  147.       end
  148.       return
  149.     end
  150.     # 按下 R 键的情况下
  151.     if Input.trigger?(Input::R)
  152.       # 演奏光标 SE
  153.       $game_system.se_play($data_system.cursor_se)
  154.       # 移至下一位角色
  155.       @actor_index += 1
  156.       @actor_index %= $game_party.actors.size
  157.       # 切换到别的特技画面
  158.       $scene = Scene_Skill.new(@actor_index)
  159.       return
  160.     end
  161.     # 按下 L 键的情况下
  162.     if Input.trigger?(Input::L)
  163.       # 演奏光标 SE
  164.       $game_system.se_play($data_system.cursor_se)
  165.       # 移至上一位角色
  166.       @actor_index += $game_party.actors.size - 1
  167.       @actor_index %= $game_party.actors.size
  168.       # 切换到别的特技画面
  169.       $scene = Scene_Skill.new(@actor_index)
  170.       return
  171.     end
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ● 刷新画面 (目标窗口被激活的情况下)
  175.   #--------------------------------------------------------------------------
  176.   def update_target
  177.     # 按下 B 键的情况下
  178.     if Input.trigger?(Input::B)
  179.       # 演奏取消 SE
  180.       $game_system.se_play($data_system.cancel_se)
  181.       # 删除目标窗口
  182.       @skill_window.active = true
  183.       @target_window.visible = false
  184.       @target_window.active = false
  185.       return
  186.     end
  187.     # 按下 C 键的情况下
  188.     if Input.trigger?(Input::C)
  189.       # 因为 SP 不足而无法使用的情况下
  190.       unless @actor.skill_can_use?(@skill.id)
  191.         # 演奏冻结 SE
  192.         $game_system.se_play($data_system.buzzer_se)
  193.         return
  194.       end
  195.       # 目标是全体的情况下
  196.       if @target_window.index == -1
  197.         # 对同伴全体应用特技使用效果
  198.         used = false
  199.         for i in $game_party.actors
  200.           used |= i.skill_effect(@actor, @skill)
  201.         end
  202.       end
  203.       # 目标是使用者的情况下
  204.       if @target_window.index <= -2
  205.         # 对目标角色应用特技的使用效果
  206.         target = $game_party.actors[@target_window.index + 10]
  207.         used = target.skill_effect(@actor, @skill)
  208.       end
  209.       # 目标是单体的情况下
  210.       if @target_window.index >= 0
  211.         # 对目标角色应用特技的使用效果
  212.         target = $game_party.actors[@target_window.index]
  213.         used = target.skill_effect(@actor, @skill)
  214.       end
  215.       # 使用特技的情况下
  216.       if used
  217.         # 演奏特技使用时的 SE
  218.         $game_system.se_play(@skill.menu_se)
  219.         # 消耗 SP
  220.         @actor.sp -= @skill.sp_cost
  221.         # 再生成各窗口内容
  222.         @skill_window.refresh
  223.         # 全灭的情况下
  224.         if $game_party.all_dead?
  225.           # 切换到游戏结束画面
  226.           $scene = Scene_Gameover.new
  227.           return
  228.         end
  229.         # 公共事件 ID 有效的情况下
  230.         if @skill.common_event_id > 0
  231.           # 预约调用公共事件
  232.           $game_temp.common_event_id = @skill.common_event_id
  233.           # 切换到地图画面
  234.           $scene = Scene_Map.new
  235.           return
  236.         end
  237.       end
  238.       # 无法使用特技的情况下
  239.       unless used
  240.         # 演奏冻结 SE
  241.         $game_system.se_play($data_system.buzzer_se)
  242.       end
  243.       return
  244.     end
  245.   end
  246. end
复制代码

此贴于 2009-1-24 18:00:06 被版主darkten提醒,请楼主看到后对本贴做出回应。
版务信息:本贴由楼主自主结贴~

Lv1.梦旅人

梦石
0
星屑
50
在线时间
60 小时
注册时间
2008-8-27
帖子
531
2
 楼主| 发表于 2009-1-18 23:27:30 | 只看该作者
就是那个脚本的问题 我换成rm默认的scene_skill 脚本就不错误了 背景是黑的
因为我用的是新仙剑的菜单  求懂得脚本的人帮我解决啊
默认scene_skill 脚本如下
  1. #==============================================================================
  2. # ■ Scene_Skill
  3. #------------------------------------------------------------------------------
  4. #  处理特技画面的类。
  5. #==============================================================================

  6. class Scene_Skill
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     actor_index : 角色索引
  10.   #--------------------------------------------------------------------------
  11.   def initialize(actor_index = 0, equip_index = 0)
  12.     @actor_index = actor_index
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 主处理
  16.   #--------------------------------------------------------------------------
  17.   def main
  18.     # 获取角色
  19.     @actor = $game_party.actors[@actor_index]
  20.     # 生成帮助窗口、状态窗口、特技窗口
  21.     @help_window = Window_Help.new
  22.     @status_window = Window_SkillStatus.new(@actor)
  23.     @skill_window = Window_Skill.new(@actor)
  24.     # 关联帮助窗口
  25.     @skill_window.help_window = @help_window
  26.     # 生成目标窗口 (设置为不可见・不活动)
  27.     @target_window = Window_Target.new
  28.     @target_window.visible = false
  29.     @target_window.active = false
  30.     # 执行过渡
  31.     Graphics.transition
  32.     # 主循环
  33.     loop do
  34.       # 刷新游戏画面
  35.       Graphics.update
  36.       # 刷新输入信息
  37.       Input.update
  38.       # 刷新画面
  39.       update
  40.       # 如果画面切换的话就中断循环
  41.       if $scene != self
  42.         break
  43.       end
  44.     end
  45.     # 准备过渡
  46.     Graphics.freeze
  47.     # 释放窗口
  48.     @help_window.dispose
  49.     @status_window.dispose
  50.     @skill_window.dispose
  51.     @target_window.dispose
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 刷新画面
  55.   #--------------------------------------------------------------------------
  56.   def update
  57.     # 刷新窗口
  58.     @help_window.update
  59.     @status_window.update
  60.     @skill_window.update
  61.     @target_window.update
  62.     # 特技窗口被激活的情况下: 调用 update_skill
  63.     if @skill_window.active
  64.       update_skill
  65.       return
  66.     end
  67.     # 目标窗口被激活的情况下: 调用 update_target
  68.     if @target_window.active
  69.       update_target
  70.       return
  71.     end
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 刷新画面 (特技窗口被激活的情况下)
  75.   #--------------------------------------------------------------------------
  76.   def update_skill
  77.     # 按下 B 键的情况下
  78.     if Input.trigger?(Input::B)
  79.       # 演奏取消 SE
  80.       $game_system.se_play($data_system.cancel_se)
  81.       # 切换到菜单画面
  82.       $scene = Scene_Menu.new(1)
  83.       return
  84.     end
  85.     # 按下 C 键的情况下
  86.     if Input.trigger?(Input::C)
  87.       # 获取特技窗口现在选择的特技的数据
  88.       @skill = @skill_window.skill
  89.       # 不能使用的情况下
  90.       if @skill == nil or not @actor.skill_can_use?(@skill.id)
  91.         # 演奏冻结 SE
  92.         $game_system.se_play($data_system.buzzer_se)
  93.         return
  94.       end
  95.       # 演奏确定 SE
  96.       $game_system.se_play($data_system.decision_se)
  97.       # 效果范围是我方的情况下
  98.       if @skill.scope >= 3
  99.         # 激活目标窗口
  100.         @skill_window.active = false
  101.         @target_window.x = (@skill_window.index + 1) % 2 * 304
  102.         @target_window.visible = true
  103.         @target_window.active = true
  104.         # 设置效果范围 (单体/全体) 的对应光标位置
  105.         if @skill.scope == 4 || @skill.scope == 6
  106.           @target_window.index = -1
  107.         elsif @skill.scope == 7
  108.           @target_window.index = @actor_index - 10
  109.         else
  110.           @target_window.index = 0
  111.         end
  112.       # 效果在我方以外的情况下
  113.       else
  114.         # 公共事件 ID 有效的情况下
  115.         if @skill.common_event_id > 0
  116.           # 预约调用公共事件
  117.           $game_temp.common_event_id = @skill.common_event_id
  118.           # 演奏特技使用时的 SE
  119.           $game_system.se_play(@skill.menu_se)
  120.           # 消耗 SP
  121.           @actor.sp -= @skill.sp_cost
  122.           # 再生成各窗口的内容
  123.           @status_window.refresh
  124.           @skill_window.refresh
  125.           @target_window.refresh
  126.           # 切换到地图画面
  127.           $scene = Scene_Map.new
  128.           return
  129.         end
  130.       end
  131.       return
  132.     end
  133.     # 按下 R 键的情况下
  134.     if Input.trigger?(Input::R)
  135.       # 演奏光标 SE
  136.       $game_system.se_play($data_system.cursor_se)
  137.       # 移至下一位角色
  138.       @actor_index += 1
  139.       @actor_index %= $game_party.actors.size
  140.       # 切换到别的特技画面
  141.       $scene = Scene_Skill.new(@actor_index)
  142.       return
  143.     end
  144.     # 按下 L 键的情况下
  145.     if Input.trigger?(Input::L)
  146.       # 演奏光标 SE
  147.       $game_system.se_play($data_system.cursor_se)
  148.       # 移至上一位角色
  149.       @actor_index += $game_party.actors.size - 1
  150.       @actor_index %= $game_party.actors.size
  151.       # 切换到别的特技画面
  152.       $scene = Scene_Skill.new(@actor_index)
  153.       return
  154.     end
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 刷新画面 (目标窗口被激活的情况下)
  158.   #--------------------------------------------------------------------------
  159.   def update_target
  160.     # 按下 B 键的情况下
  161.     if Input.trigger?(Input::B)
  162.       # 演奏取消 SE
  163.       $game_system.se_play($data_system.cancel_se)
  164.       # 删除目标窗口
  165.       @skill_window.active = true
  166.       @target_window.visible = false
  167.       @target_window.active = false
  168.       return
  169.     end
  170.     # 按下 C 键的情况下
  171.     if Input.trigger?(Input::C)
  172.       # 因为 SP 不足而无法使用的情况下
  173.       unless @actor.skill_can_use?(@skill.id)
  174.         # 演奏冻结 SE
  175.         $game_system.se_play($data_system.buzzer_se)
  176.         return
  177.       end
  178.       # 目标是全体的情况下
  179.       if @target_window.index == -1
  180.         # 对同伴全体应用特技使用效果
  181.         used = false
  182.         for i in $game_party.actors
  183.           used |= i.skill_effect(@actor, @skill)
  184.         end
  185.       end
  186.       # 目标是使用者的情况下
  187.       if @target_window.index <= -2
  188.         # 对目标角色应用特技的使用效果
  189.         target = $game_party.actors[@target_window.index + 10]
  190.         used = target.skill_effect(@actor, @skill)
  191.       end
  192.       # 目标是单体的情况下
  193.       if @target_window.index >= 0
  194.         # 对目标角色应用特技的使用效果
  195.         target = $game_party.actors[@target_window.index]
  196.         used = target.skill_effect(@actor, @skill)
  197.       end
  198.       # 使用特技的情况下
  199.       if used
  200.         # 演奏特技使用时的 SE
  201.         $game_system.se_play(@skill.menu_se)
  202.         # 消耗 SP
  203.         @actor.sp -= @skill.sp_cost
  204.         # 再生成各窗口内容
  205.         @status_window.refresh
  206.         @skill_window.refresh
  207.         @target_window.refresh
  208.         # 全灭的情况下
  209.         if $game_party.all_dead?
  210.           # 切换到游戏结束画面
  211.           $scene = Scene_Gameover.new
  212.           return
  213.         end
  214.         # 公共事件 ID 有效的情况下
  215.         if @skill.common_event_id > 0
  216.           # 预约调用公共事件
  217.           $game_temp.common_event_id = @skill.common_event_id
  218.           # 切换到地图画面
  219.           $scene = Scene_Map.new
  220.           return
  221.         end
  222.       end
  223.       # 无法使用特技的情况下
  224.       unless used
  225.         # 演奏冻结 SE
  226.         $game_system.se_play($data_system.buzzer_se)
  227.       end
  228.       return
  229.     end
  230.   end
  231. end
复制代码

回复 支持 反对

使用道具 举报

Lv1.梦旅人

指引者

梦石
0
星屑
50
在线时间
2 小时
注册时间
2005-10-25
帖子
375
3
发表于 2009-1-23 22:02:38 | 只看该作者
刷新错误 找不到该方法

我想看下你技能的属性是怎么设置的

仙剑菜单的技能脚本可能会牵扯到一些图片的显示
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
↓这是啥-- [IMG][/IMG]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2025-1-18 18:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表