当前位置: 首页 > news >正文

C# Avalonia 16- Animation- FrameBasedAnimation

FrameBasedAnimation.axaml代码

<Window xmlns="https://github.com/avaloniaui"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"Height="396" Width="463.2"x:Class="AvaloniaUI.FrameBasedAnimation"Title="FrameBasedAnimation"><Grid Margin="3" RowDefinitions="auto,*"><StackPanel Orientation="Horizontal"><Button Margin="3" Padding="3" Click="cmdStart_Clicked">Start</Button><Button Margin="3" Padding="3" Click="cmdStop_Clicked">Stop</Button></StackPanel><Canvas Name="canvas" Grid.Row="1" Margin="3"></Canvas></Grid>
</Window>

FrameBasedAnimation.axaml.cs代码

using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Shapes;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using Shares.Avalonia;
using System;
using System.Collections.Generic;
using System.Linq;namespace AvaloniaUI;
public class EllipseInfo
{public Ellipse Ellipse { get; set; }public double VelocityY { get; set; }public bool HasStopped { get; set; }  // 当前是否停止public int BouncesRemaining { get; set; }  // 剩余弹跳次数public double MaxBounceSpeed { get; set; } // 最大反弹初速度public EllipseInfo(Ellipse ellipse, double velocityY, int bounces, double bounceSpeed){Ellipse = ellipse;VelocityY = velocityY;HasStopped = false;BouncesRemaining = bounces;MaxBounceSpeed = bounceSpeed;}
}
public partial class FrameBasedAnimation : Window
{private readonly AnimationPlayer player = new AnimationPlayer();private readonly List<EllipseInfo> ellipses = new();private readonly Random rand = new Random();private double accelerationY = 0.1;private int minStartingSpeed = 1;private int maxStartingSpeed = 50;private double speedRatio = 0.1;private int minEllipses = 20;private int maxEllipses = 100;private int ellipseRadius = 10;public FrameBasedAnimation(){InitializeComponent();player.Duration = 8;       // 整个动画总时间(秒),自动清屏player.At(0).PlayGlobal(progress =>{if (ellipses.Count == 0){player.Stop();return;}double bottomLimit = canvas.Bounds.Height - ellipseRadius * 2 - 10;foreach (var info in ellipses){double top = Canvas.GetTop(info.Ellipse);// 弹跳逻辑if (info.HasStopped){if (info.BouncesRemaining > 0 && top >= bottomLimit){// 随机弹起info.VelocityY = -rand.NextDouble() * info.MaxBounceSpeed;info.BouncesRemaining--;info.HasStopped = false; // 重新开始运动}else{Canvas.SetTop(info.Ellipse, bottomLimit);info.VelocityY = 0;continue;}}double newTop = top + info.VelocityY;info.VelocityY += accelerationY;if (newTop >= bottomLimit){Canvas.SetTop(info.Ellipse, bottomLimit);info.HasStopped = true;}else{Canvas.SetTop(info.Ellipse, newTop);}}});player.AnimationCompleted += () =>{ellipses.Clear();canvas.Children.Clear();};}private void cmdStart_Clicked(object? sender, RoutedEventArgs e){ellipses.Clear();canvas.Children.Clear();int halfCanvasWidth = (int)canvas.Bounds.Width / 2;int ellipseCount = rand.Next(minEllipses, maxEllipses + 1);for (int i = 0; i < ellipseCount; i++){var ellipse = new Ellipse{Fill = Brushes.LimeGreen,Width = ellipseRadius,Height = ellipseRadius};Canvas.SetLeft(ellipse, halfCanvasWidth + rand.Next(-halfCanvasWidth, halfCanvasWidth));Canvas.SetTop(ellipse, 0);canvas.Children.Add(ellipse);var info = new EllipseInfo(ellipse,speedRatio * rand.Next(minStartingSpeed, maxStartingSpeed),rand.Next(0, 3), // 随机弹跳次数 0~2rand.Next(1,4) //随机反弹速度1~3);ellipses.Add(info);}player.Start();}private void cmdStop_Clicked(object? sender, RoutedEventArgs e){player.Stop();ellipses.Clear();canvas.Children.Clear();}
}

运行效果

image

 

http://www.hskmm.com/?act=detail&tid=33495

相关文章:

  • 01.Python自动获取小说工具
  • 2025 年换热器厂家最新推荐榜:聚焦不锈钢、钛、哈氏合金等多材质及列管式等多类型设备,精选优质厂商助力企业采购决策
  • 2025 年最新推荐砂浆厂家排行榜:聚焦多类型砂浆产品,助力采购方精准选优质供应商
  • 2025 年电缆桥架厂家最新推荐榜:涵盖不锈钢 / 铝合金 / 热镀锌等类型,精选高性能企业助力选购
  • h5直播源码,如何实现一个简易播放器? - 云豹科技
  • Docker中授权普通用户使用docker命令以及解决无权限访问/var/run/docker.sock错误
  • C# Avalonia 16- Animation- PathBasedAnimation
  • 2025年危险品运输公司权威推荐榜:安全高效,专业服务值得信赖!
  • 2025 年联轴器厂家最新推荐排行榜:聚焦万向、膜片、齿式等多类型产品,精选行业优质厂家
  • 2025 年换热器厂家最新推荐榜单:涵盖不锈钢钛哈氏合金等材质及列管式螺旋板等类型,为企业采购提供优质选择
  • 2025 年最新推荐!反应釜制造厂家榜单重磅发布,聚焦不锈钢钛合金哈氏合金等多类型设备优质厂商
  • 多模态、世界模型和主动智能丨Convo AIRTE2025
  • 2025年发电机组厂家推荐排行榜,柴油/燃气/船用/静音箱式/移动拖车/集装箱式/上柴/玉柴/潍柴/康明斯/沃尔沃/道依茨/帕金斯/MTU发电机组公司精选
  • 2025 防火隔断厂家最新推荐排行榜:甲级防火玻璃隔断厂家深度剖析,精选优质品牌助力采购决策
  • clickhouse数据库 数据插入 去重和覆盖
  • nacos客户端(接口调用者)如何感知被调用服务下线? (二)
  • 2025 水泥墩源头厂家最新推荐排行榜:光伏 / 交通 / 围挡等多品类优选,实力品牌权威榜单发布
  • 2025年鸡精生产线/高速混合机/WDG农药生产线/鸡粉干燥设备/海鲜精干燥设备厂家推荐排行榜,调味料干燥设备/全自动配料/螺带混合机优质品牌!
  • 2025 年过滤机厂家最新推荐排行榜:胶带式 / 盘式真空 / 脱水 / 带式真空 / 水平带式过滤机企业精选及选购指南
  • nacos客户端(接口调用者)如何感知被调用服务下线?(一)
  • 2025年防水织带/鞋垫/编织包/针织包/飞织包包/松紧带/鞋带/织带/飞织鞋面厂家推荐排行榜,品质与创新的完美结合!
  • 2025年压铸机械手厂家推荐排行榜,铝镁合金压铸周边自动化,压铸岛专业解决方案!
  • 在MySQL中 redolog undolog binlog 写入的场景,顺序
  • 2025年证卡打印机厂家权威推荐榜:含证件/PVC卡/IC卡/ID卡/智能卡,宝瑞迪/BOOD品牌优选!
  • 2025 年压滤机厂家最新推荐榜:隔膜 / 污泥 / 真空 / 板框 / 带式压滤机优质企业精选指南
  • 灵芯派(基于Debian系统)
  • 2025年大连网络营销推广/媒体投放/全案推广/新媒体营销/全媒体推广/代运营公司权威推荐榜
  • 2025年手持光谱仪/光谱分析仪/便携式光谱仪厂家推荐榜单,矿石/元素/合金/金属/贵金属分析仪器首选!
  • 字符串操作函数
  • 2025年法兰保护罩/阀门保温罩/法兰罩/法兰防溅罩/法兰保护套厂家推荐排行榜,专业防护与优质服务首选!