查看: 3091|回复: 7

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

[复制链接]
梦石
0
星屑
1618
在线时间
267 小时
注册时间
2019-1-18
回帖
129
发表于 2019-2-11 10:11:44 | 显示全部楼层 |阅读模式

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

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

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

我想做一个显示文字的窗口
当玩家拾取某个物品时,屏幕左下自动显示该物品的名称和图标,4秒后窗口消失
,
梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2019-2-11 14:54:53 | 显示全部楼层
本帖最后由 KB.Driver 于 2019-2-11 17:18 编辑

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

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

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



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

简单点的效果就看这个吧
[pre lang="ruby"]class Scene_Map
  #--------------------------------------------------------------------------
  # ● 生成所有窗口
  #--------------------------------------------------------------------------
  alias create_all_windows_cld99 create_all_windows
  def create_all_windows
    create_all_windows_cld99
    create_itemget_window
  end
  
  def create_itemget_window
    @itemget_window = Window_Itemget.new
  end
  
  def itemget_set_text(string)
    @itemget_window.set_text(string)
  end
  
end


  
# Window_Itemget 大部分方法来自Window_Help
class Window_Itemget < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(line_number = 1)
    @line_number = line_number
    super(window_x, window_y, window_width, window_height)
  end
  
  def window_x
    0
  end
  
  def window_y
    Graphics.height - window_height
  end
  
  def window_width
    Graphics.width / 2
  end
  
  def window_height
    fitting_height(@line_number)
  end
  #--------------------------------------------------------------------------
  # ● 设置内容
  #--------------------------------------------------------------------------
  def set_text(text)
    if text != @text
      @text = text
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● 清除
  #--------------------------------------------------------------------------
  def clear
    set_text("")
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_text_ex(4, 0, @text)
  end
  
  def update
    super
    if Time.should_clear_text?
      self.clear
      Time.text_cleared
    end
  end
end
  
class Game_Party
  #--------------------------------------------------------------------------
  # ● 增加/减少物品
  #     include_equip : 是否包括装备
  #--------------------------------------------------------------------------
  alias gain_item_cld99 gain_item
  def gain_item(item, amount, include_equip = false)
    gain_item_cld99(item, amount, include_equip)
    if SceneManager.scene_is?(Scene_Map)
      text = make_text_item(item, amount)
      SceneManager.scene.itemget_set_text(text)
      Time.clear_text_reserve
    end
  end
  
  def make_text_item(item, amount)
    gain_lose = amount > 0 ? "获得" : "失去"
    sprintf("%s了%d个%s", gain_lose, amount.abs, item.name)
  end
  
  #--------------------------------------------------------------------------
  # ● 增加/减少持有金钱
  #--------------------------------------------------------------------------
  alias gain_gold_cld99 gain_gold
  def gain_gold(amount)
    gain_gold_cld99(amount)
    if SceneManager.scene_is?(Scene_Map)
      text = make_text_gold(amount)
      SceneManager.scene.itemget_set_text(text)
      Time.clear_text_reserve
    end
  end
  
  def make_text_gold(amount)
    gain_lose = amount > 0 ? "获得" : "失去"
    sprintf("%s了%d%s", gain_lose, amount.abs, Vocab.currency_unit)
  end
  
end

class Time
  def self.clear_text_reserve
    @now = Time.now
  end
  
  def self.should_clear_text?
    return false unless @now
    (Time.now - @now).to_i >= 1
  end
  
  def self.text_cleared
    @now = nil
  end
end
[/pre]

2.gif

评分

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

查看全部评分

用头画头像,用脚写脚本
回复

使用道具 举报

梦石
0
星屑
200
在线时间
120 小时
注册时间
2007-8-17
回帖
128
发表于 2019-2-12 12:28:16 | 显示全部楼层
建议还是看一遍置顶的Ruby教程
里面详细描述了画面如何更新 键盘事件如何处理
回复

使用道具 举报

梦石
0
星屑
1618
在线时间
267 小时
注册时间
2019-1-18
回帖
129
 楼主| 发表于 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
回复

使用道具 举报

梦石
0
星屑
563
在线时间
46 小时
注册时间
2019-2-16
回帖
13
发表于 2019-2-16 14:21:57 | 显示全部楼层
我用的“展示图片”一个字一张图
回复

使用道具 举报

梦石
0
星屑
1618
在线时间
267 小时
注册时间
2019-1-18
回帖
129
 楼主| 发表于 2019-2-16 15:11:28 | 显示全部楼层
2073746068 发表于 2019-2-16 14:21
我用的“展示图片”一个字一张图

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

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部