| 赞 | 62 |
| VIP | |
| 好人卡 | |
| 积分 | 65 |
| 经验 | |
| 最后登录 | 2025-2-24 |
| 在线时间 | 1275 小时 |
百合控
- 梦石
- 0
- 星屑
- 6548
- 在线时间
- 1275 小时
- 注册时间
- 2013-8-21
- 回帖
- 3522

|
发表于 2014-7-27 19:47:20
|
显示全部楼层
本帖最后由 余烬之中 于 2014-7-27 19:49 编辑
Stage Clear!
[fold=如何让编号为某一个变量的人暂时成为队列第一人?]
[pre lang="ruby" line="1"]
# 如何让编号为某一个变量的人暂时成为队列第一人?
# 首先 我们什么也不需要想 就可以新建一个模块 把变量ID定义为一个常量
# 以此作为用户设置的地方
#==============================================================================
# ** BH
#==============================================================================
module BH
BianHaoID = 3
# 变量ID
end
# 然后 我们需要检测变量的变化 并切换队长
# 我们知道 可以通过$game_variables来访问变量 而它是Game_Variables的一个实例
# 在Game_Variables中 可以找到:
# def on_change
# $game_map.need_refresh = true
# end
# 也就是说 只要变量发生了改变 $game_map.need_refresh就会变为true
# 从字面上来看 就是“地图需要刷新”
# 我们只需要监听$game_map.need_refresh就可以了 至于它什么时候变回false……
# …………既然原装脚本就这么用了 我们就不用管了
# …………
# ……………………
# ………………………………
# 好吧 在这里 Game_Map的定义(也就是$game_map内部)
# def refresh
# @events.each_value {|event| event.refresh }
# @common_events.each {|event| event.refresh }
# refresh_tile_events
# @need_refresh = false
# end
# “监听谁”这个问题已经解决了 现在是……
# “谁来监听”
# 当然是让“被操作者”来监听啦 也就是我们的队长所在的地方:
# Game_Party($game_party)
# 让我们打开Game_Party…………
# ……………………
# 怎么会!它只有操纵队伍的方法 却不负责监听
# 让谁来监听呢?Scene?
# 麻烦死了 就让Game_Variables自己来吧(怎么又绕回来了……)
#==============================================================================
# ** Game_Variables
#==============================================================================
class Game_Variables
# on_change就是我们要插入的地方
# 当游戏变量被更改 on_change就会被调用
alias :rang_bian_hao_wei_mou_bian_liang_zhe_zuo_dui_zhang_oc :on_change
# 先起个别名 避免别人也改了这个方法 而我们抹去了人家的劳动成果
def on_change
rang_bian_hao_wei_mou_bian_liang_zhe_zuo_dui_zhang_oc
# 先调用原方法
# 然后……
$game_party.让他当队长
end
end
#==============================================================================
# ** Game_Party
#==============================================================================
class Game_Party
# 哇咔咔
def 让他当队长
该当队长的人 = $game_variables[BH::BianHaoID] # 获取编号
队员们 = @actors # 获取队列
return unless 队员们.include?(该当队长的人)
# 如果队伍里根本没这个人 我们就可以回家洗洗睡了
return if 队员们[0] == 该当队长的人
# 如果他本就是队长 我们也不需要做什么
队员们.delete(该当队长的人)
# 否则 就把他踢出队伍
队员们.unshift(该当队长的人)
# 再王者归来
$game_player.refresh
# 这句是复制Game_Party里面swap_order的
# 该通知的还是要通知一下 这样才有利于同志们传达精神
# 其实swap_order(一个人, 另一个人)可以把这两个人的位置调换
# swap_order(0, 队员们.index(该当队长的人))
# 但是原来的队长就会在现队长原来的地方 不过这也无关紧要了
end
end
# 绕了一个弯路我们还是回来了
# 思维中常常出现这样那样的岔子 关键是要能绕得回来
# 现在我们想到了一个问题:
# 在我们把这个人改成了队长后 如果玩家进行了整队 把队长和别人调换…………
# 一定要阻止他!
# 整队在Scene_Menu里面负责 如果你挂载了专用整队脚本那就没用了…………
#==============================================================================
# ** Scene_Menu
#==============================================================================
class Scene_Menu
# 整队中 按下确定键的处理
alias :rang_bian_hao_wei_mou_bian_liang_zhe_zuo_dui_zhang_ofo :on_formation_ok
# 先起别名
def on_formation_ok
if $game_variables[BH::BianHaoID] != 0 &&
(@status_window.index == 0 || @status_window.pending_index == 0)
# 如果当前是临时队长在位 并且调换的两个人中 有任意一个是队长
# 就阻止他!
Sound.play_buzzer # 顺便警告一下
@status_window.activate
else
# 除此之外
rang_bian_hao_wei_mou_bian_liang_zhe_zuo_dui_zhang_ofo
# 就丢给原方法去管
end
end
end
# 但是这里又有一个小问题
# 假设一开始的队伍是
# A B C D E F G
# 然后F临时当队长
# F A B C D E G
# 然后C来当队长
# C F A B D E G
# 这就不算是临时了 因为F还在A的前面
# 我们需要保存正常的队列状况
# 把上面的全部删掉 我们重来
# 算了……太麻烦了……
# 我们需要:
# 记忆原队列顺序 记忆原队长现在的位置
# 确保队伍正常变动时 我们的记忆也跟着变
# 万一原队长被踢出了退伍 我们还是要能了解他应该在哪里
# 等等等等
# 这就不是一个小问题了 所以我们(明明只有你一个人!)很不负责任的放弃了它
# 当然 如果不考虑这些问题 只考虑:
# 如果A是临时队长 B是原队长 C是另一人
# 1.当变量值为0时……
# 1.B不在队伍 则A继续当队长 且成为真正队长(而非临时)
# 2.B在队伍 则B与A调换位置
# 2.C被指定为临时队长
# 1.B不在队伍 则让A与C调换位置
# 2.B在队伍 则让A与B调换位置 然后B与C调换位置
# 总结:在变量改变的情况下
# 只要B在队伍 就一定要让A与B调换(原队长复辟)
# 然后如果变量为0 则什么都不需要再做
# 如果不为零 就把B和C调换(登基)
# 这样我们就只需要记忆原队长
# 下面是我的全部实现 不做说明了 有兴趣自己看也能看懂
# __END__ 以下的内容是不会被执行的 只有观赏意义
__END__
# 这段脚本的效果与上一段还是有很大不同的
# 虽然前期很像
#==============================================================================
# ** TemporaryCaptain
#==============================================================================
module TemporaryCaptain
Var = 3
end
#==============================================================================
# ** Game_Variables
#==============================================================================
class Game_Variables
alias :let_he_be_the_leader_2014_07_27_on_change :on_change
def on_change
let_he_be_the_leader_2014_07_27_on_change
$game_party.let_he_be_the_leader
end
end
#==============================================================================
# ** Game_Party
#==============================================================================
class Game_Party
def let_he_be_the_leader
swap_order(0, @actors.index(@last_captain_id_let_he_be_the_leader)) if
@actors.include?(@last_captain_id_let_he_be_the_leader ||= @actors[0])
if $game_variables[TemporaryCaptain::Var] == 0
@last_captain_id_let_he_be_the_leader = @actors[0]
else
swap_order(0, @actors.index($game_variables[TemporaryCaptain::Var]))
end
end
end
#==============================================================================
# ** Scene_Menu
#==============================================================================
class Scene_Menu
alias :let_he_be_the_leader_2014_07_27_on_formation_ok :on_formation_ok
def on_formation_ok
if $game_variables[TemporaryCaptain::Var] != 0 &&
(@status_window.index == 0 || @status_window.pending_index == 0)
Sound.play_buzzer
@status_window.activate
else
let_he_be_the_leader_2014_07_27_on_formation_ok
end
end
end[/pre]
[/fold]
[fold=有没有办法让敌人hp越少越容易进入异常状态?]
[pre lang="ruby" line="1"]
# 有没有办法让敌人hp越少越容易进入异常状态?
# 没有
# ……
# …………
# …………………………
# 好吧 让我们想想 毕竟我对战斗这块不太熟
# 状态的添加和转移应该是由某个发送者(技能使用方)发出指令
# 然后由承受者(目标)响应
# 也就是 A攻击B 则 【A说: B.响应技能(我的技能)】
# 然后在B的内部【def 响应技能(某技能) ... end】
# 我们不用关心A是怎么让B开始响应的 只需要关注B对这个东西的响应和处理
# 既然涉及到战斗 自然要在战斗的基本单位:战斗者中来找
# Game_BattlerBase我已经找过了 "战斗者基础"定义了一些基础的东西 但是没有定义响应
# Game_Battler"战斗者"中倒是有我们需要的
# 但是 我们首先还是建立一个模块 进行一下相关设置
module HP2StateRate
States = [3, 4, 5, 6, 7, 30]
# 我们的这个规则需要对哪些状态生效? 在这里填写状态ID
# 作为实验 先随便填几个
end
# 现在打开Game_Battler
#==============================================================================
# ** Game_Battler
#==============================================================================
class Game_Battler
# 响应攻击的方法是item_apply 它会计算攻击的伤害值然后扣血 最后加上附加状态
# 加上附加效果是通过item_effect_apply实现的 它有三个参数:使用者 物品 效果
# 各种状态的附加是存在于效果中的 根据各种具体的效果 它会呼叫具体的方法
# 我们只需要关注item_effect_add_state 至于buff我们就不管了
# 其实知道了原理想改也很容易
# 而且你还可以让他的异常状态更难消除 通过修改item_effect_remove_state
# 打开item_effect_add_state 我们发现它会根据条件调用另外两个分支
# 而它本身并不判断概率
# 不需要管两个分支是什么意思了 打开吧
# 首先是item_effect_add_state_attack
# 默认是这样的
# def item_effect_add_state_attack(user, item, effect)
# user.atk_states.each do |state_id|
# chance = effect.value1
# chance *= state_rate(state_id)
# chance *= user.atk_states_rate(state_id)
# chance *= luk_effect_rate(user)
# if rand < chance
# add_state(state_id)
# @result.success = true
# end
# end
# end
# 显然chance就是成功率
# 我们想不出来什么方法可以*简单*明了*不再绕圈子*高度兼容*的办法来修改chance
# 所以我们就用一种*简单*明了*不再绕圈子*但是兼容性一般般*的办法
# 中间插一段 前后照抄
def item_effect_add_state_attack(user, item, effect)
user.atk_states.each do |state_id|
chance = effect.value1
chance *= state_rate(state_id)
chance *= user.atk_states_rate(state_id)
chance *= luk_effect_rate(user)
if HP2StateRate::States.include?(state_id) # 这是需要生效的状态
chance *= 2 - hp_rate
# 计算公式是 1 + 损失的HP比例, 也就是 1 + 1 - 剩余的HP比例
# 这样 损失的血越多 概率越高 最高接近原概率的两倍
# 因为这是个简易版本 所以公式就让我们来设置吧 玩家不需要了解
end
if rand < chance
add_state(state_id)
@result.success = true
end
end
end
# 好 现在是item_effect_add_state_normal 我们如法炮制
def item_effect_add_state_normal(user, item, effect)
chance = effect.value1
chance *= state_rate(effect.data_id) if opposite?(user)
chance *= luk_effect_rate(user) if opposite?(user)
if HP2StateRate::States.include?(effect.data_id) # 注意这里不是state_id
# 因为state_id不存在了
chance *= 2 - hp_rate
end
if rand < chance
add_state(effect.data_id)
@result.success = true
end
end
end
# 成功了 可以打开战斗测试试一下 完美
# 写的专业点 装逼点 可以是这样:
__END__
#==============================================================================
# ** HP2StateRate
#==============================================================================
module HP2StateRate
States = [3, 4, 5, 6, 7, 30]
end
#==============================================================================
# ** Game_Battler
#==============================================================================
class Game_Battler
def item_effect_add_state_attack(user, item, effect)
user.atk_states.each do |state_id|
chance = effect.value1
chance *= state_rate(state_id)
chance *= user.atk_states_rate(state_id)
chance *= luk_effect_rate(user)
chance *= 2 - hp_rate if HP2StateRate::States.include?(state_id)
if rand < chance
add_state(state_id)
@result.success = true
end
end
end
def item_effect_add_state_normal(user, item, effect)
chance = effect.value1
chance *= state_rate(effect.data_id) if opposite?(user)
chance *= luk_effect_rate(user) if opposite?(user)
chance *= 2 - hp_rate if HP2StateRate::States.include?(effect.data_id)
if rand < chance
add_state(effect.data_id)
@result.success = true
end
end
end[/pre]
[/fold]
[fold=如何显示一个显示指定文字的窗口?要求文字能够在游戏中修改。]
[pre lang="ruby" line="1"]
# 如何显示一个显示指定文字的窗口?要求文字能够在游戏中修改。
# 这个问题有点诡异啊:到底是在哪里显示呢?菜单?标题?存档界面?GameOver?……
# (再唧唧歪歪就把你送给楼主做女仆)
# 咳咳,我们假设这是要显示在地图上的 很显然 我们至少需要了解:
# 位置(x, y)
# 文本(text)
# 鉴于默认窗口太丑,我们需要一个作为补充的图片背景功能:
# 背景(background)
# 允许设定的项 除了文本外 还有窗口的不透明度(opacity)
# 窗口的大小就自适应文字吧 有背景图的话就固定为背景图的大小
# 我们的设想中 可以通过事件脚本来更改某窗口的文字
# 还可以新建窗口 用两个窗口来显示文字 甚至三个四个好多个
# 因为各项参数都用事件脚本 所以我们不需要用模块进行设置了好可惜
# 一般而言 事件脚本调用的环境是Game_Interpreter内部 不要问我环境是什么
# 反正保护环境 人人有责(我在说什么)
#==============================================================================
# ** Game_Interpreter
#==============================================================================
class Game_Interpreter
def 新增文本窗口(文本, 横坐标 = 0, 纵坐标 = 0, 背景图片 = "", 不透明度 = 255)
# 各种默认值就在上面设置完成 不需要玩家如何如何地设置
# 乖乖调用【新增文本窗口(...)】就可以了
SceneManager.scene.新增文本窗口(文本, 横坐标, 纵坐标, 背景图片, 不透明度)
# SceneManager.scene获取当前场景 一般是地图场景
# 后面这个方法 我们还没有在地图场景里面实现
# 但是不要紧了 反正后面会实现的
end
def 更改窗口文本(窗口编号, 文本 = "")
# 我怎么知道窗口编号?
# 很简单 新建窗口的时候生成一个编号 然后返回给【新增文本窗口】
# 让用户截取这个编号并保存 那不关我们的事
SceneManager.scene.更改窗口文本(窗口编号, 文本)
end
def 更改窗口位置(窗口编号, 横坐标 = 0, 纵坐标 = 0)
SceneManager.scene.更改窗口位置(窗口编号, 横坐标, 纵坐标)
end
def 更改窗口背景图片(窗口编号, 背景图片 = "")
SceneManager.scene.更改窗口背景图片(窗口编号, 背景图片)
end
def 更改窗口不透明度(窗口编号, 不透明度 = 255)
SceneManager.scene.更改窗口不透明度(窗口编号, 不透明度)
end
def 获取窗口信息(窗口编号)
# 应该返回一个数组:[文本, 背景图片, 不透明度]
SceneManager.scene.获取窗口信息(窗口编号)
end
def 删除窗口(窗口编号)
SceneManager.scene.删除窗口(窗口编号)
end
def 暂时关闭窗口(窗口编号)
SceneManager.scene.暂时关闭窗口(窗口编号)
end
def 暂时打开窗口(窗口编号)
SceneManager.scene.暂时打开窗口(窗口编号)
end
end
# 但是我们的窗口连影子都没有
# 开工了伙计们
class Window_ShowTextOnMap < Window_Base # 果然还是继承Base吧
def initialize(text, x, y, back, opa)
@text, @back, @opa = text, back, opa
if @back == ""
super(x, y, *get_width_and_height) #不使用背景图片 自适应文字
self.opacity = @opa
else
pic = Cache.picture(@back) # Cache.picture访问的是Graphics/Picture文件夹
super(x, y, pic.width, pic.height) # 使用背景图片 根据图片来
self.back_opacity = 0
self.contents_opacity = @opa
end
# get_width_and_height是一个不存在的方法 我们将要实现它
# 使它返回文本合适的宽与高(以数组的形式)
# 前面加一个*号 目的是将数组展开 因为super呼叫父类方法 在这里要四个参数
refresh
# 描绘文字
end
# 获取合适的宽与高 允许使用控制符 比如\I[3] \n \V[6]
# 原理: 新建一个临时窗口 画一遍 观测绘制的范围 就知道合适的宽与高了
def get_width_and_height
tmp = Window_Base.new(Graphics.width, 0, Graphics.width, 1)
# 新建临时窗口
tmp.reset_font_settings
# 重置字体设置
width = 0
# 记录宽度
pos = {x: 0, y: 0, height: tmp.calc_line_height(@text)}
# 当前描绘的位置
@text.each_line do |s| # 逐行描绘
# s.gsub!(/[\n]/){""} # 去除尾部的换行符 理论上可以用chomp!代替
s.chomp! # 我想我们还是用更拉风的chomp!吧
tmp.process_character(s.slice!(0, 1), s, pos) until s.empty? # 逐字描绘
width = [pos[:x], width].max # 获取单行的宽度 记录最大值
pos[:x] = 0 # 换行
pos[:y] += pos[:height] # 换行
pos[:height] = tmp.calc_line_height s #确定合适高度
# 循环描绘下一行
end
# 没有手动对tmp进行dispose 因为它在窗口外 看不到 而且tmp作用域要消失了
# 很快就会被GC弄死 这里不需要理解
[width + standard_padding * 2, pos[:y] + standard_padding * 2] # 返回宽高
end
# 进行实际的描绘
def refresh
contents.clear
pic = Cache.picture(@back)
contents.blt(0, 0, pic, Rect.new(0, 0, pic.width, pic.height))
draw_text_ex(0, 0, @text)
end
# 改变文字
def set_text(text)
@text = text
refresh
end
# 位置
def set_pos(x, y)
self.x, self.y = x, y
end
# 背景图片
def set_back(back)
return if @back == back
@back = back
if @back == ""
self.move(self.x, self.y, *get_width_and_height)
self.opacity = @opa
else
pic = Cache.picture(@back)
self.move(self.x, self.y, pic.width, pic.height)
self.back_opacity = 0
self.contents_opacity = @opa
end
refresh
end
# 不透明度
def set_opa(opa)
@opa = opa
if @back == ""
self.opacity = @opa
else
self.contents_opacity = @opa
end
end
# 获取信息
def get_info
[@text, @back, @opa]
end
end
# 好无聊 累死了 不想写了 就这样吧
# ………………
# 为了不做楼主女仆 我还是继续吧
# 我们已经完成了一个【入口】 可以接受事件脚本信息 但是还没有人来处理
# 我们已经完成了一个【窗口】 可以在地图上显示文本 但是还没有人来管理
# 所有的事实都指向一个结果 真相只有一个!
class Scene_Map
# 首先 在开始的时候地图场景会建立一系列窗口
# 我们把我们的窗口混进去一起建立…………不需要一次性建好 放个名单就行
# 在方法create_all_windows中
alias :我要往你里面塞一点东西哦_create_all_windows君 :create_all_windows
def create_all_windows
我要往你里面塞一点东西哦_create_all_windows君
我要塞的东西之一
end
def 我要塞的东西之一
@显示文本的窗口们 = []
end
def 新增文本窗口(text, x, y, back, opa)
@显示文本的窗口们.push(Window_ShowTextOnMap.new(text, x, y, back, opa))
@显示文本的窗口们.size - 1 # 这就是返回的窗口编号啦
end
def 更改窗口文本(id, text)
@显示文本的窗口们[id].set_text(text)
end
def 更改窗口位置(id, x, y)
@显示文本的窗口们[id].set_pos(x, y)
end
def 更改窗口背景图片(id, back)
@显示文本的窗口们[id].set_back(back)
end
def 更改窗口不透明度(id, opa = 255)
@显示文本的窗口们[id].set_opa(opa)
end
def 获取窗口信息(id)
@显示文本的窗口们[id].get_info
end
def 删除窗口(id)
@显示文本的窗口们[id].dispose
end
def 暂时关闭窗口(id)
@显示文本的窗口们[id].close if @显示文本的窗口们[id].open?
end
def 暂时打开窗口(id)
@显示文本的窗口们[id].open if @显示文本的窗口们[id].close?
end
# 很好 虽然这种重复冗余令人难以置信 但是完成了不是吗?元编程去死吧!
# 等等 我们是不是忘了什么?
# 更新!update!释放!dispose!
alias :我也要往你里面塞一点东西哦_update_all_windows君 :update_all_windows
def update_all_windows
我也要往你里面塞一点东西哦_update_all_windows君
我要塞的东西之二
end
def 我要塞的东西之二
@显示文本的窗口们.each{|x| x.update unless x.disposed?}
end
alias :我还要往你里面塞一点东西哦_dispose_all_windows君 :dispose_all_windows
def dispose_all_windows
我还要往你里面塞一点东西哦_dispose_all_windows君
我要塞的东西之三
end
def 我要塞的东西之三
@显示文本的窗口们.each{|x| x.dispose unless x.disposed?}
end
end
# 完美!
# 照例装逼化
__END__
#==============================================================================
# ** Game_Interpreter
#==============================================================================
class Game_Interpreter
def new_text_window(text, x = 0, y = 0, back = "", opa = 255)
SceneManager.scene.new_text_window(text, x, y, back, opa)
end
def delete_text_window(id)
SceneManager.scene.delete_text_window(id)
end
def close_text_window(id)
SceneManager.scene.close_text_window(id)
end
def open_text_window(id)
SceneManager.scene.open_text_window(id)
end
def text_window_set_text(id, text = "")
SceneManager.scene.text_window_set_text(id, text)
end
def text_window_set_pos(id, x = 0, y = 0)
SceneManager.scene.text_window_set_pos(id, x, y)
end
def text_window_set_back(id, back = "")
SceneManager.scene.text_window_set_back(id, back)
end
def text_window_set_opa(id, opa = 255)
SceneManager.scene.text_window_set_opa(id, opa)
end
def text_window_get_info(id)
SceneManager.scene.text_window_get_info(id)
end
end
#==============================================================================
# ** Window_ShowTextOnMap
#==============================================================================
class Window_ShowTextOnMap < Window_Base
def initialize(text, x, y, back, opa)
@text, @back, @opa = text, back, opa
if @back.empty?
super(x, y, *get_width_and_height)
self.opacity = @opa
else
pic = Cache.picture(@back)
super(x, y, pic.width, pic.height)
self.back_opacity = 0
self.contents_opacity = @opa
end
refresh
end
def get_width_and_height
tmp = Window_Base.new(Graphics.width, 0, Graphics.width, 1)
tmp.reset_font_settings
width = 0
pos = {x: 0, y: 0, height: tmp.calc_line_height(@text)}
@text.each_line do |s|
s.chomp!
tmp.process_character(s.slice!(0, 1), s, pos) until s.empty?
width = [pos[:x], width].max
pos[:x] = 0
pos[:y] += pos[:height]
pos[:height] = tmp.calc_line_height s
end
[width + standard_padding * 2, pos[:y] + standard_padding * 2]
end
def refresh
contents.clear
pic = Cache.picture(@back)
contents.blt(0, 0, pic, Rect.new(0, 0, pic.width, pic.height))
draw_text_ex(0, 0, @text)
end
def set_text(text)
@text = text
refresh
end
def set_pos(x, y)
self.x, self.y = x, y
end
def set_back(back)
return if @back == back
@back = back
if @back.empty?
self.move(self.x, self.y, *get_width_and_height)
self.opacity = @opa
else
pic = Cache.picture(@back)
self.move(self.x, self.y, pic.width, pic.height)
self.back_opacity = 0
self.contents_opacity = @opa
end
refresh
end
def set_opa(opa)
@opa = opa
if @back == ""
self.opacity = @opa
else
self.contents_opacity = @opa
end
end
def get_info
[@text, @back, @opa]
end
end
#==============================================================================
# ** Scene_Map
#==============================================================================
class Scene_Map
alias :text_window_create_all_windows :create_all_windows
def create_all_windows
text_window_create_all_windows
create_text_windows
end
def create_text_windows
@text_windows = []
end
alias :text_window_update_all_windows :update_all_windows
def update_all_windows
text_window_update_all_windows
update_text_windows
end
def update_text_windows
@text_windows.each{|x| x.update unless x.disposed?}
end
alias :text_window_dispose_all_windows :dispose_all_windows
def dispose_all_windows
text_window_dispose_all_windows
dispose_text_windows
end
def dispose_text_windows
@text_windows.each{|x| x.dispose unless x.disposed?}
end
def new_text_window(*args)
@text_windows.push Window_ShowTextOnMap.new(*args)
@text_windows.size - 1
end
def delete_text_window(id)
@text_windows[id].dispose
end
def close_text_window(id)
@text_windows[id].close if @text_windows[id].open?
end
def open_text_window(id)
@text_windows[id].open if @text_windows[id].close?
end
def text_window_set_text(id, text)
@text_windows[id].set_text(text)
end
def text_window_set_pos(id, x, y)
@text_windows[id].set_pos(x, y)
end
def text_window_set_back(id, back)
@text_windows[id].set_back(back)
end
def text_window_set_opa(id, opa = 255)
@text_windows[id].set_opa(opa)
end
def text_window_get_info(id)
@text_windows[id].get_info
end
end[/pre]
[/fold] |
评分
-
查看全部评分
|