だから私が持っているのは、さまざまな画像を含むキャンバスです。私が必要としているのは、foreach ループでそのような画像の 1 つのアニメーションをトリガーすることです。問題は、プログラムがループの最後のアニメーションのみを実行することです。アニメーションがまだ実行されている間に foreach ループを一時停止する方法はありますか、または少なくとも foreach が終了するまで次のループに移動するのを停止します。できれば、xaml ではなくほとんどコードで行うことをお勧めします。ここに私のキャンバスのxmalコードがあります -
<Canvas Name="AnimationCanvas" HorizontalAlignment="Left" VerticalAlignment="Top" Height="154" Width="292">
<Image x:Name="img_ShipAttack" Panel.ZIndex="100" Height="91" Canvas.Left="25" Canvas.Top="28" Width="93" RenderTransformOrigin="0,0"/>
<Image x:Name="img_ShipTarget" Canvas.Top="28" Panel.ZIndex="100" RenderTransformOrigin="0.5,0.5" Width="93" Canvas.Left="173" Height="93"/>
<Image x:Name="img_AttackBack" Height="472" Width="651" Panel.ZIndex="0" Canvas.Top="-82" Canvas.Left="-81"/>
<Image x:Name="img_Pojectile" Panel.ZIndex="90" Height="153" Canvas.Left="-7" Canvas.Top="-3" Width="157" RenderTransformOrigin="0,0"/>
</Canvas>
ここに私のアニメーション方法があります -
public void Fire(Image target, double seconds)
{
var top = Canvas.GetTop(target);
var left = Canvas.GetLeft(target);
TranslateTransform trans = new TranslateTransform();
target.RenderTransform = trans;
DoubleAnimation anim = new DoubleAnimation(0, 140, TimeSpan.FromSeconds(seconds));
anim.Completed += new EventHandler(CompletedAnimate);
trans.BeginAnimation(TranslateTransform.XProperty, anim);
}
そして最後に、厄介なループ -
foreach(var weapon in weapons)
{
try
{
string weapons = "\\" + weapon.Name + ".png";
img_Pojectile.Source = new BitmapImage(new Uri(Directory.GetCurrentDirectory() + "\\Images" + weapons));
}
catch
{
try
{
string weapons = "\\" + weapon.Type + ".png";
img_Pojectile.Source = new BitmapImage(new Uri(Directory.GetCurrentDirectory() + "\\Images" + weapons));
}
catch
{
img_Pojectile.Source = new BitmapImage(new Uri(Directory.GetCurrentDirectory() + "\\Images\\Default.png"));
}
}
Fire(img_Pojectile, 1.5);
}
ご覧のとおり、アニメーションに Completed イベント ハンドラーがあります。問題は、何があってもトリップしないことです。私の CompletedAnimation メソッドは、現時点では bool を true に設定するだけです。