画像の表示 link

ビジュアルノベルを定義する特徴は、その名が表すとおり、ビジュアルです。Ren'Py には、画像を制御する 4 つのステートメントがあります。また、画像が表示される順番を定義するモデルをもっています。これにより、ビジュアルノベルに適した方法で画像を表示できます。

画像に使える 4 つのステートメントは:

  • image - 新しい画像を定義します。

  • show - レイヤーに画像を表示します。

  • scene - レイヤーをクリアし、必要ならレイヤーに画像を表示します。

  • hide - レイヤーからイメージを取り除きます。

画像を急に変えるとユーザーはびっくりするので、Ren'Py は with ステートメントを用意しています。これにより、場面の変わり目に効果が適用されます。

概念 link

画像 link

画像は、show ステートメントを使って画面に表示されるものです。画像は名前と displayable でできています。画像がレイヤーに表示されるとき、その画像に対応する displayable がレイヤーに表示されます。

画像名 は、スペースで分けられた1つ以上の名前でできています。画像名を構成する最初の部分を 画像タグ と言います。名前のそれ以降の部分は、 画像属性 です。

例えば、 mary beach night happy という画像名があるとします。この画像タグは mary で、画像属性は beach, night, happy です。

displayable とは、スクリーンに表示できるものです。主に静止画像を表示するために使われます。これを指定するには、画像のファイル名を文字列として与えます。上述の例では、ファイル名として例えば mary_beach_night_happy.png を使います。しかし、画像は静止画像に限らず、 Ren'Py がサポートする displayable 全て を参照できます。ですから、画像を表示するのと同じステートメントが、アニメーション、全面色、その他の displayable にも使えます。

レイヤー link

レイヤーとは、画面に表示された displayable のリストです。Ren'Py は複数のレイヤーをサポートしていて、ユーザー定義のレイヤーも使えます。レイヤーの順序はゲーム内で固定されています ( config.layers 変数で制御されます)。また、レイヤー内の displayable の順序は、scene ステートメントや show ステートメントが呼び出された順序と、そのステートメントに与えられたプロパティーとで制御されます。

Ren'Py 内部では、以下のレイヤーが定義されています:

master

これは、scene ステートメント、show ステートメント、hide ステートメントで使われるデフォルトのレイヤーです。主に、背景やキャラクタースプライトに使われます。

transient

ui 関数で使われるデフォルトのレイヤーです。このレイヤーは、インタラクションが終わる度に消去されます。

screens

このレイヤーは、スクリーン機能によって使われます。

overlay

ui 関数が overlay 関数の内部から呼び出されたときに使われるデフォルトのレイヤーです。このレイヤーは、インタラクションが再開する度に消去されます。

その他のレイヤーも定義できます。 config.layers や、レイヤー関連のその他いろいろな設定変数をアップデートしてください。renpy.layer_at_list() を使うと、レイヤーに変換を適用できます。

画像の定義 link

画像定義には 2 つの方法があります。画像ディレクトリーに画像ファイルを置くか、 image ステートメントで画像を定義するかです。前者は単純で、ディレクトリー内に適切な名前のファイルを配置するだけですが、後者は画像定義時に詳細な制御が出来、画像ファイル以外も画像として扱えます。

image ステートメントで定義された画像は画像ディレクトリーで定義されたものより優先されます。

画像 ディレクトリー link

画像ディレクトリーは「 images 」と名付けられ、ゲームディレクトリーに配置されます。このディレクトリー以下に .jpg や .png 拡張子を持つファイルを配置すると、その拡張子が除外され、ファイル名の残りは強制的に小文字になります。その結果のファイル名が既に画像名に使用されていなけらば画像名として使用されます。

この処理は画像ディレクトリー下のすべてのディレクトリーで起こります。例えば以下のすべてのファイルは画像 eileen happy を定義します。

game/images/eileen happy.png
game/images/Eileen Happy.jpg
game/images/eileen/eileen happy.png

image ステートメント link

image ステートメントは、画像を定義するのに使われます。image ステートメントは、 image で始まり、画像名、等号 (=)、displayable を続けた論理行で出来ています。例

image eileen happy = "eileen_happy.png"
image black = "#000"
image bg tiled = LiveTile("tile.jpg")

image eileen happy question = VBox(
    "question.png",
    "eileen_happy.png",
    )

image ステートメントは、ゲームコードを実行する前の初期化時に実行しなければなりません。image ステートメントは init ブロックに含まれていないとき、優先度 500の init ブロックの中に含まれているかのように、初期化時に実行されます。

image ステートメントの ATL ブロック もご覧ください。

show ステートメント link

show ステートメントは、画像をレイヤーに表示するために使われます。show ステートメントは show で始まり、画像名、ゼロ個以上のプロパティーが続く論理行でできています。

show ステートメントに与えられたものが既存の画像の正確な名前なら、その画像が表示されます。そうでなければ、Ren'Py は以下のような画像を一つ探します:

  • show ステートメントで指定されたものと同じタグを持つ 画像

  • show ステートメントで与えられた全ての属性を持つ画像

  • 同じタグの画像がすでに表示されているなら、その画像と共通の属性を最も多く持つ画像

そのような画像が一つに決まらなければ、例外が発生します。

レイヤー上に同じタグの画像がすでに表示されているなら、それを新しい画像が置き換えます。そうでなければ、その画像がレイヤーの一番上に置かれます。(つまり、ユーザーに最も近いところです。) この順序は、zorder および behind プロパティーで変更できます。

show ステートメントは、インタラクションを起こしません。イメージを実際にユーザーに表示するためには、インタラクションを起こすステートメント(say, menu, pause, および with ステートメントなど) を実行しなければなりません。

show ステートメントは、以下のプロパティーを取ります:

as

as プロパティーは名前を取ります。画像が表示されるとき、画像タグの代わりにこの名前が使われます。これで、同じ画像をスクリーンの2箇所に表示できます。

at

このプロパティーはカンマで区切られた一つ以上の単純式を取ります。それぞれの式の評価結果は変換でなければなりません。この画像に、その変換が左から順に適用されます。

at 節が与えられなければ、Ren'Py は画像に適用されている変換を全て保持します。変換が存在しなければ、画像は default 変換を使って表示されます。

behind

カンマで区切られた一つ以上の名前を取ります。それぞれの名前は画像タグとして取られます。画像は、現在表示されている画像の中で、与えられたタグを持つもの全ての後に表示されます。

onlayer

名前を取ります。指名されたレイヤーに画像を表示します。

zorder

整数を取ります。この整数は、画像のレイヤー上における相対的な順序を指定します。この数字が大きいほど、ユーザーに近くなります。これは通常 Ren'Py コードでは使いませんが、他のエンジンからコードを移植するときに便利です。

以下の画像を定義したとします:

image mary night happy = "mary_night_happy.png"
image mary night sad = "mary_night_sad.png"
image moon = "moon.png"

show ステートメントの例です。

# Basic show
show mary night sad

# Since 'mary night happy' is showing, the following statement is
# equivalent to:
# show mary night happy
show mary happy

# Show an image on the right side of the screen.
show mary night happy at right

# Show the same image twice.
show mary night sad as mary2 at left

# Show an image behind another.
show moon behind mary, mary2

# Show an image on a user-defined layer.
show moon onlayer user_layer

show expression show ステートメントの変種として、画像名の代わりに予約語 expression を使い、その後に単純式を続けるものがあります。この式の評価は、displayable でなければなりません。その displayable がレイヤーに表示されます。この displayable を hide するためには、このステートメントでタグを与えておかなければなりません。

show expression "moon.png" as moon

show layer show layer ステートメントでは、変換やATL変換を次のような構文によってレイヤー全体 (例えば master) に適用できます:

show layer master at flip

または:

show layer master:
    xalign 0.5 yalign 0.5 rotate 180

変換の適用をやめるには、次のようにします:

show layer master

show から使用される変換はその開始状態についてなにも前提とすべきではありません。現在 show layer で使用される変換は前のレイヤーの変換からその状態を所得しませんが、これは将来変更される予定です。

scene ステートメント link

scene ステートメントはレイヤーから全ての displayable を削除し、その後、そのレイヤーに画像を表示します。このステートメントは、予約語 scene 、画像名、ゼロ個以上のプロパティーの順でできています。画像は、show ステートメントと同じように表示されます。また、scene ステートメントは show ステートメントと同じプロパティーを取ります。

scene ステートメントは、主に背景レイヤーに画像を表示するのに使います。例 :

scene bg beach

scene expression show ステートメントと同様、scene ステートメントも画像名の代わりに式を取れます。

レイヤーの消去 画像名が全く与えられないとき、scene ステートメントはレイヤーから全ての displayable を消去し、代わりの画像は表示しません。

hide ステートメント link

hide ステートメントは、レイヤーから画像を取り除きます。このステートメントは、予約語 hide、画像名、ゼロ個以上のプロパティーの順でできています。hide ステートメントは画像名から画像タグを取り、そのタグを持つ画像がレイヤーにあれば、その画像を隠します。

hide ステートメントが必要になることはあまりありません。あるスプライトがあるキャラクターを表しているなら、hide ステートメントが必要なのはそのキャラクターがシーンから退場する時だけです。キャラクターが表情を変えるときは、show ステートメントを使うのが望ましいです。show ステートメントは、同じタグの画像を自動的に置き換えてくれます。

hide ステートメントは、以下のプロパティーを取ります:

onlayer

名前を取ります。指名されたレイヤーから画像を隠します。

e "I'm out of here."

hide eileen

こうは書かずに:

hide eileen
show eileen happy

こう書いてください:

show eileen happy

with ステートメント link

with ステートメントは、シーンが変わるときに使われます。トランジション効果を適用して、画像の表示や非表示を緩やかにします。with ステートメントは、予約語 with と、それに続く評価がトランジションか特殊値 None である単純式でできています。

トランジション効果は、前のインタラクション (会話、選択肢、トランジション) が終わった時点の画面の内容と、scene、show、hide ステートメントが実行された後の内容の間で適用されます。

with ステートメントは、インタラクションを起こします。インタラクションの時間幅はユーザーが制御できますし、ユーザーが早く終わらせることもできます。

利用できるトランジションの一覧は、 トランジション の章をご覧ください。

with ステートメントの例です。

show bg washington
with dissolve

show eileen happy at left
show lucy mad at right
with dissolve

これは、2 つのトランジションを行います。最初の with ステートメントは、 dissolve トランジションを使い、スクリーンを washington 背景に変えます。(dissolve トランジションは、デフォルトで、0.5 秒のディゾルブと定義されています。)

第二のトランジションは、Eileen と Lucy の画像を表示するステートメントの後にあります。これにより、背景のみの場面から、3 つ全ての画像がある場面にディゾルブします。結果として、2 つの新しい画像がディゾルブして現れます。

with None link

上述の例には 2 つのディゾルブがあります。しかし背景は即座に現れその後に 2 人のキャラが現れるようにするにはどうするのでしょうか?最初の with ステートメントを単純になくしてしまうと、3 つの画像すべてがディゾルブして現れてしまいます。背景が即座に現れるようにしたいです。

with ステートメントは、特殊な値 None を与えると、動作が変わります。 with None ステートメントは、ユーザーに表示するものを変えない、省略されたインタラクションを起こします。次のトランジションは、この省略されたインタラクションが終わった時点で表示されている場面から始まります。

例えば、コード中で:

show bg washington
with None

show eileen happy at left
show lucy mad at right
with dissolve

washington 背景から、3 つの画像が表示されている場面に、一度だけトランジションが起こります。

scene、show、hide ステートメントの with 節 link

show、scene、hide ステートメントは、必要なら with 節を取れます。これは、画像の表示や非表示に、トランジションを組み合せます。

with 節をつけることは、 with None ステートメントを前に、with ステートメント を後に置くことと同等です:

show eileen happy at left with dissolve
show lucy mad at right with dissolve

これは次と等価です:

with None
show eileen happy at left
with dissolve

with None
show lucy mad at right
with dissolve

ウィンドウの表示・非表示 link

window ステートメントはキャラクターが話していないときにもウィンドウを表示するかを制御するために使用されます。 ( 例 トランジション、ポーズ中 ) window show ステートメントはウィンドウを表示させ、window hide ステートメントはウィンドウを非表示にします。

任意でトランジションが指定されると、ウィンドウの表示、非表示時に使用されます。指定されないと、デフォルトでは config.window_show_transitionconfig.window_hide_transition になります。 トランジションとして None を指定するとその実行を防ぎます。

ウィンドウ自身は config.empty_window を呼び出して表示されます。デフォルトではナレーターに空の文字列を話させます。


    show bg washington
    show eileen happy
    with dissolve

    window show dissolve

    "I can say stuff..."

    show eileen happy at right
    with move

    "... and move, while keeping the window shown."

    window hide dissolve

画像関数 link

renpy.can_show(name, layer=None, tag=None) link

name で画像を表示出来るか決定します。これは name をタグと属性として解釈します。これは layer 上の tag を持つ現在表示されている画像の属性と組み合わされ、表示する 1 つの画像の決定を試みます。 1 つの画像が表示可能なら、その画像名はタプルで返し、そうでなければ None を返します。

tag

画像属性を所得する画像タグです。未指定さら name の最初の要素になります。

layer

チェックするレイヤーです。 None なら tag のデフォルトレイヤーを使用します。

renpy.copy_images(old, new) link

ある接頭辞で始まる画像を他の接頭辞で始まるものにコピーします。例 :

renpy.copy_images("eileen", "eileen2")

「 eileen 」で始まるすべての画像に対して「 eileen2 」で始まる画像を作成します。例えば「 eileen happy 」が存在するなら、「 eileen2 happy 」が作成されます。

old

スペース区切りのコピー対象画像名の要素の文字列です。

new

スペース区切りの新しい画像名の要素の文字列です。

renpy.get_available_image_attributes(tag, attributes=()) link

タプルのリストで、各タプルは tag と関連付けられた画像属性の可能な組み合わせです。attribute が指定されると、指定されたすべての属性を含む画像のみが返されます。

renpy.get_available_image_tags() link

定義されている画像タグのリストが返されます。

renpy.get_image_bounds(tag, width=None, height=None, layer='master') link

tag を持つ画像が layer に存在すれば、その画像のバウンディングボックスを返します。画像が見つからなければ None を返します。

バウンディングボックスは (x, y, width, height) のタプルです。タプルの要素はピクセル数で表され、小数にも出来ます。

width, height

画像を格納する領域の幅と高さです。 None ならデフォルトでそれぞれスクリーンの幅と高さになります。

layer

None なら tag のデフォルトレイヤーを使用します。

renpy.get_placement(d) link

これは displayable d の位置を所得します。displayable はレンダリングされると位置が変わる可能性があり、最初にレンダリングされるまでは存在しない可能性もあるのでこの情報にはあまり信頼がありません。

これは以下の属性を持つオブジェクトを返し、それぞれがスタイルプロパティーに対応しています。

  • xpos
  • xanchor
  • xoffset
  • ypos
  • yanchor
  • yoffset
  • subpixel
renpy.get_showing_tags(layer='master') link

現在 layer 上に表示されている画像タグのセットが返されます。

renpy.has_image(name, exact=False) link

name 画像存在すれば Ture を、そのような画像がなければ False を返します。

name

画像名の文字列か、画像名を要素とする文字列のタプルです。

exact

その正確な名前で画像が存在する場合のみ True を返します。正規表現はマッチしません。

renpy.seen_image(name) link

その名前の画像がユーザーに一度でも閲覧されていれば True を返します。画像は show 、 scene ステートメントか renpy.show() 関数を使用して表示されると閲覧されたことになります。 ( 表示直後に hide されるなど、実際にはユーザーが画像を見ていない場合もあることに注意してください。 )

renpy.showing(name, layer='master') link

name と同じタグを持つ画像が layer 上に表示されていると True を返します。

image

画像名の文字列や、画像名の各要素のタプルです。画像タグだけの文字列でもかまいません。

layer

チェックするレイヤーです。 None なら tag のデフォルトレイヤーを使用します。

renpy.start_predict(*args) link

この関数は 1 つ以上の displayable を引数として受け取ります。 renpy.stop_predict() によって除外されるまで、 それらの displayable をインタラクション毎に予測させます。

renpy.stop_predict(*args) link

この関数は 1 つ以上の displayable を引数として受け取ります。それらの displayable のインタラクション毎の予測を停止させます。