查看: 2701|回复: 11

[已经解决] 请教如何在Scene场景里新建窗口及文字说明?

[复制链接]
梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
回帖
1074
发表于 2018-1-21 21:17:34 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
就是在Scene场景里新建窗口,并且用来做玩家操作出现无效的时候,弹出提示的窗口。
如:
[pre lang="ruby"]@help1_window = Window_Base.new(80, 168, 400, 64)
    @help1_window.contents = Bitmap.new(368, 32)
    string = "該技能使用的時機不對哦。"
    @help1_window.contents.draw_text(4, 0, 368, 32, string,1)
    @help1_window.visible = false
    @help1_window.z = 9999
    @help1_window.opacity = 192[/pre]
以上是XP/VX的写法。
但是VA的脚本简略了,反而无法入手了。
话说该怎么样写入这种功能呢?
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
梦石
0
星屑
34460
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2018-1-21 22:08:59 | 显示全部楼层
好像是这样的
  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
复制代码
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
回帖
1074
 楼主| 发表于 2018-1-21 22:31:17 | 显示全部楼层

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

VA简化了,连提示音的脚本都找不到,该如何显示呢?

点评

不知道该怎么调用是件头疼的事情...  发表于 2018-1-21 23:40
VA将光标处理的内容放到window类里了,没有在Scene场景里  发表于 2018-1-21 22:43
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复

使用道具 举报

梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
发表于 2018-1-22 00:22:57 | 显示全部楼层
本帖最后由 张咚咚 于 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,
多看一下继承和复写的方法应该就明白结构了

评分

参与人数 1赞 +1 收起 理由
文雅夕露 + 1 感谢指导

查看全部评分

回复

使用道具 举报

梦石
0
星屑
34460
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2018-1-22 11:42:10 | 显示全部楼层
文雅夕露 发表于 2018-1-21 22:31
稍后试试看。
那该怎么显示这个提示呢?
在哪里才能显示呢?

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

@help1_window.show if 技能使用的時機不對
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
回帖
1074
 楼主| 发表于 2018-1-22 21:55:51 | 显示全部楼层
芯☆淡茹水 发表于 2018-1-22 11:42
在场景刷新那儿随时判断就行了,

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

瞎改的,不起效果,还是哪里弄错了...
[pre lang="ruby"]#encoding:utf-8
#==============================================================================
# ■ Window_ItemList
#------------------------------------------------------------------------------
#  物品画面中,显示持有物品的窗口。
#==============================================================================

class Window_ItemList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super
    @category = :none
    @data = []
    ###
    @help1_window = Window_Base.new(80, 168, 400, 64)  
    string = "該物品使用的時機不對哦。"
    @help1_window.draw_text(4, 0, 368, 32, string,1)
    @help1_window.hide
    @help1_window.z = 9999
    @help1_window.opacity = 192
    ###
  end
  #--------------------------------------------------------------------------
  # ● 设置分类
  #--------------------------------------------------------------------------
  def category=(category)
    return if @category == category
    @category = category
    refresh
    self.oy = 0
  end
  #--------------------------------------------------------------------------
  # ● 获取列数
  #--------------------------------------------------------------------------
  def col_max
    return 2
  end
  #--------------------------------------------------------------------------
  # ● 获取项目数
  #--------------------------------------------------------------------------
  def item_max
    @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● 获取物品
  #--------------------------------------------------------------------------
  def item
    @data && index >= 0 ? @data[index] : nil
  end
  #--------------------------------------------------------------------------
  # ● 获取选择项目的有效状态
  #--------------------------------------------------------------------------
  def current_item_enabled?
    enable?(@data[index])
  end
  #--------------------------------------------------------------------------
  # ● 查询列表中是否含有此物品
  #--------------------------------------------------------------------------
  def include?(item)
    case @category
    when :item
      item.is_a?(RPG::Item) && !item.key_item?
    when :weapon
      item.is_a?(RPG::Weapon)
    when :armor
      item.is_a?(RPG::Armor)
    when :key_item
      item.is_a?(RPG::Item) && item.key_item?
    else
      false
    end
  end
  #--------------------------------------------------------------------------
  # ● 查询此物品是否可用
  #--------------------------------------------------------------------------
  def enable?(item)
    $game_party.usable?(item)
  end
  #--------------------------------------------------------------------------
  # ● 生成物品列表
  #--------------------------------------------------------------------------
  def make_item_list
    @data = $game_party.all_items.select {|item| include?(item) }
    @data.push(nil) if include?(nil)
  end
  #--------------------------------------------------------------------------
  # ● 返回上一个选择的位置
  #--------------------------------------------------------------------------
  def select_last
    select(@data.index($game_party.last_item.object) || 0)
  end
  #--------------------------------------------------------------------------
  # ● 绘制项目
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    if item
      rect = item_rect(index)
      rect.width -= 4
      draw_item_name(item, rect.x, rect.y, enable?(item))
      draw_item_number(rect, item)
    end
  end
  #--------------------------------------------------------------------------
  # ● 绘制物品个数
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
    draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
  end
  #--------------------------------------------------------------------------
  # ● 更新帮助内容
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_item(item)
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    make_item_list
    create_contents
    draw_all_items
    if Sound.play_buzzer
      @help1_window.show
      30.times{Graphics.update}
      @help1_window.hide
    end
  end
end
[/pre]
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复

使用道具 举报

梦石
0
星屑
34460
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2018-1-22 22:30:16 | 显示全部楼层
你应该写在对应的 场景 里面,而不是 窗口 里面。
虽然可以加在一个窗口里,但具体的操作的话还是要在场景里进行。

点评

原谅我笨拙,无从下手了。可否请前辈写一个范例让我参考一下呢...  发表于 2018-1-22 22:37
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
34460
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2018-1-22 23:07:03 | 显示全部楼层
以物品场景为例,大概就是这个样式

  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. #==============================================================================
复制代码

点评

谢谢前辈,这样就稍微有些条理了。我会按前辈写的范例把其他场景也照着修改试试看。再次感谢。  发表于 2018-1-22 23:34

评分

参与人数 1赞 +1 收起 理由
文雅夕露 + 1 十分感谢

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部