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

Project1

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

[已经解决] 【求助】技能选择框

[复制链接]

Lv1.梦旅人

梦石
0
星屑
66
在线时间
140 小时
注册时间
2012-2-6
帖子
384
跳转到指定楼层
1
发表于 2012-3-28 16:38:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
就是类似VA自带物品选择处理的技能选择处理。首先给出角色ID,然后选择,最后可以把技能编号赋值到变量的这样的脚本。
签名是什么?可以吃么?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
334 小时
注册时间
2011-10-21
帖子
413
2
发表于 2012-3-28 16:52:20 | 只看该作者
本帖最后由 消失的三千 于 2012-3-28 18:40 编辑

这貌似用来制作地图技能的吧?
我试写个看看……




原本想要仿物品选择处理,不过太困难了= =所以转用界面来选择了(原谅我吧OTL)
用法
62行可以更改控制ID(A变量)
然后变更A变量为保存技能ID的变量ID(B变量)
  1. SceneManager.call(Scene_SkillChoice)
复制代码
这语句用来打开界面
打开界面前请把B变量归零
  1. class Window_Skill < Window_Selectable
  2.   def initialize(x, y, width, height)
  3.     super
  4.     @actor = nil
  5.     @stype_id = 0
  6.     @data = []
  7.   end
  8.   def actor=(actor)
  9.     return if @actor == actor
  10.     @actor = actor
  11.     refresh
  12.     self.oy = 0
  13.   end
  14.   def stype_id=(stype_id)
  15.     return if @stype_id == stype_id
  16.     @stype_id = stype_id
  17.     refresh
  18.     self.oy = 0
  19.   end
  20.   def col_max
  21.     return 2
  22.   end
  23.   def item_max
  24.     @data ? @data.size : 1
  25.   end
  26.   def item
  27.     @data && index >= 0 ? @data[index] : nil
  28.   end
  29.   def include?(item)
  30.     item && item.stype_id == @stype_id
  31.   end
  32.   def make_item_list
  33.     @data = @actor ? @actor.skills.select {|skill| include?(skill) } : []
  34.   end
  35.   def draw_item(index)
  36.     skill = @data[index]
  37.     if skill
  38.       rect = item_rect(index)
  39.       rect.width -= 4
  40.       draw_item_name(skill, rect.x, rect.y)
  41.     end
  42.   end
  43.   def update_help
  44.     @help_window.set_item(item)
  45.   end
  46.   def refresh
  47.     make_item_list
  48.     create_contents
  49.     draw_all_items
  50.   end
  51.   def process_ok
  52.     Sound.play_ok
  53.     Input.update
  54.     deactivate
  55.     call_ok_handler
  56.   end
  57. end

  58. class Scene_SkillChoice < Scene_MenuBase
  59.   def start
  60.     super
  61.     @vid = $game_variables[10]
  62.     create_background
  63.     create_command_window
  64.     create_item_window
  65.     @status_window = Window_MenuStatus.new(80, 0)
  66.     @status_window.select_last
  67.     @status_window.activate
  68.     @status_window.set_handler(:ok,     method(:select_actor))
  69.     @status_window.set_handler(:cancel, method(:return_scene))
  70.   end
  71.   def create_command_window
  72.     @command_window = Window_SkillCommand.new(0, 0)
  73.     @command_window.viewport = @viewport
  74.     @command_window.help_window = @help_window
  75.     @command_window.openness = 0
  76.     @command_window.set_handler(:skill,    method(:select_skill))
  77.     @command_window.set_handler(:cancel,   method(:return_select_actor))
  78.     @command_window.set_handler(:pagedown, method(:next_actor))
  79.     @command_window.set_handler(:pageup,   method(:prev_actor))
  80.   end
  81.   def create_item_window
  82.     @skill_window = Window_Skill.new(64, 64, 416, 288)
  83.     @skill_window.help_window = @help_window
  84.     @skill_window.index = 0
  85.     @skill_window.openness = 0
  86.     @skill_window.set_handler(:ok,     method(:choice_skill))
  87.     @skill_window.set_handler(:cancel, method(:return_select_skill))
  88.     @command_window.skill_window = @skill_window
  89.   end
  90.   def select_actor
  91.     @status_window.close
  92.     @skill_window.actor = $game_party.members[@status_window.index]
  93.     @skill_window.open
  94.     @command_window.actor = $game_party.members[@status_window.index]
  95.     @command_window.open
  96.     @command_window.activate
  97.   end
  98.   def return_select_actor
  99.     @command_window.close
  100.     @skill_window.close
  101.     @status_window.open
  102.     @status_window.activate
  103.   end
  104.   def select_skill
  105.     @command_window.close
  106.     @skill_window.actor = $game_party.members[@status_window.index]
  107.     @skill_window.activate
  108.   end
  109.   def return_select_skill
  110.     @command_window.actor = $game_party.members[@status_window.index]
  111.     @command_window.open
  112.     @command_window.activate
  113.   end
  114.   def choice_skill
  115.     $game_variables[@vid] = @skill_window.item.id
  116.     p $game_variables[@vid]
  117.     SceneManager.return
  118.   end
  119. end
复制代码
好吧我这渣渣在前辈面前献丑了……Orz

点评

太好了!!其实已经很不错了,谢谢!  发表于 2012-3-28 19:02
比如说,看到冰块,触发事件之后可以选择火球术化冰。。。就这样的  发表于 2012-3-28 17:49

评分

参与人数 1星屑 +14 收起 理由
杂兵天下 + 14 我很赞同

查看全部评分

我是活着的死人哦
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
140 小时
注册时间
2012-2-6
帖子
384
3
 楼主| 发表于 2012-3-28 19:06:20 | 只看该作者
消失的三千 发表于 2012-3-28 20:52
这貌似用来制作地图技能的吧?
我试写个看看……

稍微找一个BUG吧

  1. class Scene_SkillChoice < Scene_MenuBase
  2.   def choice_skill
  3.     begin
  4.       $game_variables[@vid] = @skill_window.item.id
  5.       SceneManager.return
  6.     rescue
  7.       #选择空技能的SKIP处理
  8.     end
  9.   end
  10. end
复制代码

点评

所以才要打开界面前把B变量归零,然后0为无选择道具XD  发表于 2012-3-28 19:22
恩,忘了该怎么表达了,我说的SKIP其实就是容错的意思。。。。  发表于 2012-3-28 19:08
签名是什么?可以吃么?
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 02:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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