首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在Shady中暂时暂停所有世界/刺激动态?

有没有办法在Shady中暂时暂停所有世界/刺激动态?
EN

Stack Overflow用户
提问于 2020-06-15 22:51:47
回答 1查看 31关注 0票数 0

我有一个用于运行交互式程序的Shady脚本,该程序涉及多个具有多个动态属性的Stimulus对象。World本身也具有一些动态属性。

我需要一种方法来暂时停止交互式程序。我可以自己在附加到世界/刺激的自定义Animate回调中处理这种“暂停”状态,但在每个动态属性函数中处理它显然并不理想。有没有办法同时“暂停”和“取消暂停”所有的动态?最好,至少在暂停状态下的每个帧都会调用World.Animate回调(和所有事件处理程序),这样我就可以监控取消暂停的条件,并可能在暂停时做一些不同的事情。

EN

回答 1

Stack Overflow用户

发布于 2020-06-16 01:18:27

查看Shady.Rendering子模块中的_FrameCallback代码,似乎没有显示“运行动画回调,而不是动态属性评估”的全局标志。也没有正式的/有记录的途径来做到这一点。

但是,在逐个实例的基础上,有一种非官方的方法可以挂起动态:只需删除未记录的._dynamics属性,可能会将其存储在某个地方以便稍后恢复。对.Animate属性执行相同的操作以禁用动画回调。要一下子禁用这两种类型的动态,不如这样:

代码语言:javascript
复制
def ToggleDynamics(x):
    x._disabled_dynamics, x._dynamics = x._dynamics, getattr(x, '_disabled_dynamics', {})
    x._disabled_Animate, x.Animate = x.Animate, getattr(x, '_disabled_Animate', None)

其中x是您的WorldStimulus实例。然后,要实现全局切换,您可以执行以下操作:

代码语言:javascript
复制
def ToggleDynamicsEverywhere(world):
    for thing in [world] + list(world.stimuli.values()):
        ToggleDynamics(thing)

python -m Shady shell showcase中尝试一下,您将看到ToggleDynamicsEverywhere(world)挂起了除视频播放之外的所有内容。

有一些相当明显的方法可以自定义这两个函数,以明确地启用/禁用动态而不是切换它们,或者在所有Stimulus实例上操作但不包括World,或者禁用,反之亦然。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62390875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档