在C#中制作动画通常涉及图形库或游戏引擎,以下是三种主流实现方式及其核心原理:
一、Windows Forms 基础动画(GDI+)
通过定时刷新界面实现简单动画,核心类:
Timer:控制帧率Graphics:绘制图形
// 弹跳球示例
public partial class Form1 : Form {
int x = 50, y = 50, dx = 2, dy = 3;
private void timer1_Tick(object sender, EventArgs e) {
// 边界检测
if (x < 0 || x > ClientSize.Width - 30) dx *= -1;
if (y < 0 || y > ClientSize.Height - 30) dy *= -1;
x += dx; // 更新位置
y += dy;
Invalidate(); // 重绘界面
}
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.FillEllipse(Brushes.Red, x, y, 30, 30);
}
}
需在窗体初始化时设置
timer1.Interval = 16;(约60FPS)
二、WPF 高级动画
使用声明式动画系统,支持硬件加速:
<!-- XAML中实现按钮旋转动画 -->
<Button Content="旋转" Width="100" Height="40">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="(Button.RenderTransform).(RotateTransform.Angle)"
From="0" To="360" Duration="0:0:1"
RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
<Button.RenderTransform>
<RotateTransform CenterX="50" CenterY="20"/>
</Button.RenderTransform>
</Button>
三、Unity 引擎动画系统(推荐复杂场景)
专业级动画工作流:
- 动画控制器:创建状态机管理动画过渡
Animator anim = GetComponent<Animator>(); anim.SetBool("IsRunning", true); // 触发状态切换 - 时间轴动画:可视化编辑关键帧
- 程序动画:通过代码控制变换
void Update() { float swing = Mathf.Sin(Time.time * 2f) * 30f; transform.rotation = Quaternion.Euler(0, 0, swing); }
性能优化建议
- 帧率控制:桌面应用保持30-60FPS
Δt=1fps \Delta t = \frac{1}{fps} Δt=fps1 - 双缓冲:Windows Forms中设置
DoubleBuffered = true - WPF使用合成线程渲染:
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
工具推荐:
- 简单动画:WPF Blend
- 游戏动画:Unity Timeline
- 矢量动画:Adobe Animate + C#插件
根据项目复杂度选择方案,2D简单动画可用WinForms,交互动画首选WPF,游戏开发推荐Unity。
503

被折叠的 条评论
为什么被折叠?



