Project1

标题: 请教如何在Scene场景里新建窗口及文字说明? [打印本页]

作者: 文雅夕露    时间: 2018-1-21 21:17
标题: 请教如何在Scene场景里新建窗口及文字说明?
就是在Scene场景里新建窗口,并且用来做玩家操作出现无效的时候,弹出提示的窗口。
如:
RUBY 代码复制
  1. @help1_window = Window_Base.new(80, 168, 400, 64)
  2.     @help1_window.contents = Bitmap.new(368, 32)
  3.     string = "該技能使用的時機不對哦。"
  4.     @help1_window.contents.draw_text(4, 0, 368, 32, string,1)
  5.     @help1_window.visible = false
  6.     @help1_window.z = 9999
  7.     @help1_window.opacity = 192

以上是XP/VX的写法。
但是VA的脚本简略了,反而无法入手了。
话说该怎么样写入这种功能呢?
作者: 芯☆淡茹水    时间: 2018-1-21 22:08
好像是这样的
  1. @help1_window = Window_Base.new(80, 168, 400, 64)  
  2. string = "該技能使用的時機不對哦。"
  3. @help1_window.draw_text(4, 0, 368, 32, string,1)
  4. @help1_window.hide
  5. @help1_window.z = 9999
  6. @help1_window.opacity = 192
复制代码

作者: 文雅夕露    时间: 2018-1-21 22:31
芯☆淡茹水 发表于 2018-1-21 22:08
好像是这样的

稍后试试看。
那该怎么显示这个提示呢?
在哪里才能显示呢?
在XP/VX里,我可以找错误提示音来添加这段。
如:
  1. Sound.play_buzzer
  2. @help1_window.visible = true
  3. 30.times{Graphics.update}
  4. @help1_window.visible = false
复制代码

VA简化了,连提示音的脚本都找不到,该如何显示呢?
作者: 张咚咚    时间: 2018-1-22 00:22
本帖最后由 张咚咚 于 2018-1-22 00:28 编辑

VA是使用Window_Command的add_command方法来添加命令到@list,格式是{:name=>name, :symbol=>symbol}
创建命令窗口后,通过Window_Selectable的set_handler方法绑定symbol字符到指定的method方法存储到@handler

@list是存命令光标的 [  {:name=>"选项一", :symbol=>:first}, {:name=>"选项二", :symbol=>:second},...  ]
@handler是存对应的命令字符所执行的方法 {:first => method(:command_first), :first => method(:command_second),... }

看Window_Selectable的update方法就是刷新光标和按键触发,这里也就是按键判断,按下C键的判断是执行process_ok方法,
这里面是判断光标是否有效状态,无效播放Sound.play_buzzer,有效的就取光标索引的symbol,在调用绑定的method,
多看一下继承和复写的方法应该就明白结构了
作者: 芯☆淡茹水    时间: 2018-1-22 11:42
文雅夕露 发表于 2018-1-21 22:31
稍后试试看。
那该怎么显示这个提示呢?
在哪里才能显示呢?

在场景刷新那儿随时判断就行了,

@help1_window.show if 技能使用的時機不對
作者: 文雅夕露    时间: 2018-1-22 21:55
芯☆淡茹水 发表于 2018-1-22 11:42
在场景刷新那儿随时判断就行了,

@help1_window.show if 技能使用的時機不對

瞎改的,不起效果,还是哪里弄错了...
RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_ItemList
  4. #------------------------------------------------------------------------------
  5. #  物品画面中,显示持有物品的窗口。
  6. #==============================================================================
  7.  
  8. class Window_ItemList < Window_Selectable
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对象
  11.   #--------------------------------------------------------------------------
  12.   def initialize(x, y, width, height)
  13.     super
  14.     @category = :none
  15.     @data = []
  16.     ###
  17.     @help1_window = Window_Base.new(80, 168, 400, 64)  
  18.     string = "該物品使用的時機不對哦。"
  19.     @help1_window.draw_text(4, 0, 368, 32, string,1)
  20.     @help1_window.hide
  21.     @help1_window.z = 9999
  22.     @help1_window.opacity = 192
  23.     ###
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 设置分类
  27.   #--------------------------------------------------------------------------
  28.   def category=(category)
  29.     return if @category == category
  30.     @category = category
  31.     refresh
  32.     self.oy = 0
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 获取列数
  36.   #--------------------------------------------------------------------------
  37.   def col_max
  38.     return 2
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 获取项目数
  42.   #--------------------------------------------------------------------------
  43.   def item_max
  44.     @data ? @data.size : 1
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 获取物品
  48.   #--------------------------------------------------------------------------
  49.   def item
  50.     @data && index >= 0 ? @data[index] : nil
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 获取选择项目的有效状态
  54.   #--------------------------------------------------------------------------
  55.   def current_item_enabled?
  56.     enable?(@data[index])
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 查询列表中是否含有此物品
  60.   #--------------------------------------------------------------------------
  61.   def include?(item)
  62.     case @category
  63.     when :item
  64.       item.is_a?(RPG::Item) && !item.key_item?
  65.     when :weapon
  66.       item.is_a?(RPG::Weapon)
  67.     when :armor
  68.       item.is_a?(RPG::Armor)
  69.     when :key_item
  70.       item.is_a?(RPG::Item) && item.key_item?
  71.     else
  72.       false
  73.     end
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 查询此物品是否可用
  77.   #--------------------------------------------------------------------------
  78.   def enable?(item)
  79.     $game_party.usable?(item)
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 生成物品列表
  83.   #--------------------------------------------------------------------------
  84.   def make_item_list
  85.     @data = $game_party.all_items.select {|item| include?(item) }
  86.     @data.push(nil) if include?(nil)
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 返回上一个选择的位置
  90.   #--------------------------------------------------------------------------
  91.   def select_last
  92.     select(@data.index($game_party.last_item.object) || 0)
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 绘制项目
  96.   #--------------------------------------------------------------------------
  97.   def draw_item(index)
  98.     item = @data[index]
  99.     if item
  100.       rect = item_rect(index)
  101.       rect.width -= 4
  102.       draw_item_name(item, rect.x, rect.y, enable?(item))
  103.       draw_item_number(rect, item)
  104.     end
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 绘制物品个数
  108.   #--------------------------------------------------------------------------
  109.   def draw_item_number(rect, item)
  110.     draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 更新帮助内容
  114.   #--------------------------------------------------------------------------
  115.   def update_help
  116.     @help_window.set_item(item)
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ● 刷新
  120.   #--------------------------------------------------------------------------
  121.   def refresh
  122.     make_item_list
  123.     create_contents
  124.     draw_all_items
  125.     if Sound.play_buzzer
  126.       @help1_window.show
  127.       30.times{Graphics.update}
  128.       @help1_window.hide
  129.     end
  130.   end
  131. end

作者: 芯☆淡茹水    时间: 2018-1-22 22:30
你应该写在对应的 场景 里面,而不是 窗口 里面。
虽然可以加在一个窗口里,但具体的操作的话还是要在场景里进行。
作者: 芯☆淡茹水    时间: 2018-1-22 23:07
以物品场景为例,大概就是这个样式

  1. #==============================================================================
  2. class Scene_Item < Scene_ItemBase
  3.   #--------------------------------------------------------------------------
  4.   #首先在场景开始的地方生成窗口。
  5.   #更改以前的 开始 函数,插入 生成提示窗口 。
  6.   alias new_start start
  7.   def start
  8.     new_start
  9.     create_tip_window
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   #生成提示窗口 函数。
  13.   def create_tip_window
  14.     @tip_window = Window_Base.new(80, 168, 400, 64)  
  15.     string = "該技能使用的時機不對哦。"
  16.     @tip_window.draw_text(4, 0, 368, 32, string,1)
  17.     @tip_window.hide
  18.     @tip_window.z = 9999
  19.     @tip_window.opacity = 192
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   #在场景刷新的地方,增加刷新提示窗口。
  23.   def update
  24.     super      #继承父类的刷新。 如果这个场景本身有 刷新 函数,需要用 alias 更名。
  25.     update_tip #刷新提示窗口函数。
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   #刷新提示窗口函数。
  29.   def update_tip
  30.     #如果提示窗口在显示中,刷新显示的状态;否则刷新隐藏的状态。
  31.     if @tip_window.visible
  32.       update_tip_show
  33.     else
  34.       update_tip_hide
  35.     end
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   #提示窗口在显示中的刷新
  39.   def update_tip_show
  40.     30.times{Graphics.update}
  41.     @tip_window.hide
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   #提示窗口在隐藏中的刷新
  45.   def update_tip_hide
  46.     if 达到什么条件显示提示窗口?
  47.       Sound.play_buzzer
  48.       @tip_window.show
  49.     end
  50.   end
  51. end
  52. #==============================================================================
复制代码





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