创建一个纸牌游戏,当游戏开始时,每手提供5张牌。使用情节提要,纸牌分别从卡组到手牌位置0-4。有5个故事,每5个手位置一个。
该故事是通过for循环调用的:
问题仅在于播放了从for循环调用的最后一个故事。如果更改循环次数,则故事适用于所有位置,但始终只播放最后一个称为的故事。
2xx
<Page.Resources>
<Storyboard x:Name="sDeckToHandPositionOne" TargetName="HandPositionOne">
<DoubleAnimation Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.X)" To="0" Duration="0:0:1"/>
<DoubleAnimation Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.Y)" To="0" Duration="0:0:1"/>
</Storyboard>
<Storyboard x:Name="sDeckToHandOne" TargetName="HandPositionOne">
<DoubleAnimation Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.X)" To="0" Duration="0:0:1"/>
<DoubleAnimation Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.Y)" To="0" Duration="0:0:1"/>
</Storyboard>
</Page.Resources>
注意:这是一个示例,可能包含错字。
答案 0 :(得分:1)
如果我正确理解了您的问题,则您尝试依次运行Storyboard
的集合,也就是说,下一个情节提要需要等待当前情节提要的完成。但是,您的代码正在同时播放Storyboard的集合,结果是,仅播放了最后一个Storyboard,其他的则被忽略了。
我认为您可以将故事板排成一行,仅播放第一个故事板,并为故事板的Completed事件注册处理程序,在该事件中,您可以播放队列中的下一个故事板。像这样
var storyboardQueue = new Queue<Storyboard>();
storyboardQueue.Enqueue((Resources["sDeckToHandPositionOne"] as Storyboard));
storyboardQueue.Enqueue((Resources["sResetPosition"] as Storyboard));
storyboardQueue.Enqueue((Resources["sDeckToHandPositionTwo"] as Storyboard));
storyboardQueue.Enqueue((Resources["sResetPosition"] as Storyboard));
storyboardQueue.Enqueue((Resources["sDeckToHandPositionThree"] as Storyboard));
storyboardQueue.Enqueue((Resources["sResetPosition"] as Storyboard));
//... other storyboards
PlayNextStoryBoard(storyboardQueue);
private void PlayNextStoryBoard(Queue<Storyboard> storyboardQueue)
{
if (storyboardQueue.Count > 0)
{
var sb = storyboardQueue.Dequeue();
sb.Completed += (o, e) =>
{
PlayNextStoryBoard(storyboardQueue);
};
sb.Begin();
}
}