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

Project1

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

[已经解决] 如何做一个可不影响玩家走动的文字窗口

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1578
在线时间
265 小时
注册时间
2019-1-18
帖子
202
跳转到指定楼层
1
发表于 2019-2-11 10:11:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 造小梦 于 2019-2-12 16:20 编辑

我想做一个显示文字的窗口
当玩家拾取某个物品时,屏幕左下自动显示该物品的名称和图标,4秒后窗口消失

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

2
发表于 2019-2-11 14:54:53 | 只看该作者
本帖最后由 KB.Driver 于 2019-2-11 17:18 编辑

在你问这个问题之前,我觉得你应该先搞清楚你要问的是什么。
如果你自己都不清楚自己问的问题是什么,别人更加没有办法帮到你。

1 “我想做一个xxx窗口”
        请问窗口(Window)与界面(Scene)的区别与联系是什么?
        这个“窗口”由什么方式进入?菜单选项?与某个NPC对话?在地图上按某个按键?
       
2 “光标落到该选项时自动显示一段文字”
        请问显示文字的方式是什么?弹出新窗口?在已有的某个窗口里显示?

我的建议是,在熟练使用事件和插件脚本的基础上,再定制脚本比较好。



连问题名字带描述一起改,非常的高明(笑)
拾取物品窗口显示的脚本其实已经有了,就是Yanfly Ace Engine的。
所以追求华丽效果的话直接去找那个脚本比较好。

简单点的效果就看这个吧
RUBY 代码复制
  1. class Scene_Map
  2.   #--------------------------------------------------------------------------
  3.   # ● 生成所有窗口
  4.   #--------------------------------------------------------------------------
  5.   alias create_all_windows_cld99 create_all_windows
  6.   def create_all_windows
  7.     create_all_windows_cld99
  8.     create_itemget_window
  9.   end
  10.  
  11.   def create_itemget_window
  12.     @itemget_window = Window_Itemget.new
  13.   end
  14.  
  15.   def itemget_set_text(string)
  16.     @itemget_window.set_text(string)
  17.   end
  18.  
  19. end
  20.  
  21.  
  22.  
  23. # Window_Itemget 大部分方法来自Window_Help
  24. class Window_Itemget < Window_Base
  25.   #--------------------------------------------------------------------------
  26.   # ● 初始化对象
  27.   #--------------------------------------------------------------------------
  28.   def initialize(line_number = 1)
  29.     @line_number = line_number
  30.     super(window_x, window_y, window_width, window_height)
  31.   end
  32.  
  33.   def window_x
  34.     0
  35.   end
  36.  
  37.   def window_y
  38.     Graphics.height - window_height
  39.   end
  40.  
  41.   def window_width
  42.     Graphics.width / 2
  43.   end
  44.  
  45.   def window_height
  46.     fitting_height(@line_number)
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 设置内容
  50.   #--------------------------------------------------------------------------
  51.   def set_text(text)
  52.     if text != @text
  53.       @text = text
  54.       refresh
  55.     end
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 清除
  59.   #--------------------------------------------------------------------------
  60.   def clear
  61.     set_text("")
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 刷新
  65.   #--------------------------------------------------------------------------
  66.   def refresh
  67.     contents.clear
  68.     draw_text_ex(4, 0, @text)
  69.   end
  70.  
  71.   def update
  72.     super
  73.     if Time.should_clear_text?
  74.       self.clear
  75.       Time.text_cleared
  76.     end
  77.   end
  78. end
  79.  
  80. class Game_Party
  81.   #--------------------------------------------------------------------------
  82.   # ● 增加/减少物品
  83.   #     include_equip : 是否包括装备
  84.   #--------------------------------------------------------------------------
  85.   alias gain_item_cld99 gain_item
  86.   def gain_item(item, amount, include_equip = false)
  87.     gain_item_cld99(item, amount, include_equip)
  88.     if SceneManager.scene_is?(Scene_Map)
  89.       text = make_text_item(item, amount)
  90.       SceneManager.scene.itemget_set_text(text)
  91.       Time.clear_text_reserve
  92.     end
  93.   end
  94.  
  95.   def make_text_item(item, amount)
  96.     gain_lose = amount > 0 ? "获得" : "失去"
  97.     sprintf("%s了%d个%s", gain_lose, amount.abs, item.name)
  98.   end
  99.  
  100.   #--------------------------------------------------------------------------
  101.   # ● 增加/减少持有金钱
  102.   #--------------------------------------------------------------------------
  103.   alias gain_gold_cld99 gain_gold
  104.   def gain_gold(amount)
  105.     gain_gold_cld99(amount)
  106.     if SceneManager.scene_is?(Scene_Map)
  107.       text = make_text_gold(amount)
  108.       SceneManager.scene.itemget_set_text(text)
  109.       Time.clear_text_reserve
  110.     end
  111.   end
  112.  
  113.   def make_text_gold(amount)
  114.     gain_lose = amount > 0 ? "获得" : "失去"
  115.     sprintf("%s了%d%s", gain_lose, amount.abs, Vocab.currency_unit)
  116.   end
  117.  
  118. end
  119.  
  120. class Time
  121.   def self.clear_text_reserve
  122.     @now = Time.now
  123.   end
  124.  
  125.   def self.should_clear_text?
  126.     return false unless @now
  127.     (Time.now - @now).to_i >= 1
  128.   end
  129.  
  130.   def self.text_cleared
  131.     @now = nil
  132.   end
  133. end


评分

参与人数 1星屑 +30 收起 理由
VIPArcher + 30 塞糖

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
200
在线时间
120 小时
注册时间
2007-8-17
帖子
147
3
发表于 2019-2-12 12:28:16 | 只看该作者
建议还是看一遍置顶的Ruby教程
里面详细描述了画面如何更新 键盘事件如何处理
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1578
在线时间
265 小时
注册时间
2019-1-18
帖子
202
4
 楼主| 发表于 2019-2-12 12:37:32 | 只看该作者
KB.Driver 发表于 2019-2-11 14:54
在你问这个问题之前,我觉得你应该先搞清楚你要问的是什么。
如果你自己都不清楚自己问的问题是什么,别人 ...

这样子的话窗口不会消失耶。。。

点评

如果你想要华丽的效果,就不要用我随便写的这个,去找Yanfly Engine Ace的脚本。只是用的话对你来说足够了  发表于 2019-2-12 13:19
所以你一开始就说窗口要出现然后消失不好吗?如果连自己提问都不说清楚,别人怎么可能明白。  发表于 2019-2-12 13:17
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
563
在线时间
46 小时
注册时间
2019-2-16
帖子
15
5
发表于 2019-2-16 14:21:57 | 只看该作者
我用的“展示图片”一个字一张图
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1578
在线时间
265 小时
注册时间
2019-1-18
帖子
202
6
 楼主| 发表于 2019-2-16 15:11:28 | 只看该作者
2073746068 发表于 2019-2-16 14:21
我用的“展示图片”一个字一张图

好吧,我亲自测试了一下,是图层顺序搞错了,待会我把修复版发出来
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 22:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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