Project1

标题: 获取图标的问题 [打印本页]

作者: 9244579    时间: 2008-3-7 02:02
标题: 获取图标的问题
   在窗口内,如何获取某技能的图标?
如:我在地图上弄了个窗口A
然后在菜单中选中技能B(图标一把剑)
按完后怎么样才能将在其图标自动放置图标A
  且,若在选次技能C,按下后又换成图标B [LINE]1,#dddddd[/LINE]此贴于 2008-3-11 11:49:43 被版主水迭澜提醒,请楼主看到后对本贴做出回应。
[LINE]1,#dddddd[/LINE]
----------------版务----------------
如果问题未解决,请继续提问
如果问题已解决,请结贴
若到末贴发贴时间后一周仍未结贴
管理员会自动为你过期帖子、结贴或强行认可答案(好人卡-1)

[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: Iselia雪    时间: 2008-3-7 04:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: 美兽    时间: 2008-3-7 05:34
一曲一行吟,一路一风尘。
作者: 水迭澜    时间: 2008-3-7 05:43
……= =完全不明白LZ的意思……到底是按下什么显示什么?
另菜单技能那地方的技能貌似是数组吧……
LS明显跑题,PIA飞
作者: 美兽    时间: 2008-3-7 05:46
以下引用水迭澜于2008-3-6 21:43:56的发言:

……= =完全不明白LZ的意思……到底是按下什么显示什么?
另菜单技能那地方的技能貌似是数组吧……
LS明显跑题,PIA飞


— —
我没看内容,直接根据标题写的,屏蔽好了……
作者: 9244579    时间: 2008-3-7 06:12
我昏,在地图中弄好了,4个窗口
。就是在技能菜单里,按下十字斩这个技能,然后返回到地图
选择4个窗口中的某一个
我选中了第一个,那么十字斩这个技能的图标就在窗口1中出现

作者: 水迭澜    时间: 2008-3-7 06:35
这么说吧,你还不如直接重写一个scene= =因为scene_skill和scene_map的数据判断完全不在一个地方= =|||这个的技术难度不高,而主要是刷新判断……
作者: 9244579    时间: 2008-3-7 21:28
  如何做````{/hx}{/hx}我愚
作者: 9244579    时间: 2008-3-8 03:41
谢了 急求
我加红!!!
效果。
已经在Scene_Map里生成好5个窗口
然后在游戏中按技能选单,选择某技能后,
切换到5个窗口的选择里。
就是光标在5个窗口里选择
选择第一个窗口,就将此技能图标放到了第一个窗口
即 技能放置快捷键效果了
五个窗口的快截键
A S D F G
如果放到第一个窗口
那么在游戏中按A,此技能生效!

作者: 水迭澜    时间: 2008-3-8 03:44
直接从我自己的工程里翻出来给你……

  1. class Game_Actor
  2.     attr_accessor   :set_skills                # 名称
  3.     alias new_initialize initialize
  4.     def initialize(actor_id)
  5.       @set_skills = []
  6.       for i in 0...5
  7.         @set_skills.push(0)
  8.       end
  9.       new_initialize(actor_id)
  10.     end
  11.   end

  12. #==============================================================================
  13. # ■ Window_SetupSkill
  14. #==============================================================================

  15. class Window_SetupSkill < Window_Selectable
  16.   #--------------------------------------------------------------------------
  17.   # ● 初始化对像
  18.   #     actor : 角色
  19.   #--------------------------------------------------------------------------
  20.   def initialize(actor)
  21.     super(0, 352, 640, 128)
  22.     @set_skills = actor.set_skills#[57,35,67,13,60]
  23.     @actor = actor
  24.     @column_max = 5
  25.     @item_max = 5
  26.     refresh
  27.     self.index = 0
  28.     # 战斗中的情况下将窗口移至中央并将其半透明化
  29.     if $game_temp.in_battle
  30.       self.y = 64
  31.       self.height = 256
  32.       self.back_opacity = 160
  33.     end
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 获取特技
  37.   #--------------------------------------------------------------------------
  38. #  def skill
  39. #    return @data[self.index]
  40. #  end
  41.   #--------------------------------------------------------------------------
  42.   # ● 刷新
  43.   #--------------------------------------------------------------------------
  44.   def refresh
  45.     if self.contents != nil
  46.       self.contents.dispose
  47.       self.contents = nil
  48.     end
  49.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  50.     self.contents = Bitmap.new(width - 32, height- 32)
  51.     self.contents.font.size = 16
  52.     if @set_skills != nil
  53.       for i in 0...@set_skills.size
  54.         draw_skill(i)
  55.       end
  56.     end
  57.   end
  58.   def draw_skill(i)
  59.     unless @set_skills[i] == 0
  60.       skill = $data_skills[@set_skills[i]]
  61.       if $game_party.actors[0].skill_can_use?(skill.id)
  62.         self.contents.font.color = normal_color
  63.       else
  64.         self.contents.font.color = disabled_color
  65.       end
  66.       x = 8 + 128 * i
  67.       y = 0
  68.       rect = Rect.new(x, y, 24, 24)
  69.       bitmap = RPG::Cache.icon(skill.icon_name)
  70.       opacity = self.contents.font.color == normal_color ? 255 : 128
  71.       self.contents.blt(x + 8, y + 24, bitmap, Rect.new(0, 0, 24, 24), opacity)
  72.       self.contents.draw_text(x, y, 204, 32, skill.name, 0)
  73.     end
  74.     self.contents.font.color = normal_color
  75.     self.contents.draw_text(12 + 128 * i, 32, 72, 24, KEY_NAME[i])
  76.   end
  77.   def update_cursor_rect
  78.     # 光标位置不满 0 的情况下
  79.     if @index < 0
  80.       self.cursor_rect.empty
  81.       return
  82.     end
  83.     # 获取当前的行
  84.     row = @index / @column_max
  85.     # 当前行被显示开头行前面的情况下
  86.     if row < self.top_row
  87.       # 从当前行向开头行滚动
  88.       self.top_row = row
  89.     end
  90.     # 当前行被显示末尾行之后的情况下
  91.     if row > self.top_row + (self.page_row_max - 1)
  92.       # 从当前行向末尾滚动
  93.       self.top_row = row - (self.page_row_max - 1)
  94.     end
  95.     # 计算光标的宽
  96.     cursor_width = self.width / @column_max - 32
  97.     # 计算光标坐标
  98.     x = @index % @column_max * (cursor_width + 32)
  99.     y = @index / @column_max * 32 - self.oy
  100.     # 更新国标矩形
  101.     self.cursor_rect.set(x, y, cursor_width, 64)
  102.   end
  103. end
复制代码
  1. #==============================================================================
  2. # ■ Window_Skill
  3. #------------------------------------------------------------------------------
  4. #  特技画面、战斗画面、显示可以使用的特技浏览的窗口。
  5. #==============================================================================

  6. class Window_Skill < Window_Selectable
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     actor : 角色
  10.   #--------------------------------------------------------------------------
  11.   def initialize(actor)
  12.     super(0, 128, 640, 224)
  13.     @actor = actor
  14.     @column_max = 2
  15.     refresh
  16.     self.index = 0
  17.     # 战斗中的情况下将窗口移至中央并将其半透明化
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 获取特技
  21.   #--------------------------------------------------------------------------
  22.   def skill
  23.     return @data[self.index]
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 刷新
  27.   #--------------------------------------------------------------------------
  28.   def refresh
  29.     if self.contents != nil
  30.       self.contents.dispose
  31.       self.contents = nil
  32.     end
  33.     @data = []
  34.     for i in [email protected]
  35.       skill = $data_skills[@actor.skills[i]]
  36.       if skill != nil
  37.         @data.push(skill)
  38.       end
  39.     end
  40.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  41.     @item_max = @data.size
  42.     if @item_max > 0
  43.       self.contents = Bitmap.new(width - 32, row_max * 32)
  44.       for i in 0...@item_max
  45.         draw_item(i)
  46.       end
  47.     end
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 描绘项目
  51.   #     index : 项目编号
  52.   #--------------------------------------------------------------------------
  53.   def draw_item(index)
  54.     skill = @data[index]
  55.     if @actor.skill_can_use?(skill.id)
  56.       self.contents.font.color = normal_color
  57.     else
  58.       self.contents.font.color = disabled_color
  59.     end
  60.     x = 4 + index % 2 * (288 + 32)
  61.     y = index / 2 * 32
  62.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  63.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  64.     bitmap = RPG::Cache.icon(skill.icon_name)
  65.     opacity = self.contents.font.color == normal_color ? 255 : 128
  66.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  67.     self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
  68.     self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 刷新帮助文本
  72.   #--------------------------------------------------------------------------
  73.   def update_help
  74.     @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  75.   end
  76. end
复制代码
  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_SetupSkill.new(@actor)
  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
  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.         # 激活目标窗口
  99.         @skill_window.active = false
  100.         @target_window.visible = true
  101.         @target_window.active = true
  102.         # 设置效果范围 (单体/全体) 的对应光标位置
  103.       return
  104.     end
  105.     # 按下 R 键的情况下
  106.     if Input.trigger?(Input::R)
  107.       # 演奏光标 SE
  108.       $game_system.se_play($data_system.cursor_se)
  109.       # 移至下一位角色
  110.       @actor_index += 1
  111.       @actor_index %= $game_party.actors.size
  112.       # 切换到别的特技画面
  113.       $scene = Scene_Skill.new(@actor_index)
  114.       return
  115.     end
  116.     # 按下 L 键的情况下
  117.     if Input.trigger?(Input::L)
  118.       # 演奏光标 SE
  119.       $game_system.se_play($data_system.cursor_se)
  120.       # 移至上一位角色
  121.       @actor_index += $game_party.actors.size - 1
  122.       @actor_index %= $game_party.actors.size
  123.       # 切换到别的特技画面
  124.       $scene = Scene_Skill.new(@actor_index)
  125.       return
  126.     end
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 刷新画面 (目标窗口被激活的情况下)
  130.   #--------------------------------------------------------------------------
  131.   def update_target
  132.     # 按下 B 键的情况下
  133.     if Input.trigger?(Input::B)
  134.       # 演奏取消 SE
  135.       $game_system.se_play($data_system.cancel_se)
  136.       # 删除目标窗口
  137.       @skill_window.active = true
  138.       @target_window.visible = false
  139.       @target_window.active = false
  140.       return
  141.     end
  142.     # 按下 C 键的情况下
  143.     if Input.trigger?(Input::C)
  144.       # 因为 SP 不足而无法使用的情况下
  145.       $game_system.se_play($data_system.decision_se)
  146.       @actor.set_skills[@target_window.index] = @skill.id
  147.       @target_window.refresh
  148.       return
  149.     end
  150.   end
  151. end
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 9244579    时间: 2008-3-8 03:48
让我试试,若成功,加赏~
作者: 9244579    时间: 2008-3-8 05:19
#    self.contents.draw_text(12 + 128 * i, 32, 72, 24, KEY_NAME)
你这是写什么的?




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