Project1

标题: contents.clear()怎么在执行这个的时候,再执行一段函数 [打印本页]

作者: yang1zhi    时间: 2019-4-11 16:48
标题: contents.clear()怎么在执行这个的时候,再执行一段函数
我在窗口写了一些精灵
但是精灵是不能用contents.clear()清空的
所以我想要在contents.clear()的时候清空一下精灵。
但是要在脚本里一个个找contents.clear(),也太费事了
作者: 芯☆淡茹水    时间: 2019-4-11 21:29
本帖最后由 芯☆淡茹水 于 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() 仍是原来的方法。
作者: 芯☆淡茹水    时间: 2019-4-11 21:45
Bitmap.prototype.clear = function() {
    this.clearRect(0, 0, this.width, this.height);
};

这不还是一个 等号 !
方法 也是一个对象, 可以随时更改。
作者: 芯☆淡茹水    时间: 2019-4-11 22:00
芯☆淡茹水 发表于 2019-4-11 21:45
Bitmap.prototype.clear = function() {
    this.clearRect(0, 0, this.width, this.height);
};




作者: 芯☆淡茹水    时间: 2019-4-11 22:58
旧的么! 那生成一个默认的 状态窗口 看看





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

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

如果你要说你总是一直报错,也没有具体报错内容或图片,那俺也没办法。
反正改法就是 2L , 懂 js 的自然懂。
作者: yang1zhi    时间: 2019-4-11 23:28
芯☆淡茹水 发表于 2019-4-11 22:58
旧的么! 那生成一个默认的 状态窗口 看看



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

他不在新写的这里有问题,偏偏是在旧的那里有问题
可旧的还是旧的,又没改过
作者: 芯☆淡茹水    时间: 2019-4-12 09:19
如果不想搬 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. };
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1