我目前使用的SpriteAnimationWidget从火焰,我想有不同的动画点击按钮。
为了测试这是否有效,我将通过单击按钮来更改SpriteAnimationWidget的动画参数。1秒后,小部件必须返回到它的原始动画。
这是我的代码:
Future<void> playReaction() async {
setState(() {
isPlaying = true;
state = 'reaction';
});
await Future.delayed(Duration(milliseconds: 1000));
setState(() {
isPlaying = false;
state = 'idle';
});
}在建筑里面,我回来了:
if(state == 'reaction') {
spriteAnimation = reactionSprite!.createAnimation(row: 0, stepTime: 0.1, from: 0, to: 10);
print('reaction');
}
else if(state == 'idle'){
spriteAnimation = sprite!.createAnimation(row: 1, stepTime: 0.2, from: 0, to: 4);
print('idle');
}
return Container(
height: widget.size,
child: Stack(
fit: StackFit.expand,
children: [
Positioned.fill(
child: SpriteAnimationWidget(
animation: spriteAnimation!,
anchor: Anchor.center,
)
),
]
),
);变量sprite和reactionSprite是我使用SpriteSheet.fromColumnsAndRows()预装的雪碧表。
问题是,虽然我的应用程序成功地运行了playReaction()并达到了print(' reaction '),但是SpriteAnimationWidget仍然在播放空闲的动画而不是反应动画。我知道它正在被重建,因为我可以看到,当我点击按钮(加上打印消息)时,动画中有一个轻微的不自然的不连续性。
为什么setState()不使用新的动画参数更新SpriteAnimationWidget?
我对颤音和火焰比较陌生,所以我希望得到一些帮助或建议。
ps。我尝试使用相同的sprite工作表来进行不同行的更改(而不是使用上面代码中完全不同的sprite工作表),但结果是一样的。
发布于 2021-12-12 14:24:35
这实际上是个bug,我们正在修复它,这里。
同时,作为一种解决方法,您可以在每次更改动画并更新小部件时更改小部件的键。
https://stackoverflow.com/questions/70174657
复制相似问题