画像の中の一部分だけを表示したい
ゲーム制作の最中につまずいたのでメモ。
これはツクールMVの標準機能のピクチャとかの話じゃなくて、スクリプトを使って画像(Sprite)を表示させている場合の話ですよ。
例えばゲーム画面にHPゲージを表示したい時、ゲーム内の変数の値を使ってゲージを増減させたいですよね。そうすると、変数の値に応じてHPゲージ画像の表示領域を変化させなきゃならないわけです。
HPが満タンの時はゲージ画像をそのままフルで表示して、HPが半分になったらゲージ画像の幅も半分だけ表示したいのです。
これ、ツクールXPの時(RGSS)は確かSpriteクラスに「rect」とかいうプロパティがあって、そこをいじれば良かったように記憶しているのですが……MVにはそれが見当たらない。
ネットを調べてもドンピシャな情報が見つからない……困ったぞ!
という訳でかなり遠回りして調べていたんですが、灯台もと暗し。普通にSpriteクラスの中に表示領域を変えるメソッドがありました。
setFrameメソッドを使えばOK
見つけました。setFrameメソッド! rectじゃない!
Rectangleとかめちゃめちゃ調べて意味分からなかったので半ば諦めモードでしたが普通に公式のリファレンスに載ってた!!くそ~……。
ちなみに軽く説明すると、setFrameメソッドを使うとSpriteに表示している画像の一部の領域(四角形)だけを指定して表示する事ができます。
使い方は、仮にsprite変数に画像が入っているとすれば
sprite.setFrame(x, y , width, height);
みたいな感じ。
x,yは画像を表示したい領域の左上の座標で、width, heightは表示したい領域の幅と高さです。
例えばHPゲージなら
一般的な横長のHPゲージなら、
- ゲーム変数1番に最大HPの値
- ゲーム変数2番に現在HPの値
を設定していると仮定すれば、
sprite.setFrame(0, 0, ゲージ画像の幅 * $gameVariables.value(2) / $gameVariables.value(1), ゲージ画像の高さ);
という風なコードを毎フレーム実行しておけばいいんじゃないでしょうか。
こうすれば現在HPの割合に応じて、HPゲージの画像も更新されますね。