ピクチャをスクリプトで扱おう!その1【ツクールMV】

まずはイベントコマンドと同じ事から

ツクールMVのピクチャをスクリプトから操作できるようになると凄く楽しい!

ちょっと凝った事をするのにSpriteで画面に直接描画するより、標準機能のピクチャに入れちゃった方が後々の管理が楽なんですよね。不具合も起きにくいし、ちょっとした移動や色調変更はイベントコマンドで操作できるし。

というわけでピクチャ関連の記事を書こうと思うのですが、まずは基本編という事で、イベントコマンドでも可能だけどスクリプトを使うと面白い事ができるよ!というお話をしたいと思います(^-^)

ピクチャを表示してみよう

スクリプトを使ってピクチャを表示するには、以下のコードを書けばOKです(^-^)

$gameScreen.showPicture(pictureId, name, origin, x, y, scaleX, scaleY, opacity, blendMode);
  • pictureId:ピクチャ番号
  • name:表示したい画像のファイル名(’ ‘で囲んで入力)
  • origin:原点。0で左上、1で中央
  • x:ピクチャを表示する画面X座標
  • y:ピクチャを表示する画面Y座標
  • scaleX:幅の拡大率。等倍なら100、2倍なら200
  • scaleY:高さの拡大率。等倍なら100、2倍なら200
  • opacity:不透明度。0~255の間の値
  • blendMode:合成方法。0で通常、1で加算、2で乗算、3でスクリーン

これでイベントコマンド「ピクチャの表示」と同様の事ができます。もちろん、イベントコマンド「スクリプト」からこのコードを入れても同じです。

イベントコマンドで同じ事ができるのにわざわざスクリプトを使う代表的なメリットとしては、通常では使えない箇所にも変数を使える点ではないでしょうか。例えば、ピクチャ番号に変数を使ってみましょう。

$gameScreen.showPicture($gameVariables.value(1), 'TestPicture', 0, 0, 0, 100, 100, 255, 0);

こうすると、変数1番に入っている数値と同じ番号のピクチャを表示する事ができます。

え?ピクチャ番号を変数で指定する意味があるのかって?いやいや、ゲームによっては意外と使えますよ(^-^)

例えば、話しかける度にゲーム画面にスミを吐く「イカ」のイベントがあったとしましょう(例えが無理矢理)

この時、スミの画像を話しかけられた回数だけ表示しないといけないわけですが、「ピクチャの表示」コマンドの場合だと設定できるピクチャ番号は一つだけなので、100枚表示しようと思ったら100回「ピクチャの表示」コマンドを設定しないといけません。しかも、何回話しかけられたのか判定するため膨大な量の条件分岐が必要です。

でもスクリプトが使えたら、話しかける度に変数で回数をカウント。その回数をピクチャ番号に指定してやればいいのです。たった2行のイベントコマンドで同じ事ができましたね!

あとは、条件分岐でピクチャの上限枚数を決めたり、別の変数に乱数を入れてピクチャをランダムな位置に表示したりと工夫次第です(^-^)

ピクチャを移動させてみよう

イベントコマンド「ピクチャの移動」と同様の事をするには以下のコード。

$gameScreen.movePicture(pictureId, origin, x, y, scaleX, scaleY, opacity, blendMode, duration);
  • pictureId:ピクチャ番号
  • origin:原点。0で左上、1で中央
  • x:移動先の画面X座標
  • y:移動先の画面Y座標
  • scaleX:移動後の幅の拡大率。等倍なら100、2倍なら200
  • scaleY:移動後の高さの拡大率。等倍なら100、2倍なら200
  • opacity:移動後の不透明度。0~255の間の値
  • blendMode:合成方法。0で通常、1で加算、2で乗算、3でスクリーン
  • duration:移動にかかる時間。単位はフレーム

こちらも変数を使う事で色々と面白い事ができるのでお試しあれ(^-^)

例えば、xとyに他のピクチャの座標を代入した変数を指定してやれば、他のピクチャと同じ場所にピクチャを移動させる事ができるようになります。他のピクチャの座標を変数に代入するには、

$gameVariables.setValue(変数番号, $gameScreen.picture(ピクチャ番号).x());
$gameVariables.setValue(変数番号, $gameScreen.picture(ピクチャ番号).y());

と、こんな感じでいいんじゃないでしょうか。ここで変数に入れた座標を移動先の座標に指定してみて下さい。

また、このmovePictureメソッドは少し改造するとピクチャ同士の親子関係(一つのピクチャを動かすと他のピクチャも同じ速度・比率で動く)を作ったりすることもできまして……ちょっと上級者向けなので解説はしませんが、ピクチャを動かす時はこれ!というのを覚えておくと後々役に立つかもしれません(^-^)

ピクチャを回転させてみよう

「ピクチャの回転」コマンドをスクリプトで行うには、こう!

$gameScreen.rotatePicture(pictureId, speed);
  • pictureId:ピクチャ番号
  • speed:回転速度

今までよりずっと簡単ですね。まぁ、もともとのイベントコマンドがこうなので簡単なのですけど。

でも、簡単すぎて使いづらい点が多々あるのですよね。

イベントコマンドだと回転速度に入力できる最低単位が「1」なのですが……速い!速すぎるよ!!

もっとゆっくり回ってほしいのに、一番遅くてこれって速すぎない!?

という不満を抱えつつも、スクリプトを使えばこれも解決できるのです。

$gameScreen.rotatePicture(ピクチャ番号, 0.5);

そう!小数点が使える!(これ超大事)

イベントコマンド「スクリプト」からこのコードを入力するだけでピクチャをゆっくり回す事ができるようになります。ぜひ、お試しあれ!(なぜか回転の紹介には力が入る)

ちなみに、以下のスクリプトを使えばピクチャが回転する時間を待たなくても、一瞬で指定の角度に回す事ができますよ~(^-^)

$gameScreen.picture(ピクチャ番号)._angle = 角度;

正直、これは標準のイベントコマンドで対応しておいて欲しかった……。

ピクチャの色調を変更してみよう

「ピクチャの色調変更」コマンドをスクリプトで行うにはこうです。

$gameScreen.tintPicture(pictureId, tone, duration);
  • pictureId:ピクチャ番号
  • tone:[赤, 緑, 青, グレー]で色調を指定
  • duration:色調変更にかかる時間。単位はフレーム

toneの部分が今までと違う書き方なので、サンプルを書いてみます。

$gameScreen.tintPicture(1, [ -100, -100, -100, 0 ], 60);

これはピクチャ番号1番のピクチャを、1秒かけて暗くするスクリプトになります。

toneの基準値は全て「0」です。0より小さい数字なら暗く、0より大きい数字なら明るくなります。もちろん、赤・緑・青・グレーの各要素を別々に変更する事で自由に色調を変える事ができますのでお試しあれ。

ちなみに、時間をかけず一瞬で色調を変更するには

$gameScreen.picture(ピクチャ番号)._tone = [-100,-100,-100, 0];

このようにしてやればOKです(^-^)

ピクチャを消去してみよう

これが一番簡単ですね。

$gameScreen.erasePicture(pictureId);
  • pictureId:ピクチャ番号

消去したいピクチャ番号を指定するだけです。

「ピクチャの表示」と同じように、ピクチャ番号に変数を指定してやれば「話しかける度に吐いたスミを掃除するイカ」イベントを作る事ができます(なぜイカにこだわる)

 

このように、ピクチャをスクリプトで操作するのは楽しい事です。想像の幅が広がります。

今回はイベントコマンドで出来る事をわざわざスクリプトで試してみましたが、イベントコマンドには出来ない事も、スクリプトなら可能です。それはまた次回、ご紹介しますね(^-^)

続き→ピクチャをスクリプトで扱おう!その2【ツクールMV】