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

Project1

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

[已经过期] 如何跨类(在一个类中执行另一个类的方法)执行刷新?

[复制链接]

Lv4.逐梦者

梦石
2
星屑
6687
在线时间
501 小时
注册时间
2018-3-23
帖子
533

R考场第七期银奖

跳转到指定楼层
1
发表于 2018-7-7 10:36:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
Lv.2星屑不多请见谅
我想在刷新一个选择物品的窗口的同时把另一个类的窗口提示语内容也刷新,但这两个窗口在不同的类中,想要调用另一个类当中的方法又不想重新显示该窗口(即新增一个对象)该怎么做?
我的想一并刷新的类的代码:
  1. class Window_News_IB < Window_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对象
  4.   #--------------------------------------------------------------------------
  5.   def initialize(show = true)
  6.     if show
  7.       super(0, 0, Graphics.width, fitting_height(1))
  8.     else
  9.       refresh
  10.     end
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ● 设置内容
  14.   #--------------------------------------------------------------------------
  15.   def set_text(text)
  16.     if text != @text
  17.       @text = text
  18.       refresh
  19.     end
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 写入消息的内容
  23.   #--------------------------------------------------------------------------
  24.   def write_text(items_value, goods_value)
  25.     if items_value == 0
  26.       set_text(Shop_IB::NO_TEXT)
  27.       return
  28.     end
  29.     if goods_value == 0
  30.       set_text(Shop_IB::NO_SELECT_TEXT)
  31.       return
  32.     end
  33.    
  34.     if items_value >= goods_value + Shop_IB::YOUARESORICH
  35.       set_text(Shop_IB::OVER_TEXT)
  36.       return
  37.     end
  38.     if items_value >= goods_value
  39.       set_text(Shop_IB::EQUAL_TEXT)
  40.       return
  41.     end
  42.     if items_value < goods_value
  43.       set_text(Shop_IB::LACK_TEXT)
  44.       return
  45.     end
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 清除
  49.   #--------------------------------------------------------------------------
  50.   def clear
  51.     set_text("")
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 刷新
  55.   #--------------------------------------------------------------------------
  56.   def refresh
  57.     contents.clear
  58.     draw_text(4, -2, Graphics.width - 40, 32, @text, 1)
  59.   end
  60. end

  61. #==============================================================================
  62. # ■ Window_Help_IB
  63. #------------------------------------------------------------------------------
  64. #  显示物品说明的窗口(只是改动了位置)
  65. #==============================================================================

  66. class Window_Help_IB < Window_Base
  67.   #--------------------------------------------------------------------------
  68.   # ● 初始化对象
  69.   #--------------------------------------------------------------------------
  70.   def initialize(line_number = 2)
  71.     super(0, fitting_height(1), Graphics.width, fitting_height(line_number))
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 设置内容
  75.   #--------------------------------------------------------------------------
  76.   def set_text(text)
  77.     if text != @text
  78.       @text = text
  79.       refresh
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 清除
  84.   #--------------------------------------------------------------------------
  85.   def clear
  86.     set_text("")
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 设置物品
  90.   #     item : 技能、物品等
  91.   #--------------------------------------------------------------------------
  92.   def set_item(item)
  93.     set_text(item ? item.description : "")
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 刷新
  97.   #--------------------------------------------------------------------------
  98.   def refresh
  99.     contents.clear
  100.     draw_text_ex(4, 0, @text)
  101.   end
  102. end
复制代码
然后选择物品窗口当中:
  1. class Window_ItemList_IB < Window_Selectable
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对象
  4.   #--------------------------------------------------------------------------
  5.   def initialize(x, y, width, height, sell_items, items_number)
  6.     super(x, y, width, height)
  7.     @data = []
  8.     @items_number = items_number
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ● 获取列数
  12.   #--------------------------------------------------------------------------
  13.   def col_max
  14.     return 1
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 获取项目数
  18.   #--------------------------------------------------------------------------
  19.   def item_max
  20.     @data ? @data.size : 1
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 获取物品
  24.   #--------------------------------------------------------------------------
  25.   def item
  26.     @data && index >= 0 ? @data[index] : nil
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 获取选择项目的有效状态
  30.   #--------------------------------------------------------------------------
  31.   def current_item_enabled?
  32.     enable?(@data[index])
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 查询列表中是否含有此物品
  36.   #--------------------------------------------------------------------------
  37.   def include?(item)
  38.     if item.is_a?(RPG::Item) || item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor)
  39.       return true
  40.     else
  41.       return false
  42.     end
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 查询此物品是否可用
  46.   #--------------------------------------------------------------------------
  47.   def enable?(item)
  48.     $game_party.usable?(item)
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 生成物品列表
  52.   #--------------------------------------------------------------------------
  53.   def make_item_list
  54.     @data = $game_party.all_items.select {|item| include?(item) }
  55.     @data.push(nil) if include?(nil)
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 返回上一个选择的位置
  59.   #--------------------------------------------------------------------------
  60.   def select_last
  61.     select(@data.index($game_party.last_item.object) || 0)
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 绘制项目
  65.   #--------------------------------------------------------------------------
  66.   def draw_item(index)
  67.     item = @data[index]
  68.     if item
  69.       rect = item_rect(index)
  70.       rect.width -= 4
  71.       draw_item_name(item, rect.x, rect.y, enable?(item))
  72.       draw_item_number(rect, item)
  73.     end
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 绘制物品选择数/个数
  77.   #--------------------------------------------------------------------------
  78.   def draw_item_number(rect, item)
  79.     draw_text(rect, sprintf("%2d/%2d", @items_number[item.id], $game_party.item_number(item)), 2)
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 更新帮助内容
  83.   #--------------------------------------------------------------------------
  84.   def update_help
  85.     @help_window.set_item(item)
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 刷新
  89.   #--------------------------------------------------------------------------
  90.   def refresh
  91.     make_item_list
  92.     create_contents
  93.     draw_all_items
  94.     news_refresh
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 刷新提示消息窗口
  98.   #--------------------------------------------------------------------------
  99.   def news_refresh
  100.     @news_refresh = Window_News_IB.new(false)
  101.     @news_refresh.write_text
  102.   end
  103. end
复制代码
用此种方法做,一刷新就会出现问题:


祝好。

Lv5.捕梦者

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

R考场第七期纪念奖

2
发表于 2018-7-7 13:48:23 | 只看该作者
本帖最后由 KB.Driver 于 2018-7-7 13:49 编辑

(没具体看代码内容,瞎回答一下
因为Window有好几个的场合不好控制,所以才有了Scene的概念
一个Scene里面就会管理好几个窗口,然后由Scene来控制哪个激活,哪个更新这些。
建议你可以建一个Scene的类,然后把窗口都装进去(通过在Scene的初始化时新建实例变量)
这里不会写就参考默认脚本
接着,Scene可以直接继承父类的update,你就不用担心怎么写了。

如果不在Scene里的话,你可以用SceneManager.scene.update_basic,这个类方法可以在其他类里用

这一块如果不怎么懂的话推荐看一下VA区置顶
https://rpg.blue/thread-398047-1-1.html

里面讲Scene的部分很有帮助的

点评

谢谢了  发表于 2018-7-7 15:57
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 06:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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