找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12561|回复: 3

[教程] 9行代码实现历史记录滚动条

[复制链接]
发表于 2021-6-18 21:10:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 天使的遗族 于 2025-7-7 12:52 编辑

实现滚轮向上打开历史记录后,一直写不好向下滚动到底关闭,发现是把判断后执行语句return Return()写成了Return()。
首先你需要重构Adjustment类或者更简单的,继承 Class Adjustment写一个新类MyAdjustment,在这个新类中重构一个change,判断滚动条值大于范围就关闭该screen
[RenPy] 纯文本查看 复制代码
init python:



    class MyAdjustment(renpy.display.behavior.Adjustment):



        def change(self, value):



            if value > self._range and self._value == self._range:

                # *Return to the game screen*

                return Return()

            else:

                # Otherwise, just do what the Adjustment normally does

                return renpy.display.behavior.Adjustment.change(self, value)

在screen game_menu中
[RenPy] 纯文本查看 复制代码
default adj = MyAdjustment(range = 100,changed =None,adjustable=True)

在其viewport和vpgrid中
[RenPy] 纯文本查看 复制代码
yadjustment adj

即可

参考screen game_menu的全部代码

[RenPy] 纯文本查看 复制代码
screen game_menu(title, scroll=None, yinitial=0.0):

    style_prefix "game_menu"

    if main_menu:
        add gui.main_menu_background
    else:
        add gui.game_menu_background

    frame:
        style "game_menu_outer_frame"

        hbox:

            ## 导航部分的预留空间。
            frame:
                style "game_menu_navigation_frame"

            frame:
                style "game_menu_content_frame"

                if scroll == "viewport":

                    default adj = MyAdjustment(range = 100,changed =None,adjustable=True)

                    text str(adj)

                    viewport:
                        yadjustment adj
                        yinitial yinitial
                        scrollbars "vertical"
                        mousewheel True
                        draggable True
                        pagekeys True

                        side_yfill True

                        

                        vbox:
                            transclude

                elif scroll == "vpgrid":

                    default adj = MyAdjustment(range = 100,changed =None,adjustable=True)

                    vpgrid:
                        cols 1
                        yadjustment adj
                        yinitial yinitial
                        scrollbars "vertical"
                        mousewheel True
                        draggable True
                        pagekeys True

                        side_yfill True

                        transclude

                else:

                    transclude

    if not renpy.get_screen("history"):
        use navigation

    textbutton _("返回"):
        style "return_button"

        action Return()

    label title

    if main_menu:
        key "game_menu" action ShowMenu("main_menu")





发表于 2021-6-20 11:57:06 | 显示全部楼层
牛啊牛啊
回复

使用道具 举报

发表于 2024-3-2 11:27:43 | 显示全部楼层

如果是8.1.3版的renpy,使用上述代码后会导致在历史记录里用鼠标拖动文本达到最顶端或最低端报错的bug
需要将类里的change()加一个参数,代码如下:
[RenPy] 纯文本查看 复制代码
    class MyAdjustment(renpy.display.behavior.Adjustment):
 
        def change(self, value, end_animation=True):

            if value > self._range and self._value == self._range:
 
                # *Return to the game screen*
 
                return Return()
 
            else:
 
                # Otherwise, just do what the Adjustment normally does
 
                return renpy.display.behavior.Adjustment.change(self, value, end_animation)
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2024-3-4 22:31:28 | 显示全部楼层
黑白喵 发表于 2024-3-2 11:27
如果是8.1.3版的renpy,使用上述代码后会导致在历史记录里用鼠标拖动文本达到最顶端或最低端报错的bug
需 ...

这个我新开工程加进去一直不能滚动到底关闭,先有工程加的有的都没有问题,不知道为什么
回复 支持 抱歉

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2025-8-27 17:13 , Processed in 0.064532 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表