Project1
标题: 为什么在window的update里写this.y-=1会没有效果。 [打印本页]
作者: kklt 时间: 2020-12-19 12:45
标题: 为什么在window的update里写this.y-=1会没有效果。
Window_TitleCommand_update = Window_TitleCommand.update
Window_TitleCommand.update = function (params) {
Window_TitleCommand_update.call(this)
this.y -= 1
}
Window_TitleCommand_update = Window_TitleCommand.update
Window_TitleCommand.update = function (params) {
Window_TitleCommand_update.call(this)
this.y -= 1
}
而直接在控制台里修改的update就可行。
下面就是控制台的代码
a=-5
asd = SceneManager._scene._commandWindow.update
SceneManager._scene._commandWindow.update = function(){
asd.call(this)
if (this.y>=20){
a+=0.1
this.y-=(a**3)/100
}
}
a=-5
asd = SceneManager._scene._commandWindow.update
SceneManager._scene._commandWindow.update = function(){
asd.call(this)
if (this.y>=20){
a+=0.1
this.y-=(a**3)/100
}
}
而且在scene_title里改也有效。
奇怪。。
作者: yang1zhi 时间: 2020-12-19 14:59
说明他在其他地方也有设定这个值
作者: catinfiltrator 时间: 2020-12-19 20:37
学过一点编程。
Window_TitleCommand 和 SceneManager 是两种变量,所以它们的数据是不互通的。
this 是一种叫本身变量。
<- Window_TitleCommand_update = Window_TitleCommand.update
- Window_TitleCommand.update = function (params) {
- Window_TitleCommand_update.call(this)
- this.y -= 1 // 这里可以这样写 Window_TitleCommand_update.y = -1;
- }
复制代码 >
所以你在 SceneManager 里修改 this.y 是 SceneManager.y 而不是 Window_TitleCommand_update.y。
如果要在 Window_TitleCommand_update 里修改 SceneManager.y 的话:
- Window_TitleCommand_update = Window_TitleCommand.update
- Window_TitleCommand.update = function (params) {
- Window_TitleCommand_update.call(this)
- SceneManager.y -= 1 // 这里改成这样
- }
复制代码
这是我觉得,所以有可能是错的。
作者: KB.Driver 时间: 2020-12-19 20:44
本帖最后由 KB.Driver 于 2020-12-19 20:45 编辑
错误写法:
正确写法:
var Window_TitleCommand_update = Window_TitleCommand.prototype.update;
Window_TitleCommand.prototype.update = function (params) {
Window_TitleCommand_update.call(this, params);
this.y -= 1; // 顺带一提,窗口会一直往上走,马上就跑到画面外去了
}
var Window_TitleCommand_update = Window_TitleCommand.prototype.update;
Window_TitleCommand.prototype.update = function (params) {
Window_TitleCommand_update.call(this, params);
this.y -= 1; // 顺带一提,窗口会一直往上走,马上就跑到画面外去了
}
原因:
需要修改的是Window的实例方法,需要在prototype身上修改。
直接在类身上的方法近似于“静态方法”
具体的需要楼主拥有一些面向对象的知识,可以去了解一下。
作者: kklt 时间: 2020-12-19 21:24
js的构造函数的this以及prototype的实际含义以及call()的内容,许久没碰js,被遗忘了。
总之感谢解答。
(至于var和窗口飘走什么的就别再意啦,,为了测试方便直接上了。)
作者: kklt 时间: 2020-12-19 21:42
啊这。确实是错了。
有几点我补充一下。
SceneManager里有一个属性叫_scene,指向当前场景的实例。
而当前场景是scene_title,所以
SceneManager._scene._commandWindow.update 里的this指向_commandWindow,
它是Window_TitleCommand的实例。
所以,this.y不是问题所在,同楼上所述。
关键是对象的update实际上是在构造函数的prototype里。
我把这个当作直接定义在Window_TitleCommand里的this.update并成功把它和普通函数的使用混淆了。
嗯,大概就是这样。
总之还是感谢解答啦。
作者: kklt 时间: 2020-12-19 21:47
感谢解答。
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |