画像の表示 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",
    )

画像が直接 game ディレクトリーにないとき、ディレクトリーを指定する必要があります。例えば、画像が game/eileen/happy.png なら、以下のように書けます。

image eileen happy = "eileen/happy.png"

image ステートメントは、ゲームメニューが表示される、またはあ start ラベルが実行される前の初期化時に実行しなければなりません。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

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