ドラッグドロップ link

Ren'Py にはマウスで画面上を移動できるドラッグドロップ displayable があります。ドラッグの使用法としては :

  • ウィンドウの位置合わせ、ウィンドウ位置を記憶できるようにする。

  • カードを画面上でドラッグする必要のあるカードゲーム ( 例えばソリティア )。

  • アイテムシステム。

  • ドラッグで並び順を変えるシステム。

ドラッグドロップ displayable は、上記やその他の場面においてドラッグドロップを実装できるようにします。ここで関係する2つのクラスがあります。 Drag クラスは、スクリーン上をドラッグできるもの、またはその上にドロップされたドラッグ可能なものを受け取れるもの、その両方が出来るもののいずれかを表します。 DragGroup クラスは Drag のグループを表します。ドラッグドロップを実行するためには、両方の Drag が同じドラッググループに属していなければなりません。

ドラッグドロップシステムは スクリーン言語 を通してか、または直接 displayable として使用できます。作成後に作成した Drag を参照する必要がないときは、スクリーン言語を使用すると良いでしょう。これはドラッグ可能オブジェクトが、ユーザーがスクリーン上に配置したウィンドウである場合などです。作成後も作成した Drag を参照する必要がある場合は、直接 Drag を作成し、それらを DragGroup に追加すると良いでしょう。

Displayable link

link

以下の say スクリーンの例では、スクリーン上をドラッグしてユーザーがウィンドウの位置を選べます。

screen say:

    drag:
        drag_name "say"
        yalign 1.0
        drag_handle (0, 0, 1.0, 30)

        xalign 0.5

        window id "window":
            # Ensure that the window is smaller than the screen.
            xmaximum 600

            has vbox

            if who:
                text who id "who"

            text what id "what"

こちらはより複雑な例で、ゲームプレイに影響を与えるためにどのようにドラッグを使用できるかを表示します。これはどのようにキャラクターをある場所に送るためにドラッグが使用できるかを表示します。

init python:

    def detective_dragged(drags, drop):

        if not drop:
            return

        store.detective = drags[0].drag_name
        store.city = drop.drag_name

        return True

screen send_detective_screen:

    # A map as background.
    add "europe.jpg"

    # A drag group ensures that the detectives and the cities can be
    # dragged to each other.
    draggroup:

        # Our detectives.
        drag:
            drag_name "Ivy"
            child "ivy.png"
            droppable False
            dragged detective_dragged
            xpos 100 ypos 100
        drag:
            drag_name "Zack"
            child "zack.png"
            droppable False
            dragged detective_dragged
            xpos 150 ypos 100

        # The cities they can go to.
        drag:
            drag_name "London"
            child "london.png"
            draggable False
            xpos 450 ypos 140
        drag:
            drag_name "Paris"
            draggable False
            child "paris.png"
            xpos 500 ypos 280

label send_detective:
    "We need to investigate! Who should we send, and where should they go?"

    call screen send_detective_screen

    "Okay, we'll send [detective] to [city]."

さらに複雑なシステムを作るには、高度なプログラミングスキルが必要です。 Ren'Py cardgame framework は、複雑なゲームにおけるドラッグドロップの例を示すとともに、カードゲームの作成を容易にします。