Rmake Wikiは、Rmakeに関する情報共有をするためのWikiです。


スクリプト/コツ/自由な位置における画像や文字列の使い方

最終投稿者:rurun9 更新:2010年08月03日 19:36:46

文字列を自由な位置に表示


文章を画面に表示する場合に、speak() を使うとメッセージウインドウが出てその中に文章が出せます。
メッセージウインドウの位置や大きさを変える事ももちろん可能ですが、
コレとは別に、メッセージウインドウを使わずに、
文字列を自由な位置に配置するには以下のようなコードを書きます。

setVariable("テキスト1", 
  createText(512 - 160, 10, 160, 22))

setText(getVariable("テキスト1"), 
  "夢見る少女じゃいられない。")

speak("画面にテキストを表示してみます。")

deleteText(getVariable("テキスト1"))


これで画面に"夢見る少女じゃいられない。"という文字列が現れ、
メッセージウィンドウに"画面にテキストを表示してみます。"と
表示されます。

このプログラムの動作を解説していきたいと思います。

setVariable("テキスト1", 
  createText(512 - 160, 10, 160, 22))

まず「テキストを表示する場所」を作り、その番号を"テキスト1"という変数に入れています。
画面の左上が原点(0,0)で、RPGの場合画面の大きさは 横512×縦384 です。
ノベルゲームの画面は少し広くて 横800×縦600 です。
座標の縦方向は下にいくと数値が大きくなる点には注意して下さい。

上の例では「テキスト1」と名付けた場所を、
x座標(512 - 160)、 y座標10、の位置から
幅160、高さ22 の範囲に設定しています。
この段階では名前と範囲を決めただけなので何も見えません。

直接x座標を 352 ではなく敢えて 512 - 160 と計算式を書いているのは、
RPGの画面が横幅512なので、おおよその位置を数値を見て想像できるかもしれないから、です。
数値は計算式でも変数であっても大丈夫、という事ですね。
ちなみに、改行して書いているのは見易くしているだけです。
スクリプトを書くにあたって、半角スペースと改行は好きなだけ挟んでも大丈夫です。
あとから見た時に何がどーなっているのかがわかるようにしておきましょう。

createText関数の返り値は「テキストを表示する場所」を表わす番号です。
createTextが実行された順に自動で1,2,3,…と割り振られます。
この時点では初めてなので、変数"テキスト1"の中身は1の筈です。
では何故わざわざ変数に表示場所番号を入れたのか、というと、
あとで表示する内容を変えたり、必要なくなったら削除する、といった操作を指定して行うのを簡単にしている為です。

自動で付けられた番号が一体何番なのか、を毎回確認する必要がなくなるので、createTextの番号は変数に入れる事をお勧めします。

setText(getVariable("テキスト1"), 
  "夢見る少女じゃいられない。")

setText関数は「テキストを表示する場所」番号を指定して、文字列を表示します。
「テキストを表示する場所」番号は変数"テキスト1"に保存してありますので
getVariable関数で取得しています。

speak("画面にテキストを表示してみます。")

speakでメッセージウインドウに文章を表示すると、ボタンが押されるまで画面が止まります。
これを利用してスクリプトの実行を止めることで、
テキスト表示が画面からすぐに消えないようにしています。

deleteText(getVariable("テキスト1"))

ここでは、「テキストを表示する場所」を削除しています。
番号は変数"テキスト1"に入れてあるので、呼んでいます。
仮に複数のテキストが画面に表示されていても、指定した番号のみを削除します。


画像を自由な位置に表示

サウンドノベル用の立ち絵を表示する方法として
showLeftImage( )
showCenterImage( )
showRightImage( )
がありますが、コレは位置が三択な上に、あくまでも人物の立ち絵用な為に、画像の下端が画面下にくっつくように表示されます。
なので画像を出す場合は、自由な位置に貼り付ける事がほとんどになると思います。

テキストの表示と似た手順なのですが、画像の方は「どんな内容を」の部分に画像ID番号を指定するだけなので、結果1行で済むから簡単です。
ただし、マップシーンのリソースエディタで、あらかじめ使用する画像を登録しておく必要があります。
画像を自由な位置に表示するにはたとえば以下のように書きます。

setVariable("画像1",
  showImagePosition((512 - 160) / 2, 64, 74))

speak("画面に画像を表示してみます。")

hideImagePosition(getVariable("画像1"))


これで画面に画像が表示され、
メッセージウィンドウに"画面に画像を表示してみます。"と
表示されます。

このプログラムの動作を解説していきたいと思います。

setVariable("画像1",
  showImagePosition((512 - 160) / 2, 64, 74))

showImagePositionを呼ぶことで、画面に画像ID 74の画像が、
x座標(512 - 160)/2、 y座標64 の位置に画像の左上を合わせて表示されます。

そして、showImagePositionの返り値には「画像を表示する場所」の番号が自動で割り振られます。
あとで指定して削除などを行うためにsetVariable関数で変数"画像1"に保存しています。
尚、テキスト表示場所番号と画像表示場所番号は異なり、それぞれ1から順に勝手につけられるものですので、やはり変数に格納することをお勧めします。

speak("画面に画像を表示してみます。")

表示がすぐに終わってしまわないようにメッセージを表示しています。

hideImagePosition(getVariable("画像1"))

hideImagePosition関数は
「画像を表示する場所」を削除します。


変数について

ここでは、基本変数を使いました。
以下のようにローカル変数を使うことでも実現可能ですが、
id = showImagePosition((512 - 160) / 2, 64, 74)

ローカル変数はゲームを保存したときに変数の内容が保存されません。
ゲームを保存したときに保存される基本変数を使うことを推奨します。
つまりロードしてゲーム途中からだと、ローカル変数で画像とかを表示していた場合は、テキストや画像が表示されていないままゲームが進行する可能性があるかもね、という話です。


詳しくは
スクリプト/変数
仕様/プレーデータのセーブロード
を参照してください。

このWikiの掲示板(すべて読む

コメント一覧

投稿者:dycoon(投稿日:2010/01/22 21:12)

ご指摘ありがとうございます。
ここの記述における座標系は左上が原点です。

> ついでに、画像の縮小拡大、センタリングがあると
> 素材を加工してアップロードしなくて楽になります。

これについては検討させていただきます。

よろしくお願いします。

投稿者:wanderingdj(投稿日:2010/01/22 04:18)

xとyの基準は画面左下なのか、左上なのか。
案外基本的な事だと思うのですが、記述が抜けてませんか?

┌─────┐
│     │
│このへん │
└─────┘
画像をあつかうソフトだと左下が基準の場合が多いのですが
明記して欲しいです。

ついでに、画像の縮小拡大、センタリングがあると
素材を加工してアップロードしなくて楽になります。
検討をお願いします。

User_icon
ゲスト