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

Project1

 找回密码
 注册会员
搜索

请教下同名技能不显示的问题

查看数: 1932 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2009-4-21 04:08

正文摘要:

本帖最后由 霜冻之狼 于 2009-7-5 22:32 编辑 我原来的打算是做出这种效果: 角色的技能列表里,如果有名字一样的技能. 那么只显示威力最大的技能,其他的则不可见... 特地来请教下怎么制作这种效果,如果回答详细的话 ...

回复

紫苏 发表于 2009-4-22 05:46:27
以下引用霜冻之狼于2009-4-21 17:05:38的发言:

很感谢...紫苏不介意在脚本中插入一些注释吧?说实话我有点看不明白.

更新了~
霜冻之狼 发表于 2009-4-22 01:05:38
以下引用tommay于2009-4-20 20:24:25的发言:
既然不能显示威力较小的特技名称,也就不能使用威力较小的特技,是这样吗?

的确是这样的....抱歉没有说清楚,是我不对.

以下引用紫苏于2009-4-21 5:13:38的发言:
插入以下脚本

很感谢...紫苏不介意在脚本中插入一些注释吧?说实话我有点看不明白.

紫苏 发表于 2009-4-21 13:13:38
插入以下脚本:
class Window_Skill
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    # 要显示到窗口中的技能的集合
    @data = []
    for i in [email protected]
      skill = $data_skills[@actor.skills]
      if skill != nil
        # 从第一个元素开始检查
        j = 0
        # 在已经添加的技能集合中搜索同名技能
        while j < @data.length
          # 如果发现集合中同名的技能
          if skill.name == @data[j].name &&
            # 且当前准备添加的技能威力大于该同名技能
            skill.power.abs >= @data[j].power.abs
            # 将该同名技能替换为当前准备添加的威力更大的技能
            @data[j] = skill
            # 跳出检查同名的循环(每次只有可能有一个同名技能)
            break
          end
          # 索引加一,检查集合下一个元素
          j += 1
        end
        # 循环结束,如果循环检查到了同名技能
        # 循环会 j 一定在等于集合长度之前跳出;
        # 如果并没有发现同名技能,循环会一直检查到集合最后
        # j 会在最后一个元素索引的基础上再加一,于是变成了集合的长度
        # j < @data.length 不满足,循环结束
        # 所以这里用集合的长度判断是否没有找到同名的技能
        # 没有找到的话就把当前准备添加的技能直接添加到技能集合中

        @data.push(skill) if j == @data.length
      end
    end
    # 如果项目数不是 0 就生成位图、重新描绘全部项目
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
end


红色部分是在原脚本基础上新增的语句
在 skill.power 那个地方判断的是威力的绝对值,因为考虑到治疗技能的威力是负数,这个如果不需要的话可以将 .abs 的调用去掉~

另外很重要的一点就是:
这是线性搜索,效率不高,运算时间呈线性增长,角色的技能越多搜索同名技能的时间就越长
这主要是因为技能数组的长度未知,而且技能并非是以名称顺序排列的(默认是按数据库 ID 排列)
如果角色的技能很多,在打开技能窗口的时候就会很慢,这样的话应该考虑在将技能显示进窗口的时候就按照名称排序~
如果角色的技能很少,那么这个效率上的差别基本上可以忽略了

版主对此帖的认可:『强大{/qiang}』,积分『+251』。
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
tommay 发表于 2009-4-21 04:24:25
既然不能显示威力较小的特技名称,也就不能使用威力较小的特技,是这样吗?
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2025-7-23 09:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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