wpf基于帧的动画
来源:互联网 发布:java手机游戏安卓版 编辑:程序博客网 时间:2024/06/04 19:40
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Title="MainWindow" Height="396" Width="463.2"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition /> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal"> <Button Margin="3" Padding="3" Click="Button_Click">Start</Button> <Button Margin="3" Padding="3" Click="Button_Click_1">Stop</Button> </StackPanel> <Canvas x:Name="canvas" Grid.Row="1" Margin="3"></Canvas> </Grid></Window>
using System;using System.Collections.Generic;using System.Windows;using System.Windows.Controls;using System.Windows.Media;using System.Windows.Shapes;namespace WpfApplication1{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private List<EllipseInfo> ellipses = new List<EllipseInfo>(); private double accelerationY = 0.1; private int minStartSpeed = 1; private int maxStartSpeed = 50; private double speedRatio = 0.1; private int minEllipses = 20; private int maxEllipses = 100; private int ellipseRadius = 10; private bool rendering = false; public class EllipseInfo { public Ellipse Ellipse { get; set; } public double VelocityY { get; set; } public EllipseInfo(Ellipse ellipse, double velocityY) { VelocityY = velocityY; Ellipse = ellipse; } } private void Button_Click(object sender, RoutedEventArgs e) { if (!rendering) { ellipses.Clear(); canvas.Children.Clear(); CompositionTarget.Rendering += RenderFrame; } } private void RenderFrame(object sender, EventArgs e) { if (0 == ellipses.Count) { int halfCanvasWidth = (int)canvas.ActualWidth / 2; Random rand = new Random(); int ellipseCount = rand.Next(minEllipses, maxEllipses); for (int i = 0; i < ellipseCount; ++i) { Ellipse ellipse = new Ellipse(); ellipse.Fill = Brushes.LimeGreen; ellipse.Width = ellipseRadius; ellipse.Height = ellipseRadius; Canvas.SetLeft(ellipse, halfCanvasWidth + rand.Next(-halfCanvasWidth, halfCanvasWidth)); Canvas.SetTop(ellipse, 0); canvas.Children.Add(ellipse); EllipseInfo info = new EllipseInfo(ellipse, speedRatio * rand.Next(minStartSpeed, maxStartSpeed)); ellipses.Add(info); } } else { for (int i = 0; i < ellipses.Count; ++i) { EllipseInfo info = ellipses[i]; double top = Canvas.GetTop(info.Ellipse); Canvas.SetTop(info.Ellipse, top + 1 * info.VelocityY); if (top >= canvas.ActualHeight - ellipseRadius * 2 - 10) { ellipses.Remove(info); } else { info.VelocityY += accelerationY; } if(0==ellipses.Count) { StopRendering(); } } } } private void StopRendering() { CompositionTarget.Rendering -= RenderFrame; rendering = false; } private void Button_Click_1(object sender, RoutedEventArgs e) { StopRendering(); } }}
阅读全文
0 0
- wpf基于帧的动画
- WPF 简单的动画
- WPF 做的动画
- WPF底部渐现的动画
- WPF的动画实现方式
- WPF 有趣的动画效果
- 基于WPF的简单画图
- WPF动画
- WPF动画
- [WPF]动画
- WPF动画
- 基于Html5 Canvas的帧动画生成器
- 基于Autolayout的动画
- silverlight / wpf 旋转动画的实现
- 一个简单的WPF图片动画制作
- Wpf一个简单的物体移动动画
- WPF的简单关闭动画特效
- WPF圆形环绕的Loading动画
- 理解Android中的MVP架构
- HashSet
- java(33):Hibernate框架(1):基础
- hive 优化(二)
- springboot 生成二维码
- wpf基于帧的动画
- MySQL数据类型之日期和时间类型
- 终止占有8080端口的Tomcat进程
- 19-EMM Procedure 7. Cell Reselection without TAU
- JS 委托事件
- 一个01字符串,求出现0、1出现次数相等的最长子串
- 多伦多大学联手Uber推出RevNet,不用存储激活便可实现反向传播
- Linux字符串检索
- unity AR3D物体识别