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

Project1

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

[已经解决] 关于JS脚本学习的疑问

[复制链接]

Lv5.捕梦者

梦石
0
星屑
31200
在线时间
608 小时
注册时间
2014-7-18
帖子
729

开拓者

跳转到指定楼层
1
发表于 2016-5-7 13:08:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
经过对比VA脚本和JS脚本,我有了以下疑问:
1.是不是
function Window_Base() {
    this.initialize.apply(this, arguments);
}
Window_Base.prototype = Object.create(Window.prototype);
就相当于
class Window_Base < Window?
2.是不是
Window_Base.prototype.initialize = function(x, y, width, height) {
    Window.prototype.initialize.call(this);
    this.loadWindowskin();
    this.move(x, y, width, height);
    this.updatePadding();
    this.updateBackOpacity();
    this.updateTone();
    this.createContents();
    this._opening = false;
    this._closing = false;
    this._dimmerSprite = null;
};
就相当于
  def initialize(x, y, width, height)
    super
    self.windowskin = Cache.system("Window")
    update_padding
    update_tone
    create_contents
    @opening = @closing = false
  end?
3.那么Window_Base.prototype.constructor = Window_Base;有时什么意思?
其中的constructor又是什么方法?

Lv1.梦旅人

梦石
0
星屑
60
在线时间
705 小时
注册时间
2007-12-23
帖子
874
2
发表于 2016-5-7 14:57:20 | 只看该作者
JS里面的函数也是对象,可以赋值。
RMMV的JS没有显式地用到类(Class)的概念,而是使用函数的原型(prototype)来实现类的功能
Window_Base.prototype = Object.create(Window.prototype);
这个语句就是把Window.prototype复制一份给Window_Base.prototype,这样Window_Base类就获得了Window类的所有方法,达到了继承(inherit)的效果。
而Ruby里的继承则是显式地写成 class Window_Base < Window
第二个问题,这段js代码只是定义了Window_Base类的initialize方法,这只是一个普通的方法,并不像Ruby那样initialize就是构造函数。但是在Window_Base函数中,有这么一句this.initialize.apply(this, arguments);,就是当调用Window_Base函数(可以看作Window_Base类的构造函数,会在下面提到)的时候,将相同的参数和this引用传给initialize,也就是让initialize成为实际上的构造函数,从而与RGSS里面的写法统一。
Window_Base.prototype.constructor = Window_Base这个语句中,constructor方法就代表构造函数。前面提到,JS的函数是可以赋值的,将constructor赋值为Window_Base,就是将Window_Base函数设为构造函数(实际上它会原封不动地调用initialize,所以实际上的构造函数其实是initialize)
具体原理不必理解得太深,要写脚本只要模仿着写就行了,自搞一套反而会导致代码令人费解,因为会写脚本的人不一定都非常理解JS(那些外站脚本很多在IntellijIdea里Inspect一下会报好几百个警告,所以对于语法不要纠结太深,写出来能用就行了。。)
买了正版RMMV的同学进来看一下,谢谢~
https://rpg.blue/thread-393237-1-1.html
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31200
在线时间
608 小时
注册时间
2014-7-18
帖子
729

开拓者

3
 楼主| 发表于 2016-5-7 22:42:06 | 只看该作者
gonglinyuan 发表于 2016-5-7 14:57
JS里面的函数也是对象,可以赋值。
RMMV的JS没有显式地用到类(Class)的概念,而是使用函数的原型(prototype ...

谢谢回答!
那么,我还有几个问题,请您解答一下:
1.我新建了一个窗口,想在地图画面上显示出来,那么我该怎样写?
是不是必须像VA中的Scene_Map < Scene_Base重新再写一遍下面的脚本
function Scene_Map() {
    this.initialize.apply(this, arguments);
}

Scene_Map.prototype = Object.create(Scene_Base.prototype);
Scene_Map.prototype.constructor = Scene_Map;
然后,是不是必须像VA中的@XX = Window_XX.new一样写下面的:
XX = new Window_XX
但是我像下面这样写:
Scene_Map.prototype.xjzsq_start = Scene_Map.prototype.start;
Scene_Map.prototype.start = function(){
    Scene_Map.prototype.xjzsq_start.call(this);
    w = new Window_MapStatus;
测试以后显示TypeError:undefined is not a function
应该怎么写才能让窗口在场景中显示出来?
求大神指点迷津
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
4
发表于 2016-5-7 22:46:23 | 只看该作者
本帖最后由 汪汪 于 2016-5-7 22:47 编辑

new Window_MapStatus()

以及
Scene_Map.prototype.xjzsq_start.call(this); 写成 this.xjzsq_start() 应该就可以

点评

能不能给些写个例子,谢谢  发表于 2016-5-8 23:24
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31200
在线时间
608 小时
注册时间
2014-7-18
帖子
729

开拓者

5
 楼主| 发表于 2016-5-9 12:30:33 | 只看该作者
汪汪 发表于 2016-5-7 22:46
new Window_MapStatus()

以及

大神能不能给个例子,比如在地图上显示人物名字
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
23068
在线时间
8648 小时
注册时间
2011-12-31
帖子
3367
6
发表于 2016-5-9 17:46:44 | 只看该作者
xjzsq 发表于 2016-5-7 22:42
谢谢回答!
那么,我还有几个问题,请您解答一下:
1.我新建了一个窗口,想在地图画面上显示出来,那么我 ...

參考
マップ上に常に情報ウィンドウを表示する
http://ktnhmv.jugem.jp/?cid=5
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31200
在线时间
608 小时
注册时间
2014-7-18
帖子
729

开拓者

7
 楼主| 发表于 2016-5-11 12:13:49 | 只看该作者
tseyik 发表于 2016-5-9 17:46
參考
マップ上に常に情報ウィンドウを表示する
http://ktnhmv.jugem.jp/?cid=5

日站打不开啊,能不能帮忙复制一下

点评

我的意思是我无法翻墙,打不开网页,所以请您帮忙复制一下内容  发表于 2016-5-13 13:52
這個是js+遂段解折,単単下js,學習効果大幅下降,不如直接參考本體的js碼  发表于 2016-5-11 13:46
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
8
发表于 2016-5-11 17:02:31 | 只看该作者
本帖最后由 汪汪 于 2016-5-11 17:06 编辑

JAVASCRIPT 代码复制
  1. Scene_Map.prototype.createDisplayObjects = function() {
  2.         //创建精灵组
  3.     this.createSpriteset();
  4.         //创建地图名称窗口
  5.     this.createMapNameWindow();
  6.     //创建窗口层
  7.     this.createWindowLayer();
  8.         //创建所有窗口
  9.     this.createAllWindows();
  10.  
  11.     //添加部分 创建一个显示名字的窗口
  12.     this.createNameWindow();
  13.  
  14.  
  15.  
  16. };
  17.  
  18. //创建一个显示名字的窗口
  19. Scene_Map.prototype.createNameWindow = function() {
  20.         this._nameWindow = new Window_Help(1) //设置为 一个 一行的  窗口帮助
  21.         this._nameWindow.setText("名字") //设置该窗口文本为 "名字"
  22.     this.addWindow(this._nameWindow); //窗口添加到窗口层
  23.  
  24. };

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31200
在线时间
608 小时
注册时间
2014-7-18
帖子
729

开拓者

9
 楼主| 发表于 2016-5-13 19:57:38 | 只看该作者
本帖最后由 xjzsq 于 2016-5-14 17:39 编辑
汪汪 发表于 2016-5-11 17:02
Scene_Map.prototype.createDisplayObjects = function() {
        //创建精灵组
    this.createSpriteset();

1.是不是在JS里面向Scene_Map.prototype.createDisplayObjects里添加方法,需要把方法里的内容重新再写一遍?
2.是不是场景的方法可以直接使用,而不用再定义类?
3.Window_Help的那个行数为“1”是怎么回事?
在Window_Base中也要加上这个参数吗?
重新完善一下问题:2.在VA中,想要重新定义场景中的一个方法,例如我想在地图中显示一个窗口,我必须更改Scene_Map中的start方法,那样我必须先写上
class Scene_Map < Scene_Base
end
然后在中间重新定义start,
但是在8L的回答中,直接用的是Scene_Map.prototype,createDisplayObjects = fuction(){
}
然后把该方法的内容都加了进去,
是不是不用再重新定义一次场景了?(fuction Scene_Map...之类的代码)
3.8L的
this._nameWindow = new Window_Help(1)
这行代码中,参数“1”是怎么回事?
为什么我在Window_Help中没有找到需要加参数的标志?
如果改成
this._nameWindow = new Window_Base(1)
的话,还需要加上参数“1”吗?
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

10
发表于 2016-5-13 21:15:45 | 只看该作者
本帖最后由 taroxd 于 2016-5-13 21:18 编辑
xjzsq 发表于 2016-5-13 19:57
1.是不是在JS里面向Scene_Map.prototype.createDisplayObjects里添加方法,需要把方法里的内容重新再写一 ...


1. 不用。方法类似 ruby 的 alias,你可以参考 MV 自带的那些插件
2. 没看懂问题
3. 没看懂问题

请尽量使用代码和英文提问,不然的话就会像后两个问题那样,我都没看懂。当然,最好也不要一贴多问咯
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 10:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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