Displayable link

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

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

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

  • 設定変数に代入する。

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

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

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

  • : を含む文字列。めったに使用されませんが、 displayable prefixes 節でみられます。

  • ドット . を含む文字列。このような文字列は 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 ステートメントなど)の開始時に処理される データの置換 があります。結果の文字列は上記のルールに基いて処理されます。

"[prefix_]" を含む文字列は、現在の displayable に対応する各スタイル接頭辞に置き換えられます。

画像 link

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

Image(filename, *, optimize_bounds=True, **properties) link

ファイルから画像をロードします。 filename はファイル名の文字列です。

filename は適切な拡張子の JPEG または PNG ファイルでなくてはなりません。

optimize_bounds が True なら、画像のうち矩形領域内部の不透明なピクセルの部分のみが GPU メモリーにロードされます(これを False にするのは画像を shader への入力に使用するときのみです)。

# 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 分の1秒ほどになるので、ロード処理の所要時間は許容できるフレームレートに収まらず、ユーザーをいらいらさせます。

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

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

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

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

イメージライク displayable link

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

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

AlphaMask(child, mask, **properties) link

この displayable は child からカラーを取り出し、そのアルファチャンネルは childmask のアルファチャンネルを乗算したものになります。結果として child と同じ色で、 childmask どちらかで透明な部分が透明になり、 childmask 両方で不透明な部分が不透明になります。

childmask 引数は任意の displayable です。 AlphaMask のサイズは child のサイズになります。

mask のred チャンネルを使用する im.AlphaMask() とは別の引数をとることに注意してください。

Borders(left, top, right, bottom, pad_left=0, pad_top=0, pad_right=0, pad_bottom=0) link

このオブジェクトは境界のサイズとタイリングの情報を Frame() に与えます。これはウィンドウやフレームの padding スタイルプロパティーに与えられるパッディング情報も渡せます。

left, top, right, bottom

これらはフレームに使用される挿入図のサイズを与え、各側面のパッディングに加えられます。これらは 0 または 正の整数です。

pad_left, pad_top, pad_right, pad_bottom

これらは各側面のパディングに加えられ、 正または負です ( 例えば、 left が 5, pad_left が -3 なら、最終的なパディングは 2 です )。

パッディング情報はフィールドとして渡します。

padding link

これは 4 要素のタプルで、各4つの側面のパディングを含みます。

Composite(size, *args, **properties) link

これは他の displayable を合成して size の新しい displayable を作成します。 size は (width, height) のタプルです。

残りの位置引数は Composite 内に画像を配置するために使用されます。残りの位置引数は各グループの第一要素が (x, y) のタプルで、第二要素がその位置に合成される displayable の 2 つからなります。

Displayable は後ろから前へ合成されます。

image eileen composite = Composite(
    (300, 600),
    (0, 0), "body.png",
    (0, 0), "clothes.png",
    (50, 50), "expression.png")
Crop(rect, child, **properties) link

childrect に刈りこんで displayable を作成します。ここで rect は (x, y, width, height) タプルです。

image eileen cropped = Crop((0, 0, 300, 300), "eileen happy")
DynamicImage(name) link

dynamic image はテキスト置換により新しい displayable の文字列を生成するテキストを持つ displayable です。そのような置換は各インタラクションの開始時に処理されます。

Flatten(child, **properties) link

これは複数のテクスチャで構成された child を一つのテクスチャに貼り付けます。

alpha transform プロパティーのような特定の処理は displayable を構成するすべてのテクスチャに適用され、スクリーン上でテクスチャが重なり合っていると誤った結果になる可能性があります。貼り付けは複数のテクスチャから一つのテクスチャを作成し、この問題を防ぎます。

貼り付けは比較的重い処理なので絶対的に必要なときのみ使用するべきです。

Frame(image, left=0, top=0, right=None, bottom=None, tile=False, **properties) link

境界の幅と高さを保ちながら、利用できる領域を満たすようにリサイズする displayable です。ウィンドウやボタンの背景によく使われます。

_images/frame_example.png

フレームを使用し、画像サイズを2倍にリサイズ。

image

Frame によって大きさを変えられる画像マニピュレータです。

left

左側面の境界サイズです。これは Borders() オブジェクトでもよく、その場合オブジェクトは他の引数の位置にも使用されます。

top

上側の境界のサイズです。

right

右側の境界のサイズです。None なら、デフォルトでは left です。

bottom

下側の境界のサイズです。None なら、デフォルトでは top です。

tile

True なら、拡大でなくタイル張りによって画像領域をリサイズします。文字列 "integer" に設定されると、各方向に最も近い整数個のタイルが使用されます。必要な領域に一致するようすべてのタイルが拡大縮小されます。

# Resize the background of the text window if it's too small.
init python:
    style.window.background = Frame("frame.png", 10, 10)
Null(width=0, height=0, **properties) link

画面上に空のボックスを作成する displayable です。このボックスの大きさは widthheight で制御できます。これは、displayable が子を要求しているが適切な子が無いときや、ボックス内の空間を埋めるのに使えます。

image logo spaced = HBox("logo.png", Null(width=100), "logo.png")
Solid(color, **properties) link

割り当てられた領域を color で満たす displayable です。

image white = Solid("#fff")
Tile(child, style=u'tile', **properties) link

この displayable に割り当てられた領域まで child をタイル張りします。

image bg tile = Tile("bg.png")

Text Displayables link

Text Displayables 参照。

動的 displayable link

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

これらの動的 displayable は常にその現在の状態を表示します。このため、動的 displayable はトランジションに参加せず(ないしは正しく参加しません)、トランジション前後の両方の状態で同様に表示されます。

動的 displayable は画像定義が(キャラクター定義のように)画面表示前にされ、めったに変更しないものやキャラクターの表情のように頻繁に変更するものでないものに使用することを意図しています。

ConditionSwitch(*args, predict_all=None, **properties) link

これは、Python 条件式に基づいて表示するものを変える displayable です。位置引数は、これらを二つ一組にまとめて与えなければなりません:

  • Python 式を含む文字列

  • 条件式が True の時に使う displayable

最初に True になった条件式の displayable が表示され、少なくとも一つの条件式が True にならなければなりません。

ここで使用する条件は外部から可視である副作用をもつべきではありません。

predict_all

True なら、起こりうるすべての displayable がその表示時に予測されます。 False なら、現在の条件でのみ予測されます。None なら config.conditionswitch_predict_all が使用されます。

image jill = ConditionSwitch(
    "jill_beers > 4", "jill_drunk.png",
    "True", "jill_sober.png")
DynamicDisplayable(function, *args, **kwargs) link

インタラクションが起こったとき、Python 関数に基づいて子を変える displayable です。

function

これらの引数を渡して呼び出される関数です :

  • displayable が表示される時間。

  • 同じタグの displayable が表示される時間。

  • DynamicDisplayable に渡された任意の位置引数とキーワード引数。

これは (d, redraw) タプルを返すべきです。ここで :

  • d は表示する displayable です。

  • redraw は、関数を再び呼び出すまでに待つ時間です。None にすると、次のインタラクションが始まるまでもうこの関数は呼び出されません。

function は、インタラクションが始まるごとに呼び出されます

特別に、 function は評価が displayable である Python 文字列にもできます。その場合、関数はインタラクションごとに一度実行されます。

# Shows a countdown from 5 to 0, updating it every tenth of
# a second until the time expires.
init python:

    def show_countdown(st, at):
        if st > 5.0:
            return Text("0.0"), None
        else:
            d = Text("{:.1f}".format(5.0 - st))
            return d, 0.1

image countdown = DynamicDisplayable(show_countdown)
ShowingSwitch(*args, predict_all=None, **properties) link

これは、画面に表示されている画像に基づいて表示する画像を変える displayable です。位置引数は、これらを二つ一組にまとめて与えなければなりません :

  • 画像名の文字列。または、デフォルトを表す None

  • 条件式が True の時に使う displayable

デフォルトの画像は指定されなければなりません。

predict_all

True なら、起こりうるすべての displayable がその表示時に予測されます。 False なら、現在の条件でのみ予測されます。None なら config.conditionswitch_predict_all が使用されます。

ShowingSwitch の使い方の一つは、キャラクターの現在の表情に応じて画像を変えることです。例

image emotion_indicator = ShowingSwitch(
   "eileen concerned", "emotion_indicator concerned",
   "eileen vhappy", "emotion_indicator vhappy",
   None, "emotion_indicator happy")

displayable への transform の適用 link

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

At(d, *args) link

与えられた displayable dargs のそれぞれの transform を適用します。 transform は左から右へ順に適用され、最後になされる transform は最も右側の引数です。

transform birds_transform:
     xpos -200
     linear 10 xpos 800
     pause 20
     repeat

image birds = At("birds.png", birds_transform)

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

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

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

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

Fixed(*args, **properties) link

画面を満たすボックスです。このメンバは奥から手前に並べられ、この位置は位置プロパティーで制御されます。

HBox(*args, **properties) link

ボックスで、このメンバは左から右へ並べられます。

VBox(*args, **properties) link

ボックスで、このメンバは上から下へ並べられます。

# 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))

グリッドはその子を画面上のグリッドに表示します。これは 位置のスタイルプロパティーspacing スタイルプロパティーを受け取ります。

Grid(cols, rows, *args, **properties) link

グリッドに displayable を配置します。最初の 2 つの位置引数はグリッドの縦と横の列の数です。この後にはグリッドを満す columns * rows 個の displayable の位置引数が続かなければなりません。

効果 link

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

AlphaBlend(control, old, new, alpha=False) link

このトランジションは、ある displayable から別の displayable へのトランジションに control displayable ( ほとんどはATL transform を並べたものです )を使います。その transform が評価され、 transform が不透明な領域は new displayable が使われ、 transform が透明な領域は old displayable が使われます。

alpha

True であれば、画像は背後のものと合成されます。デフォルトの False であれば、画像は不透明で背後のものを上書きします。

画像マニピュレータ link

画像マニピュレータ は、画像または画像マニピュレータを取る displayable であり、それらを読み込み、または処理します。画像マニピュレータは画像または他の画像マニピュレータのみを入力として受け取れます。

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

以下に示すいくつかの例外を除いて、画像マニピュレータの使用はレガシーなものです。かつてドキュメントに記されていた多くの画像マニピュレータは本質的に問題があるため、すでに使用されていません。 im.Data を除いて多くの場合で Transform() displayable はそれらの問題を解決しつつ同様な機能をより一般的な方法で提供しますが、 gl2 を有効化する必要がある場合もあります。

画像マニピュレータのリストは 画像マニピュレータ を参照してください。

プレースホルダ link

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

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

label start:
     show sue angry
     "Sue" "How do you do? Now you gonna die!"
Placeholder(base=None, full=False, flip=None, **properties) link

この displayable を使用して プレースホルダキャラクターや背景を表示出来ます。

base

表示される画像の種類です。これは次の内のひとつであるべきです。 :

'bg'

背景プレースホルダを表示するために、現在は画面を灰色で埋め、スクリーン上部に画像の名前を表示します。

'boy'

肩に画像の名前をいれて男性プレースホルダを表示します。

'girl'

肩に画像の名前をいれて女性プレースホルダを表示します。

None

画像名が "bg" や "cg", "event", で始まるか、 'bg' を使用していたら、自動的に使用する画像タイプを判断します。

それ以外では girl プレースホルダを使用します。

full

True なら全身画像が使用されます。そうでなければ 3/4 画像が使用されます。

flip

True なら画像は水平に反転します。

Displayable Prefixes link

Displayable 接頭辞は開発者に独自の displayable の定義を可能にし、 Ren'Py で displayable が使用可能などこででも使用できます。接頭辞のある displayable はコロンを含む文字列です。接頭辞はコロンの左側で、その右側にあるものが引数となります。 config.displayable_prefix 変数は接頭辞をキーに関数を値とします。その関数は引数をとり、 displayable または None を返します。

例えば、オリジナルの二倍の大きさの画像を返す big 接頭辞を作成します。

init -10 python:
    def embiggen(s):
        return Transform(s, zoom=2)

    config.displayable_prefix["big"] = embiggen

init -10 によって接頭辞は使用するどの画像よりも前に定義され、その接頭辞を使用して画像の定義ができます

image eileen big = "big:eileen happy"

また、 displayable が要求されるどこにでも使用できます。