JavaScript Mod:修订间差异

来自像素工厂维基百科-mindustry wiki
无编辑摘要
无编辑摘要
第2行: 第2行:
Mindustry使用: [https://github.com/Anuken/Rhino Rhino]
Mindustry使用: [https://github.com/Anuken/Rhino Rhino]


类似于[https://nodejs.cn/ node.js],它没有''window,document''等一系列变量
类似于[https://nodejs.cn/ node.js],它没有''<code>window</code>,<code>document</code>''等一系列变量


[[https://www.runoob.com/js/js-tutorial.html 菜鸟教程]] | [[https://developer.mozilla.org/zh-CN/docs/Web/javascript MDN]]
[[https://www.runoob.com/js/js-tutorial.html 菜鸟教程]] | [[https://developer.mozilla.org/zh-CN/docs/Web/javascript MDN]]
第10行: 第10行:
一些常用的变量
一些常用的变量


* scriptName: 当前脚本的名称(这会随脚本的变化而变化,建议: '''const''' { scriptName } = this;)
* scriptName: 当前脚本的名称(这会随脚本的变化而变化,建议: <code>'''const''' { scriptName } = '''this''';</code>
* modName: 当前Mod的名称(这会随mod的变化而变化,建议: '''const''' { modName } = this;)
* modName: 当前Mod的名称(这会随mod的变化而变化,建议: <code>'''const''' { modName } = '''this''';</code>
* print: 打印日志
* print: 打印日志
* extend: '''js 'extend(Base, ..., {})' = java 'new Base(...) {}''''
* extend: '''js '<nowiki/>'''<code>extend(Base, ..., {})</code>'''<nowiki/>' = java '<nowiki/>'''<code>new Base(...) {}</code>'''<nowiki/>''''


=== 关于[https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment 解构复制] ===
=== 关于[https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment 解构复制] ===
'''cosnt''' { a, b } = { a: 1, b: 2 };
<code>'''cosnt''' { a, b } '''=''' { a: 1, b: 2 };</code>


=== 特殊语法 ===
=== 特殊语法 ===


====== '''new''' xxx''/* functionName */'' ( ''/* args */'' ) { ''/* code */'' } ======
====== '''new''' xxx''/* functionName */'' ( ''/* args */'' ) { ''/* code */'' } ======
其实就是xxx''/* functionName */'' '''(''' ''/* args */'' , { ''/* code */'' } ''')'''
其实就是<code>xxx''/* functionName */'' '''(''' ''/* args */'' , { ''/* code */'' } ''')'''</code>


在最后面传了一个对象
在最后面传了一个对象


所以你可以:<code>'''new''' extend(Block, "a block") {</code>
所以你可以:<code>'''new''' extend('''Block''', "a block") {</code>


<code>setBars() { print(this.barMap) }</code>
<code>setBars() { print(this.barMap) }</code>
第32行: 第32行:


===== Getter & Setter =====
===== Getter & Setter =====
你可以使用'''xxx.class'''等价于'''xxx.getClass()'''
你可以使用<code>xxx.class</code>等价于<code>xxx.getClass()</code>


* 注意:'''Vars.class'''获取到的是'''Class'''类,如果想要获取对应类对象 可以使用'''Vars.__javaObject__'''
* 注意:<code>Vars.class</code>获取到的是'''Class'''类,如果想要获取对应类对象 可以使用<code>Vars.__javaObject__</code>


=== 一些小坑 ===
=== 一些小坑 ===
一个函数接受所有方法,例如:
一个函数接受所有方法,例如:


* extend(BulletType, { '''hit(b, x, y) {''' '''print(b)}}'''
* <code>extend(BulletType, {</code>
*  <code>'''hit(b, x, y) {''' '''print(b);''' '''}'''</code>
* <code>}</code>


'''BulletType#hit(Bullet b)''''''BulletType#hit(Bullet b, float x, float y)'''都会调用上面的hit方法,
<code>BulletType#'''hit'''('''Bullet''' b)</code>和<code>BulletType#'''hit'''('''Bullet''' b, '''float''' x, '''float''' y)</code>都会调用上面的hit方法,


所以x,y可能为undefined
所以x,y可能为undefined

2024年2月17日 (六) 21:47的版本

Mindustry的JS

Mindustry使用: Rhino

类似于node.js,它没有windowdocument等一系列变量

[菜鸟教程] | [MDN]

Mindustry提供了一下全局变量:global.js

一些常用的变量

  • scriptName: 当前脚本的名称(这会随脚本的变化而变化,建议: const { scriptName } = this;
  • modName: 当前Mod的名称(这会随mod的变化而变化,建议: const { modName } = this;
  • print: 打印日志
  • extend: js 'extend(Base, ..., {})' = java 'new Base(...) {}'

关于解构复制

cosnt { a, b } = { a: 1, b: 2 };

特殊语法

new xxx/* functionName */ ( /* args */ ) { /* code */ }

其实就是xxx/* functionName */ ( /* args */ , { /* code */ } )

在最后面传了一个对象

所以你可以:new extend(Block, "a block") {

setBars() { print(this.barMap) }

}

Getter & Setter

你可以使用xxx.class等价于xxx.getClass()

  • 注意:Vars.class获取到的是Class类,如果想要获取对应类对象 可以使用Vars.__javaObject__

一些小坑

一个函数接受所有方法,例如:

  • extend(BulletType, {
  • hit(b, x, y) { print(b); }
  • }

BulletType#hit(Bullet b)BulletType#hit(Bullet b, float x, float y)都会调用上面的hit方法,

所以x,y可能为undefined