找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6947|回复: 2

[已解决] 关于动态图片功能-DynamicDisplayable-的重新绘制问题?

[复制链接]
发表于 2021-7-22 13:19:07 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Zealot001 于 2021-7-22 15:32 编辑

最近有一些想法,想做一些动态背景,比如某些场景里有一些闪烁的灯光,或者天空有小鸟飞过等等最开始是想着用gif无背景动图来解决

上LSF上问了一下,得到的答复是,gif格式太老,renpy不支持,并告诉我可以用DynamicDisplayable这个功能实现。

于是去了解一下
但是现在出现了一个问题,比如
[RenPy] 纯文本查看 复制代码
default score = 0
image scoreimage = ConditionSwitch(
        "score <= 10", Solid('#f00'),
        "score > 10", Solid('#0f0'),
        "True", Solid('#00f'))

image countdown = DynamicDisplayable(show_countdown)

init python:
    def dd_cursor_position(st, at):
        x, y = renpy.get_mouse_pos()

        if (x<=750 or (x>=750 and x<=1170 and y<=450) or x>=1170):
            store.score += 1
            renpy.hide("scoreimage")
            renpy.show("scoreimage")
            return Text("{size=-5}%d - %d: %d"%(x, y, score)), .1
        elif (x>=750 and x<=1070 and y>=450):
            store.score -= 0
            renpy.hide("scoreimage")
            renpy.show("scoreimage")
            return Text("{size=-5}%d - %d: %d"%(x, y, score)), .1

        return Text("{size=-5}%d - %d"%(x, y)), .1

    def show_countdown(st, at):
        if st > 5.0:
            return Text("0.0"), None
        else:
            d = Text("{:.1f}".format(5.0 - st))
            return d, 0.1


screen Mouse_Position():
    zorder 10**10
    add DynamicDisplayable(dd_cursor_position) xpos 10 yalign 0.99
    add DynamicDisplayable(show_countdown) at truecenter
    timer 0.5 action Function(renpy.restart_interaction)

label start:

    scene testing bkgd
    show screen Mouse_Position
#call screen Mouse_Position
    "按下空格结束~"

label end:
    "Your score is [score]"
    return


理论上想达到的效果是:获取鼠标位置,鼠标位置不在区域内则加分,在区域内就减分,分数达到10,场景发生变化(这里是颜色变化)
但实际上,DynamicDisplayable似乎并不会自动重新绘制,不管程序运行结果如何,它只在开始和结束的时候各绘制一次场景
如果想要获得场景自动变化的效果,那我就需要在screen标签下增加判定语句,这样的话,DynamicDisplayable就并非动态显示了。
我该怎么定义,才能让我只调用一个DynamicDisplayable,就让图片动起来呢?
发表于 2021-7-22 14:19:23 | 显示全部楼层
楼主的需求,其实并不符合DynamicDisplayable功能设计。

如果原本是准备用gif播放动画,不如就顺着思路做。只是不直接用gif,而是改为使用序列帧。
序列帧用法可参考这个:
Ren'Py引擎从入门到放弃(支线9)——使用CDD播放序列帧动画
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2021-7-22 14:36:15 | 显示全部楼层
被诅咒的章鱼 发表于 2021-7-22 14:19
楼主的需求,其实并不符合DynamicDisplayable功能设计。

如果原本是准备用gif播放动画,不如就顺着思路做 ...

谢谢!
我也觉得序列帧比较简单,主要不涉及什么语法,只要把图像按顺序排布就行了。
我再去琢磨一下DynamicDisplayable这个东西,除了renpy给出的计时器,暂时还没想到它应用的点
回复 支持 抱歉

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 04:06 , Processed in 0.103170 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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