找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8925|回复: 2

[已解决] 之前看到血条的帖子,想做一个关于按键加血的小功能

[复制链接]
发表于 2021-7-14 18:03:53 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Zealot001 于 2021-7-15 09:28 编辑

功能很简单,按钮按一下,血条相应增加,(当然也可以转为扣血)
因为screen有预加载这个问题,所以计算的部分不能放进screen标签里,不然会有重复计算的问题。

[RenPy] 纯文本查看 复制代码
default varplus_fun = plusvar(0)
default varplus_key = varplus_fun.addvar

default flag001 = 0

init -1 python:
    import requests
    import random

    class plusvar(NoRollback):
        var01 = 0
        var02 = 0
        def __init__(self, randx):
            self.randx = randx

        @property
        def addvar(self):
            self.var01 += 3
            return self.var01

label start:
    $ varplus_key = varplus_fun.addvar
    $ flag001 = 0
    scene black
    call screen attack_fun

    # jump talk

    return


screen attack_fun():

    frame:
        xcenter 0.25
        ycenter 0.25
        xsize 180
        ysize 320
        vbox:
            bar:
                value AnimatedValue(value=flag001, range=10, delay=1.0, old_value=None)
                xsize 200
                xcenter 0.5
            if flag001 == 0:
                textbutton "治疗":
                    text_size 40
                    text_outlines[(absolute(2), "#effdff", absolute(0), absolute(0))]
                    text_color "#ed54de"
                    text_selected_color "#32e0fc"
                    action SetVariable("flag001", 5)
            elif flag001 == 5:
                textbutton "治疗":
                    text_size 40
                    text_outlines[(absolute(2), "#effdff", absolute(0), absolute(0))]
                    text_color "#ed54de"
                    text_selected_color "#32e0fc"
                    action SetVariable("flag001", 10)
            else:
                textbutton "满了":
                    text_size 40
                    text_outlines[(absolute(2), "#effdff", absolute(0), absolute(0))]
                    text_color "#ed54de"
                    text_selected_color "#32e0fc"
                    action Jump("start")
            text "[flag001]"


这段代码是根据莉萝爱萝莉的教程改的
我想问的问题在于,SetVariable只能对应把某个固定的值赋予变量,没有办法灵活增加或减少,故而想要完成累加或者递减就很麻烦。
但如果用类方法,设定好递增的值放进去,又会出现预加载导致数值变化不可预期这一副作用。

但如果不能通过screen运算,直接放在label里面,也有一个问题,就是label标签的语句只运行一次,把call screen放进for循环又很奇怪。
请各位大佬支招,我看莉萝爱萝莉有一个实时战斗系统

但不明白其中的原理
发表于 2021-7-15 08:32:20 | 显示全部楼层
在界面中直接修改变量的值、调用函数、调用类方法,才会收到界面预加载的影响。
在互动组件的行为(action)中修改变量不会有那种问题,比如楼主代码中的 SetVariable

如果要实现某些变量(或者类成员变量)的递增或递减,在函数或类方法中实现具体计算后,互动组件的action用 Function 调用对应的函数或类方法即可。
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2021-7-15 08:38:48 | 显示全部楼层
本帖最后由 Zealot001 于 2021-7-15 09:28 编辑
被诅咒的章鱼 发表于 2021-7-15 08:32
在界面中直接修改变量的值、调用函数、调用类方法,才会收到界面预加载的影响。
在互动组件的行为(action) ...

大佬,我试了一下,我把SetVariable后面的赋值语句改了,

[RenPy] 纯文本查看 复制代码
default varplus_key = varplus_fun.addvar

action SetVariable("flag001", varplus_key)

但还是会受到预加载的影响
您的意思是,我自己可以设计一个调用函数,让action调用function的功能,而不受到预加载的影响吗?
谢谢,我去试试
试过了,可行!
回复 支持 抱歉

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-28 00:00 , Processed in 0.126961 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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