Project1

标题: 请教制作一个简单的技能选择窗口的简单的方法 [打印本页]

作者: taeckle    时间: 2022-5-12 19:54
标题: 请教制作一个简单的技能选择窗口的简单的方法
本帖最后由 taeckle 于 2022-5-14 07:11 编辑

我想搞一个简单的技能选择窗口,类似于地图事件里的显示选择项指令,选择窗口里是一个个技能的名称,选择窗口里的内容会随$game_variables[1] (注意这里$game_variables[1]是个一维数组,里面的元素对应的是技能的ID)变化而变化, 在选择窗口里点确定后全队都将学会此技能,具体要求还有三个:

1.这个技能选择窗口分上下两个部分上面部分就是一句话:"现在想学习哪个技能呢? ",然后下面部分展现的是$game_variables[1]数组里面的一个个元素(比如$game_variables[1]是[1,3,4,8,12]的话那么在下面部分由上到下出现的选项就是第1号技能的名称、第3号技能的名称、第4号技能的名称、第8号技能的名称、第12号技能的名称)

2. $game_variables[1]的大小(size)不是固定的,如果$game_variables[1]内的元素过多无法保证在一页内把所有元素显示出来需保证按“下”或"上"方向键时所有元素都可以显示出来。


3.禁止使用地图事件事件指令中显示选择项(什么上一页下一页的,根本无法显示出诸位大神的神威)


当然最后还是要越简单越好,不算父类Window_Selectable最好能在100行内能搞定
作者: RPGzh500223    时间: 2022-5-12 20:09
既然你自己都说是“简单的选择框”,何不自己写
作者: alexncf125    时间: 2022-5-12 20:11
XP的大佬们是不是太宠这LZ了?
怎么次次都有大佬肯当工具人的?
作者: taeckle    时间: 2022-5-12 20:26
alexncf125 发表于 2022-5-12 20:11
XP的大佬们是不是太宠这LZ了?
怎么次次都有大佬肯当工具人的?

咱也有写,也有分享自己的方法,比如我这个贴子(https://rpg.blue/thread-488851-1-1.html) 只是我写的方法大神们觉得太烂,只能鼓起勇气不耻上问了。。

还比如这个帖子(https://rpg.blue/thread-486514-1-1.html),我在这个帖子的后面几楼在大神给的脚本基础上做了一些改进,也算是为论坛做出贡献了
作者: guoxiaomi    时间: 2022-5-13 14:16
有没有一种可能性,你已经写好了一个满足以上所有条件的版本,但是不肯拿出来让大家看看?
作者: taeckle    时间: 2022-5-13 15:28
本帖最后由 taeckle 于 2022-5-13 15:29 编辑
guoxiaomi 发表于 2022-5-13 14:16
有没有一种可能性,你已经写好了一个满足以上所有条件的版本,但是不肯拿出来让大家看看? ...


我自己写的有bug,每次选择结束就会跳出。。。。大神你敢不敢瞅一眼,保证把你气个半死
作者: RyanBern    时间: 2022-5-13 23:35
去看看 R5

https://rpg.blue/forum.php?mod=viewthread&tid=389343
作者: taeckle    时间: 2022-5-14 07:01
本帖最后由 taeckle 于 2022-5-15 03:02 编辑

下面公布答案(总共192行,$game_variables[1]需首先是个一维数组):

#==============================================================================
class Scene_Skisele < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize(id,limit=[])   
    @id = id
    @limit = limit      
    @skill_lv = 0
  end  

  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    @screen = Spriteset_Map.new
    #技能选择窗口上面部分
    @skill_list_upper = Skill_list_upper.new
    @skill_list_upper.draw_text
    @skill_list_upper.active = true   
    @skill_list_upper.visible = true
    @skill_list_upper.x = 137
    @skill_list_upper.y = 90   
    @skill_list_upper.opacity = 120
    #技能选择窗口
    @skill_list_window = Window_Skill_List.new(@id,@limit)
    @skill_list_window.active = true
    @skill_list_window.visible = true
    @skill_list_window.opacity = 120   
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @skill_list_upper.dispose      
    @skill_list_window.dispose
    @screen.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
     @screen.update
     @skill_list_window.update   
     if Input.trigger?(Input::B)
      @skill_list_upper.active = false   
      @skill_list_upper.visible = false         
      @skill_list_window.active = false
      @skill_list_window.visible = false        
      $game_system.se_play($data_system.cancel_se)     
      $scene = Scene_Map.new     
     return
     end
     if Input.trigger?(Input::C)
      @skill_list_upper.active = false   
      @skill_list_upper.visible = false        
      @skill_list_window.active = false
      @skill_list_window.visible = false     
      for i in 0...$game_party.actors.size
      $game_party.actors.learn_skill(@skill_list_window.learn_content[@skill_list_window.index])
      end
      p "恭喜全队都学会了技能 #{$data_skills[@skill_list_window.learn_content[@skill_list_window.index]].name}"
      $scene = Scene_Map.new     
     return
     end
  end
end

#================================文字提示===================================

class Skill_list_upper < Window_Base
  def initialize
    super(0, 0, 366, 72)
    self.contents = Bitmap.new(width - 32, height - 32)  
  end  
  def draw_text
    self.contents.clear
    self.contents.font.size = 23
    self.contents.font.color = system_color
    self.contents.draw_text(40, 5, self.width - 32, 32, "现在想学习哪个技能呢?")
  end  
end

#==============================================================================
class Window_Skill_List < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize(id,limit)
    super(137, 50, 366, 360)
    @id = id
    @limit = limit
    @column_max = 1
    @item_max = @id.size
    if @item_max>=8
    self.height = 288
    else
    self.height = @item_max*32+32
    end
    self.y = 162
    self.opacity = 160
    self.index = 0
    refresh   
  end
  #--------------------------------------------------------------------------
  # ● 获取物品
  #--------------------------------------------------------------------------
  def skill
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● 给对象调用参数用的
  #--------------------------------------------------------------------------  
  def learn_content
    return @id
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data=[]
    for i in @id
    skill_id = $data_skills
    @data.push(skill_id)
    end   
    @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
  #--------------------------------------------------------------------------
  # ● 描绘羡慕
  #     index : 项目编号
  #--------------------------------------------------------------------------
  def draw_item(index)
    skill = @data[index]
    self.contents.font.color = normal_color
    if @limit[index] != nil
     lv = @limit[index]
    else
     lv = 10
    end
    x = 2
    y = index * 32
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    case skill.name.size
    when 0..18
    self.contents.font.size = 20
    when 19..24
    self.contents.font.size = 16
    when 25..30
    self.contents.font.size = 12
    end
    self.contents.draw_text(x + 28, y, 212, 32, skill.name, 0)   
  end
end

技能选择窗口(数组控制_修订版).rar

189.5 KB, 下载次数: 5

技能选择窗口






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