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

Project1

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

[已经解决] 为什么这个技能脚本不能展示技能说明?

[复制链接]

Lv1.梦旅人

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

Lv1.梦旅人

梦石
0
星屑
50
在线时间
40 小时
注册时间
2011-12-10
帖子
23
10
发表于 2012-2-9 11:16:33 | 只看该作者
好人真多!
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2011-10-21
帖子
31
9
 楼主| 发表于 2012-2-9 00:21:09 | 只看该作者
谢谢你了,8楼就是正确的解决方案。
十分感谢你
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
57 小时
注册时间
2009-7-9
帖子
124
8
发表于 2012-2-8 20:37:58 | 只看该作者
  1. def set_text(text, align = 0)
  2.     # 如果文本和对齐方式的至少一方与上次的不同
  3.     if text != @text or align != @align
  4.       # 再描绘文本
  5.       self.contents.clear
  6.       self.contents.font.color = normal_color
  7.       if $scene.is_a?(Scene_Skill)
  8.       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  9.       else  
  10.       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  11.       end
  12.       @text = text
  13.       @align = align
  14.       @actor = nil
  15.     end
  16.     self.visible = true
  17.   end
复制代码

点评

class Window_Help < Window_Base  发表于 2012-2-8 20:39
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2011-10-21
帖子
31
7
 楼主| 发表于 2012-2-8 19:54:06 | 只看该作者
写入进去了,脚本的这一段如下:
  1. 24   # 生成帮助窗口、状态窗口、特技窗口
  2.   25  @help_window = Window_Help.new
  3.   26  @status_window = Window_SkillStatus.new(@actor)
  4.    27 @skill_window = Window_Skill.new(@actor)
  5. 28   # 关联帮助窗口
  6. 29   if $scene.is_a?(Scene_Skill)
  7.   30  # self.z = 1000
  8.    31   self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  9.   32  @skill_window.help_window = @help_window
  10.   33  # 生成目标窗口 (设置为不可见・不活动)
复制代码
前面的数字是行数,我还在这一大段的结尾加了个“end”,游戏才能正常进去。
但问题是,又出现了如图所示的错误

接下来该如何处理呢?

点评

后面那句不要加  发表于 2012-2-8 20:38
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
57 小时
注册时间
2009-7-9
帖子
124
6
发表于 2012-2-8 16:39:57 | 只看该作者
Window_Help

29行

if $scene.is_a?(Scene_Skill)
     # self.z = 1000
      self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
x坐标设置错了
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2011-10-21
帖子
31
5
 楼主| 发表于 2012-2-8 16:13:07 | 只看该作者
这就是脚本了,拜托了啊

Scripts.rxdata

268.74 KB, 下载次数: 27

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
57 小时
注册时间
2009-7-9
帖子
124
4
发表于 2012-2-8 15:03:00 | 只看该作者
把脚本data/Scripts.rxdata,弄上来,很多人都会帮你搞的。{:1_12:}@

点评

脚本已经发了  发表于 2012-2-8 16:13
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2011-10-21
帖子
31
3
 楼主| 发表于 2012-2-8 14:43:21 | 只看该作者
awyb3110 发表于 2012-2-7 17:03
没有什么问题,没描述而已吧,没有这个词description,这里肯定没有描述吧。

要把全部工程发给你吗?那样岂不太麻烦了?
直接指出问题在哪里就行了,谢谢了
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
57 小时
注册时间
2009-7-9
帖子
124
2
发表于 2012-2-7 17:03:02 | 只看该作者
没有什么问题,没描述而已吧,没有这个词description,这里肯定没有描述吧。


‘‘

class Window_Skill < Window_Selectable
def update_help
    @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  end
end
加在mian前试试,
不行的话你把整个脚本发上来,我帮你弄。


──awyb3110于2012-2-7 18:51补充以上内容’’

点评

直接把上面的复制到mian前,跟脚本一样吧。  发表于 2012-2-7 22:18
如果是缺了这个的话,怎么添加呢?  发表于 2012-2-7 17:34
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 15:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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