Displayable link

displayable は、ユーザーに表示されるオブジェクトです。Ren'Py の displayable には多くの用途があります。

  • image ステートメントを使って画像に代入する。

  • screen 言語の add ステートメントを使って screen に追加する。

  • 設定変数に代入する。

  • スタイルプロパティーに代入する。

displayable を受け取る Ren'Py の関数や変数には、以下の 5 つを与えられます :

  • 後述の関数のいずれかを呼び出して作成された Displayable 型のオブジェクト。

  • ドット (.) を含む文字列。このような文字列は Image() によってファイル名として解釈されます。

  • カラー カラーは "#rgb", "#rgba", "#rrggbb", または "#rrggbbaa" の形式の 16 進数の文字列または、 Color クラス、 (r, g, b, a) のそれぞれが 0 から 255 までの整数のタプルで指定されます。カラーは Solid() に渡されます。

  • 画像名 他の文字列は image ステートメントで定義された画像への参照として解釈されます。

  • リスト リストが与えられると、各要素は以下で述べるように拡張され、ファイル名や画像名にマッチするか確認されます。マッチすれば拡張は止まり、マッチしたものが上述のように処理されます。

文字列には "eileen [mood]" や "eileen_[outfit]_[mood].png" のように1 つ以上の角括弧があるかもしれません。そのような文字列が指定されると、dynamic image が作成されます。dynamic image には各インタラクション(say または menu ステートメントなど)の開始時に処理される データの補完 があります。結果の文字列は上記のルールに基いて処理されます。

画像 link

最もよく使われる displayable は画像です。画像はディスクからファイルを読み込んで表示します。画像はよく使われるので、displayable を待つコンテキストでファイル名の文字列が使われると、画像が自動的に作成されます。画像を直接使う必要があるのは、スタイルプロパティーから画像を作成したいときだけです。

# These two lines are equivalent.
image logo = "logo.png"
image logo = Image("logo.png")

# Using Image allows us to specify a default position as part of
# an image.
image logo right = Image("logo.png", xalign=1.0)

三つの画像ファイルフォーマットの使用を推奨します。 :

  • Webp
  • Png
  • Jpg

ノンアニメーション Gif, Bmp ファイルもサポートされますが、近代的なゲームでは使用しないべきです。

画像をディスク上のファイルからロードし、それを画面に描画できるようにデコードするのには時間がかかります。10 から 100 分の数秒ほどになるので、ロード処理の所要時間は許容できるフレームレートに収まらず、ユーザーをいらいらさせます。

画像のサイズは一定で、また画像は入力やゲームの状態、利用できる空間の大きさに応じては変わりません。ですから必要になる前に画像を読み込み、画像キャッシュと呼ばれるメモリ空間に配置できます。画像をキャッシュにデコードしておけば、画面に素早く描画できます。

Ren'Py は、将来使われる画像を予想し、実際に使われる前にロードしようとします。キャッシュの空間を他の画像に使う必要ができたとき、Ren'Py は使われなくなった画像を消去します。

デフォルトでは、Ren'Py は前もって最大画像データ 8 画面分だけキャッシュします。(画面が 800x600 なら、その画面は 800x600 の画像 1 枚、400x600 の画像 2 枚、などのデータに相当します。) これは config.image_cache_size 設定変数で変更できます。

経験上、画像キャッシュはピクセルあたりメインメモリ 4 バイトとビデオメモリ 4 バイトを消費します。ただし、正確な量は実装によって、または無視できないオーバーヘッドがあるかどうかによって異なります。

イメージライク displayable link

これらは長方形の領域で、入力に反応しないので、displayable をイメージライクであると呼びます。これらは普通の画像と異なり、領域を満たすように大きさを変えたり (Frame, LiveTile, および Solid)、ユーザーが大きさを指定できたり (LiveComposite, LiveCrop, Null) します。画像ではこのような操作はできません。

イメージライク displayable は 位置のスタイルプロパティー を取ります。

Text Displayables link

Text Displayables 参照。

動的 displayable link

動的 displayable は、ゲームの状態に基づいて子 displayable を表示します。このレイアウトは自身が返す子 displayable のプロパティーで制御されるので、これらはプロパティーを取りません。

displayable への変換の適用 link

At 関数は、1 つの displayable と 1 つ以上の 変換 とから、displayable を作成します。

レイアウトボックスとグリッド link

レイアウトボックスは、その子 displayable を画面にレイアウトする displayable です。子 displayable を、水平や垂直に並べたり、一定の配置法でレイアウトしたりできます。

ボックス displayable は、任意の数の位置引数とキーワードを取ります。位置引数はボックスに子として加えられる displayable となります。キーワード引数はボックスに適用されるスタイルプロパティーです。

ボックスは 位置のスタイルプロパティーボックススタイルのプロパティー を取ります。

# Display two logos, to the left and right of each other.
image logo hbox = HBox("logo.png", "logo.png")

# Display two logos, one on top of the other.
image logo vbox = VBox("logo.png", "logo.png")

# Display two logos. Since both default to the upper-left
# corner of the screen, we need to use Image to place
# those logos on the screen.
image logo fixed = Fixed(
    Image("logo.png", xalign=0.0, yalign=0.0),
    Image("logo.png", xalign=1.0, yalign=1.0))

グリッドはその子を画面上のグリッドに表示します。これは ref:position-style-propertiesspacing スタイルプロパティーを受け取ります。

効果 link

これらの displayable は、特定の視覚効果を作成するのに使われます。

画像マニピュレータ link

画像マニピュレータは、画像や画像マニピュレータを取る displayable で、それらに演算を行い、演算結果を画像キャッシュに保存します。画像マニピュレータは画像と同じように予測できるので、表示時間のオーバーヘッドなしに高価な演算を実行できます。

画像マニピュレータは、キャッシュに画像データを保存するだけです。よって、結果は一定の大きさになり、事前に知ることができ、ゲームの状態や入力によっては変化しません。一般に、画像マニピュレータは画像や別の画像マニピュレータしか取れません。

画像マニピュレータは displayable が使える所ならどこででも使えますが、その逆はできません。Image() は画像マニピュレータの一種なので、Image は画像マニピュレータが要求されたときはいつでも使えます。

多くの画像マニピュレータは、他の displayable と同じ機能を提供します。これらのほとんどは、他の画像マニピュレータへの入力として渡せるので、ゲームメーカーはキャッシュメモリの使用かレンダリング時になされる動作を選べます。また、歴史的な事故によって存在するものもあります。これらの画像マニピュレータのほとんどと等価なものが後で作られています。

im.MatrixColor link

im.MatrixColor 画像マニピュレータは、画像の色の変換を行列で指定する画像マニピュレータです。使われる行列は im.matrix オブジェクトです。im.matrix オブジェクトは 5x5 行列をオブジェクトにエンコードし、行列操作をサポートし、一連の関数によって返されます。im.matrix オブジェクトを掛け合わせて、両方の演算を行う一つのオブジェクトを得られます。例えば、このコードは

image city blue = im.MatrixColor(
    "city.jpg",
    im.matrix.desaturate() * im.matrix.tint(0.9, 0.9, 1.0))

まず画像の彩度をなくし、それから青く染めます。中間の画像が必要ないときは、im.MatrixColors を二度使うよりも行列を掛け合わせましょう。そのほうが時間上も画像キャッシュ領域上も遥かに効率的です。

プレースホルダ link

プレースホルダ displayable を使用して適切な背景やキャラクターを表示します。開発者モードで未定義の画像が使用されるとプレースホルダが自動的に使用されます。プレースホルダ displayable はデフォルトが適切でないときに、手動で使用することも出来ます。

# By default, the girl placeholer will be used.
image sue = Placeholder("boy")

label start:
     show sue angry
     "Sue" "How do you do? Now you gonna die!"