Flutter setState() 没有更新 Flame SpriteAnimationWidget
Flutter setState() is not updating a Flame SpriteAnimationWidget
我目前正在使用来自 Flame 的 SpriteAnimationWidget,我想通过单击按钮获得不同的动画效果。
为了测试这是否有效,我通过单击按钮来更改 SpriteAnimationWidget 的动画参数。 1 秒后,小部件必须 return 到其原始动画。
这是我的代码:
Future<void> playReaction() async {
setState(() {
isPlaying = true;
state = 'reaction';
});
await Future.delayed(Duration(milliseconds: 1000));
setState(() {
isPlaying = false;
state = 'idle';
});
}
在构建中,我正在 returning:
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() 预加载的 sprite sheet。
问题是,虽然我的应用程序成功运行了 playReaction() 并达到了 print('reaction'),但 SpriteAnimationWidget 仍在播放空闲动画而不是反应动画。我知道它正在以某种方式重建,因为我可以看到当我按下按钮(加上打印消息)时动画中有轻微的不自然的不连续性。
为什么 setState() 没有使用新的动画参数更新 SpriteAnimationWidget?
我对 Flutter 和 Flame 比较陌生,所以我希望得到一些帮助或建议。
ps。我尝试使用相同的 sprite sheet 来更改不同的行(而不是使用完全不同的 sprite sheet,如上面的代码),但结果是一样的。
这实际上是一个错误,我们正在修复它 here。
同时,作为一种解决方法,您可以在每次更改动画时更改小部件的键,它应该会更新小部件。
我目前正在使用来自 Flame 的 SpriteAnimationWidget,我想通过单击按钮获得不同的动画效果。
为了测试这是否有效,我通过单击按钮来更改 SpriteAnimationWidget 的动画参数。 1 秒后,小部件必须 return 到其原始动画。
这是我的代码:
Future<void> playReaction() async {
setState(() {
isPlaying = true;
state = 'reaction';
});
await Future.delayed(Duration(milliseconds: 1000));
setState(() {
isPlaying = false;
state = 'idle';
});
}
在构建中,我正在 returning:
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() 预加载的 sprite sheet。
问题是,虽然我的应用程序成功运行了 playReaction() 并达到了 print('reaction'),但 SpriteAnimationWidget 仍在播放空闲动画而不是反应动画。我知道它正在以某种方式重建,因为我可以看到当我按下按钮(加上打印消息)时动画中有轻微的不自然的不连续性。
为什么 setState() 没有使用新的动画参数更新 SpriteAnimationWidget?
我对 Flutter 和 Flame 比较陌生,所以我希望得到一些帮助或建议。
ps。我尝试使用相同的 sprite sheet 来更改不同的行(而不是使用完全不同的 sprite sheet,如上面的代码),但结果是一样的。
这实际上是一个错误,我们正在修复它 here。
同时,作为一种解决方法,您可以在每次更改动画时更改小部件的键,它应该会更新小部件。