Project1

标题: 在菜单直接显示物品属性或图片的办法 [打印本页]

作者: thelians    时间: 2014-6-17 23:08
标题: 在菜单直接显示物品属性或图片的办法
本帖最后由 thelians 于 2014-6-19 20:46 编辑

捣鼓半天目前终于解决了不显示备注内容的问题……OTL
但是无法实现在备注说明框上方插入新窗口同步显示道具图片
刚X菜单是这样的

然后点物品   属性出现在右边,而道具栏靠下的方框做不到显示该道具的大图

找了很多脚本都改不出来OTLLLLLLL

-------------------------------------------------------
【旧,已自己解决】
这是实验体
我想把系统做成点物品后同步【悬浮图像】或者【说明】,不需要刷新页面直接选择物品出现物品LIST,上下选择物品出现物品文字说明或图像,但是目前为止最下方的悬浮框不知道为什么没有任何显示内容|……
然后我调用的是系统的help窗口的内容,这个help窗口本身就是用来做这种说明的(就是默认内容)
现在的问题是很奇怪的OTL
我调用这个窗口的时候,大小和位置是用的help窗口的定义,但是不显示说明文
也就是说调用是成功的,但是就是不起作用……………………

QQ图片20140617165432.jpg (54.19 KB, 下载次数: 22)

QQ图片20140617165432.jpg

作者: 喵呜喵5    时间: 2014-6-17 23:38
两种可能,1是你的显示说明文指令没传达窗口中,2是你的说明文显示的位置在窗口外,所以虽然显示了但是你没看到
作者: thelians    时间: 2014-6-18 08:03
本帖最后由 thelians 于 2014-6-18 08:04 编辑

自己搞定了但是遇到了新的问题OTL&……已经更新在主楼
作者: taroxd    时间: 2014-6-18 08:48
本帖最后由 taroxd 于 2014-6-18 09:28 编辑
thelians 发表于 2014-6-18 08:03
自己搞定了但是遇到了新的问题OTL&……已经更新在主楼


方案一:利用 draw_text_ex 绘制文字,并且往绘制的字符串前加入'\\I[icon_id]'来显示图标
方案二:直接利用Window_Base#draw_icon (方法名可能记错),并调整文字的绘制区域
作者: 喵呜喵5    时间: 2014-6-18 09:45
关于显示图片,你得先告诉我你现在脚本写到什么程度了
是写出代码之后无效
还是完全没有写代码的思路
还是怎么样
作者: shiroyomogi    时间: 2014-6-18 18:05
抱歉其实代码是我写的orz
之前路由器一直有问题无法上网就托人帮忙发了一下现在终于解决了路由器问题orz

Scene_Menu部分的代码暂时是这个样子↓,然后我目前做到的就是让它显示了我需要的窗口,但是如何在这个空白窗口里定义我需要的图片就……完全没有思路!(跪下)
想要现实的图片不一定是item本身的icon,如果能定义成跟item编号对应的特殊命名图片就更好……(比如item编号是2那么图片名称是2_n之类的)
同样的效果在XP里自写成功,用同样的思路带到VA来就完全没辙了_(:з」∠)_(完全新手)
所以本质就是我完全没搞清VA的代码要怎么绘制指定图像和怎么把它跟其他窗口的东西互相联系起来_(:з」∠)_
麻烦大家了真的很抱歉orz
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Scene_Menu
  4. #------------------------------------------------------------------------------
  5. #  菜单画面
  6. #==============================================================================

  7. class Scene_Menu < Scene_MenuBase
  8.   #--------------------------------------------------------------------------
  9.   # ● 开始处理
  10.   #--------------------------------------------------------------------------
  11.   def start
  12.     super
  13.     create_command_window
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 生成指令窗口
  17.   #--------------------------------------------------------------------------
  18.   def create_command_window
  19.     @command_window = Window_MenuCommand.new
  20.     @command_window.set_handler(:item,      method(:command_item))
  21.     @command_window.set_handler(:game_end,  method(:command_game_end))
  22.     @command_window.set_handler(:cancel,    method(:return_scene))
  23.   end
  24.   

  25.   
  26.   #--------------------------------------------------------------------------
  27.   # ● 指令“物品”
  28.   #--------------------------------------------------------------------------
  29.    def command_item
  30.      create_status_window
  31.      create_pic_window
  32.    end
  33.    
  34.   def create_status_window
  35.     @status_window = Window_ItemList.new(160,0,300,200)
  36.     @status_window.viewport = @viewport
  37.      create_help_window
  38.     @status_window.help_window = @help_window
  39.     @status_window.category = :item
  40.     @status_window.activate
  41.     @status_window.index = 0
  42.     @status_window.select_last
  43.     @status_window.set_handler(:cancel, method(:on_personal_cancel))
  44.   end  
  45.   
  46.   def create_pic_window
  47.     @pic_window = Window_Base.new(160,200,200,100)
  48.     @pic_window.viewport = @viewport
  49.   end   
  50.    
  51.   def on_personal_cancel
  52.     @status_window.unselect
  53.     @pic_window.close
  54.     @status_window.close
  55.     @help_window.close
  56.     @command_window.activate
  57.   end
  58.   
  59.   
  60.   
  61. #------------------------
  62. # 指令“结束”
  63. #------------------------

  64.   def command_game_end
  65.     SceneManager.call(Scene_End)
  66.   end

  67. end
复制代码

作者: taroxd    时间: 2014-6-18 18:13
本帖最后由 taroxd 于 2014-6-18 18:41 编辑
shiroyomogi 发表于 2014-6-18 18:05
抱歉其实代码是我写的orz
之前路由器一直有问题无法上网就托人帮忙发了一下现在终于解决了路由器问题orz


如果这个窗口需要大量自定义内容的话,为这个窗口单独写一个类吧。写法参考现成的默认脚本。

RGSS3中是主要是使用场景将窗口联系起来的。同时选择窗口也可以通过help_window来控制其他窗口。

我看你大概要两个帮助窗口,就举个例子参考一下吧:
RUBY 代码复制
  1. class Window_ItemPicture < Window_Base
  2.  
  3.   #...
  4.  
  5.   def set_item(item)
  6.     @item = item
  7.     refresh
  8.   end
  9.  
  10.   def refresh
  11.     # draw all what your need
  12.   end
  13.  
  14.   #...
  15. end
  16.  
  17. class Window_Xxx < Window_Selectable # 选择道具的窗口
  18.  
  19.   #...
  20.  
  21.   attr_writer :pic_window
  22.   def update_help
  23.     @help_window.set_item(item)
  24.     @pic_window.set_item(item)
  25.   end
  26.  
  27.   #...
  28.  
  29. end
  30.  
  31. class Scene_Menu < Scene_MenuBase
  32.  
  33.   #...
  34.  
  35.   def create_pic_window
  36.     @pic_window = Window_ItemPicture.new(some_args)
  37.     @xxx_window.pic_window = @pic_window
  38.   end
  39.  
  40.   #...
  41.  
  42. end

作者: 喵呜喵5    时间: 2014-6-18 18:14
shiroyomogi 发表于 2014-6-18 18:05
抱歉其实代码是我写的orz
之前路由器一直有问题无法上网就托人帮忙发了一下现在终于解决了路由器问题orz

这个是在窗口中描绘图片的方法(图片文件放在了system目录下,名字叫Frame),你可以参考一下
  1. def refresh
  2.     self.contents.clear
  3.     bitmap = Cache.system("Frame")
  4.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  5.     contents.blt(0, 0, bitmap, rect, 255)
  6.     bitmap.dispose
  7.   end
复制代码

作者: shiroyomogi    时间: 2014-6-18 21:52
taroxd 发表于 2014-6-18 18:13
如果这个窗口需要大量自定义内容的话,为这个窗口单独写一个类吧。写法参考现成的默认脚本。

RGSS3中是 ...

我又来了……还是有地方搞不定orz
结合了一下脚本(感谢好人们QAQ),现在中间的窗口可以显示图片了也没有bug,新定义的窗口脚本大概是这样:
  1. class Window_ItemPicture < Window_Base

  2.   def initialize(x, y, width, height)
  3.     super
  4.     refresh
  5.   end

  6.   def set_item(item)
  7.     @item = item
  8.     refresh
  9.   end

  10.   def refresh
  11.     self.contents.clear
  12.    
  13.     bitmap = Cache.system("pic")
  14.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  15.     contents.blt(0, 0, bitmap, rect, 255)
  16.     bitmap.dispose
  17.   end
  18.   
  19.   
  20. end
复制代码
然后在update的地方和创建窗口的地方也插了相应的脚本。
然后!因为不知道怎么让图片跟help窗口的内容一起变化所以也没法验证它是不是应该这么写……我考虑的是每个item分别绘制一张图片,然后按照编号给图片命名,之后就不知道怎么让这个命名体现在在脚本里了……
纠结了两三个小时还是乖乖来问_(:з」∠)_
作者: moy    时间: 2014-6-18 22:31
shiroyomogi 发表于 2014-6-18 21:52
我又来了……还是有地方搞不定orz
结合了一下脚本(感谢好人们QAQ),现在中间的窗口可以显示图片了也没 ...

使用sprintf。以下是默认脚本,可供参考
  1.   #--------------------------------------------------------------------------
  2.   # ● 生成文件名
  3.   #     index : 文件索引
  4.   #--------------------------------------------------------------------------
  5.   def self.make_filename(index)
  6.     sprintf("Save%02d.rvdata2", index + 1)
  7.   end
复制代码

作者: moy    时间: 2014-6-19 00:14
最简单的办法莫过于直接读取id,然后将素材按照id来命名。
比如统一设置成这样:"item_xxx.png"
xxx的值和数据库中物品id一致
这样使用时只要
  1. name = sprintf("item_%3d",@item.id)
  2. bitmap = Cache.system(name)
复制代码
应该就可以了
不过注意这里的数字是类似001这样,如果不想这样规划(这样主要是为了便于整理图片),就直接%d就好了
作者: shiroyomogi    时间: 2014-6-19 04:49
moy 发表于 2014-6-19 00:14
最简单的办法莫过于直接读取id,然后将素材按照id来命名。
比如统一设置成这样:"item_xxx.png"
xxx的值和 ...

改了脚本之后一直说这个新脚本有这样的错误:
NoMethodError
undefinde method 'id'for nil:NilClass

究竟是哪里出了问题QAQ
作者: 菜鸟飞呀飞    时间: 2014-6-19 04:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: shiroyomogi    时间: 2014-6-19 05:23
菜鸟飞呀飞 发表于 2014-6-19 04:57
显示文件的名字为物品名,坐标、窗口大小等自己调喔~

测试已成功!!非常感谢!!!
(本来都快放弃了……这里人都太好了简直感动到哭)




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