Dear!くろうどぃあ!

このブログでは、私、くろうどの趣味に関する事を記述します。
当面は、「RPGツクールMV」をメインにします。

ツクるためのプログラミング概論【4】オブジェクト指向

2016-05-03 20:17:10 | RPGツクールMV
さてみなさん。

今回は、ツクるのに役立ちそうな、プログラミングの基礎知識を語る会の第4回です。


■目次(予定)
【1】コンピュータの構成
【2】プログラムの構造
【3】変数と関数
【4】オブジェクト指向 (←今回)
【5】ブラウザの仕組み


■本編
【4】オブジェクト指向

今回解説するのは、RPGツクールMVの中では、出てこないモノです。

ですが、Javaスクリプトは、オブジェクト指向のプログラミング言語……っていう事なので、プラグインを作る際には、その恩恵を受けている……はずです。

プラグインを作ろうと思った人が、人真似で作って、動いた、ヤッター!……ってなっているけど、なんで動くのか分からない……みたいな状況の人向け……の記事になります。


さて、「オブジェクト指向」って何?……っていう話を少しします。

「関数」は処理を中心にプログラミングします。
「オブジェクト指向」では、「モノ」を中心にプログラミングする……という説明がされます。

例えば、よくある説明だと、「自動車」っていう「モノ」があります。

「自動車」には、「エンジン」や「ブレーキ」や「燃料」や「座席」や「ドア」のような「変数」があります。
さらに、「走る」「止まる」「人が乗る」「人が降りる」のような「処理」があります。

この「自動車」には、「トラック」「軽自動車」「タクシー」のような種類がありますが、「自動車」という点では、前述した「変数」や「処理」は、共通しています。

というわけで、「自動車」っていう共通のデータを「親」として、さらに細かい種類を「子」のデータとして作る事が出来ます。
「親」には無いデータを「子」に追加したり、データを上書きしたり出来ます。

例えば、「トラック」は「燃料」の種類が「ディーゼル」であったりしますし、「軽自動車」では「燃料」の量が少ない値になってたりします。

他にも、「タクシー」では「料金」っていうデータを追加するといった事が出来ます。



という事を踏まえて、RPGツクールMVのJavaスクリプト(プラグイン)を見てみましょう。

------------------------------
(function() {

  var parameters = PluginManager.parameters('Krd_FloorDamage');

  var floorDamage = Number(parameters['FloorDamage']);

  Game_Actor.prototype.basicFloorDamage = function() {
    if (isNaN(floorDamage)) {
      return 10;
    }
    return floorDamage;
  };

})();
------------------------------

↑これは、私が作成した、床ダメージの値を変更するプラグインです。

●最初の「function()」
これは、プラグインを作る時のお約束です。
「{  }」が、他にも出てきますが、範囲を指定する記述です。

●var
変数を宣言しています。
どちらも、このプラグインの中だけで使える変数です。

●Game_Actor
これが、「モノ」です。
オブジェクト指向では、「クラス」って呼ばれます。

●basicFloorDamage
これは、「処理(関数)」です。
オブジェクト指向では、「メソッド」って呼ばれます。

●Game_Actor.prototype.basicFloorDamage
同じ記述が、「rpg_objects.js」にもあります。
そこには、以下のように書かれています。

------------------------------
Game_Actor.prototype.basicFloorDamage = function() {
  return 10;
};
------------------------------

というわけで、このプラグインは、「rpg_objects.js」のこの部分を上書きするというプラグインです。

※「10」を「50」とかに変えるだけでも良かったのですが、RPGツクールMVのプラグイン画面から変更出来るようにしているために、「parameters」っていうのを使っています。

RPGツクールMVの本体のJavaスクリプトに対して、値を変更するだけのプラグインは、こんな感じで、コピー&ペーストして、値を変えれば、プラグインの完成です。


※ちなみに、上の例では、同じものを上書きしてますが、「親子関係」にある「クラス」の場合、「クラス」の部分(上の例では「Game_Actor」の部分)を「子」に変える事で、「親」のデータを変えずに、「子」だけを変える事が出来ます。

(「子」に記述が無い場合、「親」と同じデータを持っています)
(「rpg_windows.js」は「親子関係」が分かりやすいので、興味のある方は見てください)


今回のポイントとしては……、

●「親子関係」にあるモノは、同じデータを持っている。
●「子」は「親」のデータを上書き出来る。

……っていうのが、ツクラー的には、ポイントです。


それでは~。

ツクるためのプログラミング概論【3】変数と関数

2016-05-03 18:51:38 | RPGツクールMV
さてみなさん。

今回は、ツクるのに役立ちそうな、プログラミングの基礎知識を語る会の第3回です。


■目次(予定)
【1】コンピュータの構成
【2】プログラムの構造
【3】変数と関数     (←今回)
【4】オブジェクト指向
【5】ブラウザの仕組み


■本編
【3】変数と関数

今回解説するのは、RPGツクールMVでいうと、「変数(へんすう)」ってヤツです。
同じ名前ですね。

もうひとつの「関数(かんすう)」は、RPGツクールMVでいうと、一応、「コモンイベント」のようなモノです。


▼変数

「変数」は、簡単に言うと、データを入れる入れ物です。

RPGツクールMVでは、基本的に数値を入れる入れ物です。

一般的なプログラミング言語では、数値だったり、文字だったり、データの集合体であったり、色んなモノを入れる事が出来ます。

Javaスクリプトでは、「var xxx」って書かれているのが、変数を新しく作る宣言です。
この「xxx」は、変数の名前です。
(変数には名前を付けて使います)

「変数」は、データの入れ物ですが、「変数」を使って計算する事も出来ます。

変数xと、変数yを作って、「y=x+3」とか出来ます。
この場合、「y」に「x+3」の結果が入ります。

中身が文字であれば、「y=x+’こんにちは’+’世界’」とかいう事も出来ます。
この場合、「x」の中身と、「こんにちは世界」っていう文字がくっつきます。

さらに、同じ変数に入れ直す事も出来ます。
「x=x+1」って書くと、一見するとループしているようですが、「x」が1増えます。


というわけで、「変数」は、データを入れる入れ物で、計算に使える……というモノです。


※もし、Javaスクリプトを見た事があるなら、「i++」という書き方を見た事があるかもしれません。
これは、変数「i」の値を1増やす……っていう事を表しています。
主に、ループの中で、ループ回数をカウントするために使用します。


※ちなみに、「=」は、同じである事を表す記号ではなく、右の値を左に入れる「代入」という事を表します。

※同じかどうかを判断する場合は、「==」と書きます。
(「==」は、if文で使用します)


▼関数

「関数」は、簡単に言うと、処理をまとめたモノです。

RPGツクールMVには、「関数」という名前のモノは無いですが、「コモンイベント」のようなモノをイメージして貰えれば、とりあえずはOKです。

……処理をまとめたモノという点では、とりあえずはOKなのですが、「関数」には、「引数(ひきすう)」と「戻り値(もどりち)」というモノがあります。

どういう事かと言うと、「関数」にデータを渡す事が出来ます。
それが、「引数」です。

「関数」を処理した結果、データが戻ってきます。
それが、「戻り値」です。

さて、「引数」もデータなので、変数を入れる事が出来ます。
また、「戻り値」もデータなので、計算式に、関数を含める事も出来ます。


Javaスクリプトでは、「関数名=function()」または「関数名=function(xxx)」って書いてあるモノが、沢山あると思います。
それが、関数です。
関数にも名前があります。

カッコの中に何かが書かれている場合、上の「xxx」のようなモノが、「引数」です。

関数内で、「return yyy」と書かれている「yyy」が、「戻り値」です。


……というわけで、「関数」を駆使してプログラミングをするのが、プログラマの腕の見せ所だったりします。


それでは~。