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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
跳转到指定楼层
1
发表于 2018-1-21 21:17:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就是在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的脚本简略了,反而无法入手了。
话说该怎么样写入这种功能呢?
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。

Lv5.捕梦者

梦石
0
星屑
33442
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
3
 楼主| 发表于 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新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
19433
在线时间
3102 小时
注册时间
2013-1-11
帖子
1291
4
发表于 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 感谢指导

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33442
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

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

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

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

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
6
 楼主| 发表于 2018-1-22 21:55:51 | 只看该作者
芯☆淡茹水 发表于 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
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33442
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

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

点评

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

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33442
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

8
发表于 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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 13:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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