CoffeeScriptでRPGツクールMV用プラグインを書こう
※この記事はNewData/js/pluginsのプラグインをある程度読めるくらいって人向けです。多分。
英語力皆無ですが、RPGツクールMV(Steam版)買いました。
今作からはRGSSがなくなり、JavaScriptのコードをプラグインとして扱う方式になりました。
では、早速ですが、コードを見てみましょう。
(function() { // セーブ時になんかする var _Scene_Save_onSaveSuccess = Scene_Save.prototype.onSaveSuccess; Scene_Save.prototype.onSaveSuccess = function() { _Scene_Save_onSaveSuccess.call(this); /* なんか処理 */ } })();
めんどくさ……
prototypeとかprototypeとか、打ちたくないです。面倒臭いです。
上記のものでも面倒臭いというのに、
// なんか選択するウィンドウを作成 function Window_Hoge() { this.initialize.apply(this, arguments); } // Window_Selectableを継承する Window_Hoge.prototype = Object.create(Window_Selectable.prototype); Window_Hoge.constructor = Window_Hoge; Window_Hoge.prototype.initialize = function(x, y, width, height) { Window_Selectable.prototype.initalize.call(this, x, y, width, height); } /* 以後なんか処理 */
継承なんかが入ってくるともう見るのも嫌になります。(※個人の感想です)
ついでにfunctionも面倒臭い。
そんな怠惰な私は、勉強も兼ねてCoffeeScriptを使ってみることにしました。(CoffeeScriptは、コンパイルするとJavaScriptのコードを吐き出すプログラミング言語の一つです)
以下が上記2つとほぼ同等のコードとなります。
# セーブ時になんかする _Scene_Save_onSaveSuccess = Scene_Save::onSaveSuccess Scene_Save::onSaveSuccess = -> _Scene_Save_onSaveSuccess.call @ ### なんか処理 ###
# なんか選択するウィンドウを作成 class Window_Hoge extends Window_Selectable constructor: -> @initialize.apply @, arguments initialize: (x, y, width, height) -> super x, y, width, height ### 以後なんか処理 ###
素敵。
CoffeeScriptはRubyの影響を受けているので、RGSSでRubyに慣れた人には結構取っ付き易いんじゃないでしょうか。
「楽そうだなー」と思った人は、早速CoffeeScriptを導入しちゃいましょう!
導入
ここからは導入編。と言っても、やることは至極単純です。
- Node.jsより、Node.jsの最新安定版をダウンロード、インストールする。
- コマンドプロンプトを開き、
npm install -g coffee-script
と入力し、インストールが終わるのを待つ。
- インストールが終わったら、念のため
coffee -v
と入力し、
CoffeeScript version 1.10.0
などと表示されることを確認する。
以上で導入編終わりです。お疲れ様でした。
後は、コードを書いて
coffee -c ファイル名.coffee
と入力すればJavaScriptファイルにコンパイルされるので、それを「プロジェクト名/js/plugins」ディレクトリにぶち込むだけです!
最後に
私もまだまだ勉強中の身ですし、ロクに解説もしていませんが、この記事が怠惰な皆様の手助けになれば幸いです。
最後まで読んでいただき、ありがとうございました!
CoffeeScriptで楽しいプラグイン開発ライフをエンジョイしてくださいね!
ついでに、拙作のプラグインを置いておきます。
セーブ時とロード時に、指定のコモンイベントを呼び出すだけのプラグインです。
http://ideone.com/OJkskv
楽をしたいが為に自分自身を継承したりしてますが、あまりやらない方がいい書き方だと思います。
使用する場合、stdoutの内容をコピーして「Save_Load_CallCommonEvent.js」というファイルを作成し、そこにペーストするだけでOKです。
おまけのちょっとした説明
- 文末のセミコロン
- 要りません。
- 変数宣言時のvar
- 要りません。
- 括弧の省略
- 引数が1つ以上ある関数を呼び出す時や、引数のない関数を定義する時など、様々な場面で括弧を省略できます。
- #
- 1行コメントです。
- コンパイル時に消滅します。
- @
- 基本的にthisを表します。
-
@initialize.apply @, arguments
↓
this.initialize.apply(this, arguments);
- ::
-
prototypeを表します。
Window_Hoge:: = Object.create Window_Selectable:: # Window_Hoge.prototype = Object.create(Window_Selectable.prototype);
みたいにも書けます。
気持ち悪いですね。
- プロック{...}がない
- インデントがそのままブロックとなります。
- オフサイドルールと呼ばれています。(個人的にはあまり好きではない)
-
if foo == 1 if bar == 1 # foo,barが1の時の処理 else # fooが1、barが1じゃない時の処理 else # fooが1じゃない時の処理
- 関数呼び出し
- 引数が1つ以上ある場合、括弧を省略できます。
- 引数がない場合は括弧を省略できません。
-
foo 42 bar()
- ->
- 関数定義です。
- 関数呼び出しとは逆に、引数がない場合は括弧を省略できます。
-
foo = -> alert "foo" bar = (hoge) -> alert hoge
↓
var bar, foo; foo = function() { return alert("foo"); }; bar = function(hoge) { return alert(hoge); };
- class
- クラスです。
- クラスが分からない場合、オブジェクト指向言語について調べてください。
- extends
- クラスの継承です。
- 継承が分からない場合、オブジェクト指向言語について調べてください。
-
class Hoge constructor: -> @initialize.apply @, arguments
↓
var Hoge; Hoge = (function() { function Hoge() { this.initialize.apply(this, arguments); } return Hoge; })();
- super
- 親クラスのメソッドを呼び出せます。