最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - How to make viewport auto-scroll to the bottom in Renpy - Stack Overflow

programmeradmin3浏览0评论

I am currently trying to make a phone text game. I have got most of functionality working except the part where I want to make the viewport of a screen to automatically scroll to the bottom when a new text comes in. I have already tried using YScrollValue but Renpy doesn't seem to recognize it, so I'm stuck on how to make it auto-scroll.

I had to revert the code back to how it was before and this is what I currently have for my script.rpy and screens.rpy files:

script.rpy

# The script of the game goes in this file.

# Declare characters used by this game. The color argument colorizes the
# name of the character.

define e = Character("Testing")

default chat_messages = []
default chat_scroll_pos = 1.0  # Default to bottom


python early:

    import enum

    class ChatAlign(enum.Enum):
        LEFT = 0
        RIGHT = 1

    # Function to add a message and refresh the screen
    def add_message(text, color = "#000000", align = ChatAlign.LEFT):
        chat_messages.append((text, color, align))
        renpy.restart_interaction()  # Forces UI refresh
        

# The game starts here.

label start:

    # Show a background. This uses a placeholder by default, but you can
    # add a file (named either "bg room.png" or "bg room.jpg") to the
    # images directory to show it.

    scene trudy_phone_message

    show screen phone_chat

    $ add_message("This is a text from the sender", align = ChatAlign.RIGHT)
    $ renpy.pause()

    $ add_message("This is a text from the receiver", align = ChatAlign.LEFT)
    $ renpy.pause()

    $ add_message("This is a text from the sender", align = ChatAlign.RIGHT)
    $ renpy.pause()

    $ add_message("This is a text from the receiver", align = ChatAlign.LEFT)
    $ renpy.pause()

    $ add_message("This is a text from the sender", align = ChatAlign.RIGHT)
    $ renpy.pause()

    $ add_message("This is a text from the receiver", align = ChatAlign.LEFT)
    $ renpy.pause()

    $ add_message("This is a text from the sender", align = ChatAlign.RIGHT)
    $ renpy.pause()

    $ add_message("This is a text from the receiver", align = ChatAlign.LEFT)
    $ renpy.pause()

    $ add_message("This is a text from the sender", align = ChatAlign.RIGHT)
    $ renpy.pause()

    $ add_message("This is a text from the receiver", align = ChatAlign.LEFT)
    $ renpy.pause()

    $ add_message("This is a text from the sender", align = ChatAlign.RIGHT)
    $ renpy.pause()

    $ add_message("This is a text from the receiver", align = ChatAlign.LEFT)
    $ renpy.pause()

    $ add_message("This is a text from the sender", align = ChatAlign.RIGHT)
    $ renpy.pause()

    $ add_message("This is a text from the receiver", align = ChatAlign.LEFT)
    $ renpy.pause()

    return

screens.rpy

screen phone_chat():

    frame:
        xsize 430
        ysize 700
        xpos 745
        ypos 220
        background "#FFFFFF"

        viewport:
            id "chat_scroll"
            draggable True
            mousewheel True
            ysize 694

            vbox:
                spacing 10
                xalign 0.5

                for msg, color, align in chat_messages:
                    hbox:
                        xfill True

                        if align == ChatAlign.LEFT:
                            frame:
                                background Frame("gui/leftBubble.png", 15, 15)
                                xpadding 10
                                ypadding 5
                                xfill False
                                xmaximum 300
                                xalign 0.0
                                xmargin 5
                                text msg color "#000000" size 15

                        elif align == ChatAlign.RIGHT:
                            null width 100  # Pushes message to the right
                            frame:
                                background Frame("gui/rightBubble.png", 15, 15)
                                xpadding 10
                                ypadding 5
                                xfill False
                                xmaximum 300
                                xalign 1.0
                                xmargin 5
                                text msg color "#FFFFFF" size 15 

        vbar:
            value YScrollValue("chat_scroll")
            xalign 1.0  
            xsize 3
            unscrollable "hide"
发布评论

评论列表(0)

  1. 暂无评论