0

ビヘイビア内にアニメーションがありますが、流動的ではありません。

ここに私のアニメーションコードがあります:

DoubleAnimationUsingKeyFrames animation = new DoubleAnimationUsingKeyFrames();

animation.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(0).(1)", UIElement.RenderTransformProperty, RotateTransform.AngleProperty));

int keyFrameCount = 16;
double timeOffsetInSeconds = 0.1;
int targetValue = 12;

double totalAnimationLength = keyFrameCount * timeOffsetInSeconds;
double repeatInterval = RepeatInterval;
bool isShaking = IsShaking;

// Can't be less than zero and pointless to be less than total length
if (repeatInterval < totalAnimationLength)
    repeatInterval = totalAnimationLength;

animation.Duration = new Duration(TimeSpan.FromSeconds(repeatInterval));

for (int i = 0; i < keyFrameCount; i++)
{
    animation.KeyFrames.Add(new LinearDoubleKeyFrame(i % 2 == 0 ? targetValue : -targetValue, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(i * timeOffsetInSeconds))));
}

animation.KeyFrames.Add(new LinearDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(totalAnimationLength))));

しかし、私が選ぶなら

int keyFrameCount = 360;

for (int i = 0; i < keyFrameCount; i++)
{
    animation.KeyFrames.Add(new LinearDoubleKeyFrame(i, keyTime.FromTimeSpan(TimeSpan.FromSeconds(i * timeOffsetInSeconds))));
}

非常に滑らかな円を回転させます。

アニメーションを 0 度から 30 度に戻し、-30 度に戻してから 0 に戻し (少しディザリングするため)、流暢に見えるようにするにはどうすればよいでしょうか。

何度か試してみたところ、ここでは (通常の) 行き来が機能しないことがわかりました。まったく制御されていない動作をしています!

4

1 に答える 1

2

なぜ自分でこれほど多くのキーフレームを作成しているのかはよくわかりませんが、それを行うために

アニメーションを 0 度から 30 度に戻し、-30 度に戻してから 0 に戻し (少しディザリングするため)、流暢に見えるようにするにはどうすればよいでしょうか。

アニメーションを次のように変更できます

DoubleAnimationUsingKeyFrames animation = new DoubleAnimationUsingKeyFrames();

animation.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(0).(1)", UIElement.RenderTransformProperty, RotateTransform.AngleProperty));

var totalAnimationLength = 1600; // Milliseconds

double repeatInterval = 1600;// Milliseconds

if (repeatInterval < totalAnimationLength) repeatInterval = totalAnimationLength; // Can't be less than zero and pointless to be less than total length 

animation.Duration = new Duration(TimeSpan.FromMilliseconds(repeatInterval));
animation.RepeatBehavior = RepeatBehavior.Forever; // assuming this was intended from having a repeat interval?

animation.KeyFrames.Add(new LinearDoubleKeyFrame(30, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(totalAnimationLength * 0.25))));
animation.KeyFrames.Add(new LinearDoubleKeyFrame(-30, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(totalAnimationLength * 0.75))));
animation.KeyFrames.Add(new LinearDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(totalAnimationLength))));
于 2012-07-04T23:54:04.790 に答える