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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

跳转到指定楼层
1
发表于 2019-4-11 16:48:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我在窗口写了一些精灵
但是精灵是不能用contents.clear()清空的
所以我想要在contents.clear()的时候清空一下精灵。
但是要在脚本里一个个找contents.clear(),也太费事了

Lv5.捕梦者

梦石
0
星屑
32054
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

2
发表于 2019-4-11 21:29:34 | 只看该作者
本帖最后由 芯☆淡茹水 于 2019-4-11 21:34 编辑

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

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

JAVASCRIPT 代码复制
  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.clear.bind(this);
  5. };
  6. Window_Base.prototype.clear = function() {
  7.     this.contents.clearRect(0, 0, this.contents.width, this.contents.height);
  8.     this.清除精灵();
  9. };


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

点评

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

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32054
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

3
发表于 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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32054
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

4
发表于 2019-4-11 22:00:01 | 只看该作者
芯☆淡茹水 发表于 2019-4-11 21:45
Bitmap.prototype.clear = function() {
    this.clearRect(0, 0, this.width, this.height);
};



点评

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

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32054
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

5
发表于 2019-4-11 22:58:24 | 只看该作者
旧的么! 那生成一个默认的 状态窗口 看看





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

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

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

评分

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

查看全部评分

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

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

6
 楼主| 发表于 2019-4-11 23:28:57 | 只看该作者
芯☆淡茹水 发表于 2019-4-11 22:58
旧的么! 那生成一个默认的 状态窗口 看看



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

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

点评

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

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32054
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

7
发表于 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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-13 12:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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