查看: 3583|回复: 13

[有事请教] contents.clear()怎么在执行这个的时候,再执行一段函数

[复制链接]
梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2019-4-11 16:48:50 | 显示全部楼层 |阅读模式

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

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

×
我在窗口写了一些精灵
但是精灵是不能用contents.clear()清空的
所以我想要在contents.clear()的时候清空一下精灵。
但是要在脚本里一个个找contents.clear(),也太费事了
梦石
0
星屑
34465
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2019-4-11 21:29:34 | 显示全部楼层
本帖最后由 芯☆淡茹水 于 2019-4-11 21:34 编辑

contents 是一个 bitmap , 可以直接改它的 clear 方法啊。

在生成 contents 后, 重新绑一个 clear 方法, 照抄 Bitmap 的 clear 方法内容, 再加上你的 清除精灵 的方法。

[pre lang="javascript"]var Last_Window_BaseCreateContents = Window_Base.prototype.createContents;
Window_Base.prototype.createContents = function() {
    Last_Window_BaseCreateContents.call(this);
    this.contents.clear = this.clear.bind(this);
};
Window_Base.prototype.clear = function() {
    this.contents.clearRect(0, 0, this.contents.width, this.contents.height);
    this.清除精灵();
};[/pre]

改在 Window_Base 里,所有以 Window_Base 为基础建立的窗口, 其 this.contents.clear()  运行的都是重新绑的这个方法。
其他 Sprite 里的 bitmap.clear() 仍是原来的方法。

点评

哦。函数也可以直接用等号。我以为要写Bitmap的clear  发表于 2019-4-11 21:36
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
34465
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2019-4-11 21:45:55 | 显示全部楼层
Bitmap.prototype.clear = function() {
    this.clearRect(0, 0, this.width, this.height);
};

这不还是一个 等号 !
方法 也是一个对象, 可以随时更改。

点评

会报错Maximum call stack size exceeded  发表于 2019-4-11 21:52
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
34465
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2019-4-11 22:00:01 | 显示全部楼层
芯☆淡茹水 发表于 2019-4-11 21:45
Bitmap.prototype.clear = function() {
    this.clearRect(0, 0, this.width, this.height);
};

1.png

2.png

点评

新的这里是可以的。改了后,旧的那里报错  发表于 2019-4-11 22:36
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
34465
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2019-4-11 22:58:24 | 显示全部楼层
旧的么! 那生成一个默认的 状态窗口 看看

截图00.png

截图02.png

至于具体报错是否你自己的 清除精灵 的方法, 这也无可获知,
但至少,先判断再清除总会吧!

this.精灵 && this.精灵.清除();

如果你要说你总是一直报错,也没有具体报错内容或图片,那俺也没办法。
反正改法就是 2L , 懂 js 的自然懂。

评分

参与人数 1赞 +1 收起 理由
yang1zhi + 1 认可答案

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

 楼主| 发表于 2019-4-11 23:28:57 | 显示全部楼层
芯☆淡茹水 发表于 2019-4-11 22:58
旧的么! 那生成一个默认的 状态窗口 看看

1.png

像普通的报错,我也知道什么问题。
但像这种Maximum call stack size exceeded
就不知道是什么问题

他不在新写的这里有问题,偏偏是在旧的那里有问题
可旧的还是旧的,又没改过

点评

是了,是这个原因呢。太谢谢大佬了  发表于 2019-4-12 00:11
名字稍微长点好,以免与其他外来插件有追加窗口方法时发生重合。 上面我只写 clear 只是示例,名字你可以灵活的随意取啊  发表于 2019-4-11 23:39
堆栈过深。 你把 Windiw_Base 的 clear 方法 换个名, 这个名和其他插件的的方法命名重合了  发表于 2019-4-11 23:35
回复

使用道具 举报

梦石
0
星屑
34465
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2019-4-12 09:19:53 | 显示全部楼层
如果不想搬 Bitmap 的 clear 方法内容, 可以用 call , 但指针需要换成  this.contents
比如这样:
  1. var Last_Window_BaseCreateContents = Window_Base.prototype.createContents;
  2. Window_Base.prototype.createContents = function() {
  3.     Last_Window_BaseCreateContents.call(this);
  4.     this.contents.clear = this.clearAndDeleteSprite.bind(this);
  5. };
  6. Window_Base.prototype.clearAndDeleteSprite = function() {
  7.     Bitmap.prototype.clear.call(this.contents);
  8.     alert('清除精灵');
  9. };
复制代码

点评

受教了  发表于 2019-4-12 10:30
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部