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

Project1

 找回密码
 注册会员
搜索

求助,怎么把选择项从第2行开始

查看数: 1930 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-3-13 12:59

正文摘要:

RUBY 代码复制class Game_Actor  MAX_SKILL_NUM = 2  alias :rsn_learn_skill :learn_skill  def learn_skill(skill_id)    rsn_learn ...

回复

cinderelmini 发表于 2016-3-13 14:12:30
本帖最后由 cinderelmini 于 2016-3-13 21:48 编辑
  1. class Game_Actor
  2.   MAX_SKILL_NUM = 2
  3.   alias :rsn_learn_skill :learn_skill
  4.   def learn_skill(skill_id)
  5.     rsn_learn_skill(skill_id)
  6.     if @skills.size > MAX_SKILL_NUM
  7.       @window_rsn = Window_Forget_Skill.new(120 , 200 , 240 , 160 , self)
  8.       loop do
  9.         Graphics.update
  10.         Input.update
  11.         @window_rsn.update
  12.         break if @window_rsn.disposed?
  13.       end
  14.     end
  15.   end
  16. end

  17. class Window_Forget_Skill < Window_Selectable
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化对像
  20.   #     x      : 窗口 X 座标
  21.   #     y      : 窗口 Y 座标
  22.   #     width  : 窗口宽度
  23.   #     height : 窗口高度
  24.   #     actor  : 角色
  25.   #--------------------------------------------------------------------------
  26.   def initialize(x, y, width, height, actor)
  27.     super(x, y, width, height)
  28.     @actor = actor
  29.     @column_max = 1
  30.     self.index = 0
  31.     refresh
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 获取技能
  35.   #--------------------------------------------------------------------------
  36.   def skill
  37.     return @data[self.index]
  38.   end


  39.   #--------------------------------------------------------------------------
  40.   # ● 刷新
  41.   #--------------------------------------------------------------------------
  42.   def refresh
  43.     if self.contents != nil
  44.       self.contents.dispose
  45.       self.contents = nil
  46.     end
  47.     @data = []
  48.     for id in @actor.skills
  49.       @data.push($data_skills[id])
  50.     end
  51.     @item_max = @data.size
  52.     if @item_max > 0
  53.       self.contents = Bitmap.new(width - 32, (@item_max+1) * 32) # item_max加一行
  54.       self.contents.draw_text(0, 0, 120, 32, @actor.name)
  55.       for i in 0...@item_max
  56.         draw_item(i)
  57.       end
  58.     end
  59.   end
  60.   
  61.   #--------------------------------------------------------------------------
  62.   # ● 描绘项目
  63.   #     index : 项目编号
  64.   #--------------------------------------------------------------------------
  65.   def draw_item(index)
  66.     x = 4
  67.     y = (index+1) * 32  # index加1
  68.     skill = @data[index]
  69.     draw_item_name(skill, x, y)
  70.   end
  71.   
  72.   alias :rsn_update :update
  73.   def update
  74.     rsn_update
  75.     if Input.trigger?(Input::B)
  76.       $game_system.se_play($data_system.buzzer_se)
  77.       return
  78.     end
  79.     if Input.trigger?(Input::C)
  80.       $game_system.se_play($data_system.decision_se)
  81.       @actor.forget_skill(skill.id)
  82.       self.dispose
  83.       return
  84.     end
  85.   end
  86.   
  87.   #--------------------------------------------------------------------------
  88.   # ● 更新光标矩形
  89.   #--------------------------------------------------------------------------
  90.   def update_cursor_rect
  91.     # 光标位置不满 0 的情况下
  92.     if @index < 0
  93.       self.cursor_rect.empty
  94.       return
  95.     end
  96.     # 获取当前的行
  97.     row = (@index+1) / @column_max  #(index以进一位算)
  98.     # 当前行被显示开头行前面的情况下
  99.     if row < self.top_row
  100.       # 从当前行向开头行滚动
  101.       self.top_row = row
  102.     end
  103.     # 当前行被显示末尾行之后的情况下
  104.     if row > self.top_row + (self.page_row_max - 1)
  105.       # 从当前行向末尾滚动
  106.       self.top_row = row - (self.page_row_max - 1)
  107.     end
  108.     # 计算光标的宽度
  109.     cursor_width = self.width / @column_max - 32
  110.     # 计算光标坐标
  111.     #(坐标都以进一位算)
  112.     x = (@index+1) % @column_max * (cursor_width + 32)
  113.     y = (@index+1) / @column_max * 32 - self.oy
  114.     # 更新光标矩形
  115.     self.cursor_rect.set(x, y, cursor_width, 32)
  116.   end
  117.   
  118. end
复制代码
也许能成……

点评

楼层更新,这样应该可以了……  发表于 2016-3-13 21:47
然后那段里面有index的地方都改成index+1看看……  发表于 2016-3-13 21:42
应该不止第一行名字可选,最后一个选项应该也是不能选的(窝是说,可以按下确定键),可以把Selectable里面更新光标位置的那段复制过来。  发表于 2016-3-13 21:42
可以是可以了,不过第一行显示角色的名字也是可选择的。而不是在技能之间选择  发表于 2016-3-13 19:26

评分

参与人数 2星屑 +14 梦石 +1 收起 理由
RyanBern + 1 认可答案
yang1zhi + 14 认可答案

查看全部评分

夜狠简单 发表于 2016-3-13 13:53:57
def initialize(x, y, width, height, actor)
    super(x, y, width, height)
    @actor = actor
    @column_max = 1
    self.index = 1
    refresh
  end
试试
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-14 18:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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