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

Project1

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

[有事请教] 为什么在window的update里写this.y-=1会没有效果。

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1854
在线时间
395 小时
注册时间
2014-7-7
帖子
264

开拓者

跳转到指定楼层
1
发表于 2020-12-19 12:45:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
JAVASCRIPT 代码复制
  1. Window_TitleCommand_update = Window_TitleCommand.update
  2. Window_TitleCommand.update = function (params) {
  3.     Window_TitleCommand_update.call(this)
  4.     this.y -= 1
  5. }


而直接在控制台里修改的update就可行。
下面就是控制台的代码

JAVASCRIPT 代码复制
  1. a=-5
  2. asd = SceneManager._scene._commandWindow.update
  3. SceneManager._scene._commandWindow.update = function(){
  4.   asd.call(this)
  5.   if (this.y>=20){
  6.       a+=0.1
  7.   this.y-=(a**3)/100
  8.   }
  9.  
  10. }

而且在scene_title里改也有效。
奇怪。。
take is cheap

Lv4.逐梦者

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

开拓者

2
发表于 2020-12-19 14:59:04 | 只看该作者
说明他在其他地方也有设定这个值
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
453
在线时间
31 小时
注册时间
2020-12-18
帖子
2
3
发表于 2020-12-19 20:37:14 | 只看该作者
学过一点编程。

Window_TitleCommand 和 SceneManager 是两种变量,所以它们的数据是不互通的。

this 是一种叫本身变量。

<
  1. Window_TitleCommand_update = Window_TitleCommand.update
  2. Window_TitleCommand.update = function (params) {
  3.     Window_TitleCommand_update.call(this)
  4.     this.y -= 1 // 这里可以这样写 Window_TitleCommand_update.y = -1;
  5. }
复制代码
>

所以你在 SceneManager 里修改 this.y 是 SceneManager.y 而不是 Window_TitleCommand_update.y。

如果要在 Window_TitleCommand_update 里修改 SceneManager.y 的话:
  1. Window_TitleCommand_update = Window_TitleCommand.update
  2. Window_TitleCommand.update = function (params) {
  3.     Window_TitleCommand_update.call(this)
  4.     SceneManager.y -= 1 // 这里改成这样
  5. }
复制代码


这是我觉得,所以有可能是错的。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39475
在线时间
1916 小时
注册时间
2010-11-14
帖子
3319

R考场第七期纪念奖

4
发表于 2020-12-19 20:44:07 | 只看该作者
本帖最后由 KB.Driver 于 2020-12-19 20:45 编辑

错误写法:


正确写法:
JAVASCRIPT 代码复制
  1. var Window_TitleCommand_update = Window_TitleCommand.prototype.update;
  2. Window_TitleCommand.prototype.update = function (params) {
  3.     Window_TitleCommand_update.call(this, params);
  4.     this.y -= 1; // 顺带一提,窗口会一直往上走,马上就跑到画面外去了
  5. }


原因:
需要修改的是Window的实例方法,需要在prototype身上修改。
直接在类身上的方法近似于“静态方法”
具体的需要楼主拥有一些面向对象的知识,可以去了解一下。
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1854
在线时间
395 小时
注册时间
2014-7-7
帖子
264

开拓者

5
 楼主| 发表于 2020-12-19 21:24:26 | 只看该作者

js的构造函数的this以及prototype的实际含义以及call()的内容,许久没碰js,被遗忘了。
总之感谢解答。
(至于var和窗口飘走什么的就别再意啦,,为了测试方便直接上了。)
take is cheap
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1854
在线时间
395 小时
注册时间
2014-7-7
帖子
264

开拓者

6
 楼主| 发表于 2020-12-19 21:42:04 | 只看该作者
catinfiltrator 发表于 2020-12-19 20:37
学过一点编程。

Window_TitleCommand 和 SceneManager 是两种变量,所以它们的数据是不互通的。

啊这。确实是错了。
有几点我补充一下。
SceneManager里有一个属性叫_scene,指向当前场景的实例。
而当前场景是scene_title,所以
SceneManager._scene._commandWindow.update 里的this指向_commandWindow,
它是Window_TitleCommand的实例。
所以,this.y不是问题所在,同楼上所述。
关键是对象的update实际上是在构造函数的prototype里。
我把这个当作直接定义在Window_TitleCommand里的this.update并成功把它和普通函数的使用混淆了。
嗯,大概就是这样。
总之还是感谢解答啦。
take is cheap
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1854
在线时间
395 小时
注册时间
2014-7-7
帖子
264

开拓者

7
 楼主| 发表于 2020-12-19 21:47:33 | 只看该作者
yang1zhi 发表于 2020-12-19 14:59
说明他在其他地方也有设定这个值

感谢解答。
take is cheap
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-15 09:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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