C# Avalonia 16- Animation- FrameBasedAnimation

news/2025/10/18 9:27:35/文章来源:https://www.cnblogs.com/dalgleish/p/19149211

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.mzph.cn/news/939382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01.Python自动获取小说工具

01.Python自动获取小说工具 ———————————————————————————————————————————————————————————————————————————无敌小马爱学习

2025 年换热器厂家最新推荐榜:聚焦不锈钢、钛、哈氏合金等多材质及列管式等多类型设备,精选优质厂商助力企业采购决策

一、换热器厂家推荐榜推荐一:江苏豪特换热设备制造有限公司 推荐指数:★★★★★ 口碑评分:9.9 分 品牌介绍:该公司是换热器及船用密封件领域的实力品牌,拥有 30000 平米厂房,配备 15 台不同吨位板式换热器专用超…

2025 年最新推荐砂浆厂家排行榜:聚焦多类型砂浆产品,助力采购方精准选优质供应商

当前建筑市场对砂浆的需求持续攀升,但行业乱象却给采购方带来诸多困扰。部分厂家为牟取暴利,在原材料上偷工减料,导致砂浆关键性能不达标,给建筑工程埋下安全隐患;一些厂家生产工艺落后、缺乏完善的质量管控体系,…

2025 年电缆桥架厂家最新推荐榜:涵盖不锈钢 / 铝合金 / 热镀锌等类型,精选高性能企业助力选购

在现代建筑电气、工业自动化及数据中心等领域,电缆桥架作为核心基础设施,对线缆安全运行至关重要。但当前行业乱象频发,部分厂家用劣质原材料生产,导致桥架易腐蚀、断裂,引发安全隐患;产品质量参差不齐且缺乏统一…

h5直播源码,如何实现一个简易播放器? - 云豹科技

h5直播源码,如何实现一个简易播放器?利用 html + js + css 实现一个播放器的简单功能我们在页面开发过程中会遇到,在页面中播放视频的需求。通常我们利用成熟的 视频播放插件来处理如: video.js 。但是,为了我们的…

Docker中授权普通用户使用docker命令以及解决无权限访问/var/run/docker.sock错误

让普通用户在Linux系统中使用Docker命令,通常需要解决权限问题,尤其是避免遇到无法访问 /var/run/docker.sock的错误。docker.sock是一个Unix套接字,Docker客户端使用它同Docker守护进程进行通信。默认情况下,这个…

完整教程:【Linux】操作系统的认识

完整教程:【Linux】操作系统的认识2025-10-18 09:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !imp…

C# Avalonia 16- Animation- PathBasedAnimation

C# Avalonia 16- Animation- PathBasedAnimation写一个辅助类PathHelper,用于将PathGeometry转换为对应离散的Point,用于路径追踪。using System; using System.Collections.Generic; using Avalonia; using Avaloni…

2025年危险品运输公司权威推荐榜:安全高效,专业服务值得信赖!

2025年危险品运输公司权威推荐榜:安全高效,专业服务值得信赖!随着全球化工产业的快速发展,危险品运输行业的需求也在不断增加。为了确保危险品在运输过程中的安全性与效率,选择一家专业的危险品运输公司显得尤为重…

2025 年联轴器厂家最新推荐排行榜:聚焦万向、膜片、齿式等多类型产品,精选行业优质厂家

在现代工业生产中,联轴器作为连接机械传动部件的核心组件,直接影响设备运行的稳定性与效率,广泛应用于冶金、矿山、石油化工等关键领域。当前市场上联轴器品牌数量众多,产品质量参差不齐,部分企业存在技术落后、售…

2025 年换热器厂家最新推荐榜单:涵盖不锈钢钛哈氏合金等材质及列管式螺旋板等类型,为企业采购提供优质选择

引言在化工、环保、制药、食品等众多关键行业中,换热器作为核心热能交换设备,其质量稳定性、热交换效率与节能性能,直接关系到企业生产流程的连续性、能源成本控制及生产安全合规性。当前换热器市场企业数量繁杂,部…

2025 年最新推荐!反应釜制造厂家榜单重磅发布,聚焦不锈钢钛合金哈氏合金等多类型设备优质厂商

一、反应釜制造企业推荐榜推荐一:江苏旭阳化工设备有限公司 推荐指数:★★★★★ 口碑评分:9.9 分 品牌介绍:创建于 2009 年,坐落于靖江经济技术开发区城南园区,是集研发、生产和进出口贸易于一体的高科技企业。…

多模态、世界模型和主动智能丨Convo AIRTE2025

多模态是从 LLM 到 AGI 的必经之路。从 AI 视频生成到可实时交互的世界模型,从被动响应到主动感知与交互,再到下一代多模态大模型的设计与构建——由商汤科技和 RTE 开发者社区联合出品的 「多模态技术专场」 将展望…

2025年发电机组厂家推荐排行榜,柴油/燃气/船用/静音箱式/移动拖车/集装箱式/上柴/玉柴/潍柴/康明斯/沃尔沃/道依茨/帕金斯/MTU发电机组公司精选

2025年发电机组厂家推荐排行榜:柴油/燃气/船用/静音箱式/移动拖车/集装箱式/上柴/玉柴/潍柴/康明斯/沃尔沃/道依茨/帕金斯/MTU发电机组公司精选随着能源需求的不断增长和技术的快速发展,发电机组在各行各业中的应用越…

2025 防火隔断厂家最新推荐排行榜:甲级防火玻璃隔断厂家深度剖析,精选优质品牌助力采购决策

随着建筑行业对消防安全的要求日益严苛,防火隔断作为保障建筑安全的核心设施,市场需求持续攀升,但行业乱象却让采购者陷入选择困境。部分品牌缺乏核心技术,产品耐火性能不达标,火灾时无法有效阻隔火势与有毒烟气;…

clickhouse数据库 数据插入 去重和覆盖

一、存在则忽略(只插入全新用户)from clickhouse_driver import Client import pandas as pd client = Client(host=localhost, port=9000, database=default)# 0) 待写入的新数据 df_new = pd.DataFrame({ user_id:…

nacos客户端(接口调用者)如何感知被调用服务下线? (二)

🧩 一、问题背景 场景: 你有两个微服务:order-service(调用方 / Consumer)product-service(被调用方 / Provider)当 product-service 的一个实例下线(比如机器宕机或应用关闭)时, order-service 要知道它已…

2025 水泥墩源头厂家最新推荐排行榜:光伏 / 交通 / 围挡等多品类优选,实力品牌权威榜单发布

水泥墩作为市政基建、光伏电站、交通防护等领域的核心基础建材,其质量直接关系到工程安全与使用寿命。当前市场中厂家数量繁杂,部分企业为逐利偷工减料,导致产品强度不足、尺寸偏差大,难以抵御恶劣环境;部分厂家工…

2025年鸡精生产线/高速混合机/WDG农药生产线/鸡粉干燥设备/海鲜精干燥设备厂家推荐排行榜,调味料干燥设备/全自动配料/螺带混合机优质品牌!

2025年鸡精生产线/高速混合机/WDG农药生产线/鸡粉干燥设备/海鲜精干燥设备厂家推荐排行榜,调味料干燥设备/全自动配料/螺带混合机优质品牌!随着食品加工和化工行业的快速发展,相关生产设备的需求也在不断增加。鸡精…

2025 年过滤机厂家最新推荐排行榜:胶带式 / 盘式真空 / 脱水 / 带式真空 / 水平带式过滤机企业精选及选购指南

在工业生产与环保处理领域,固液分离环节的效率与质量直接关乎企业生产进度、产品品质及环保合规性,而过滤机作为该环节的核心设备,其重要性不言而喻。当前过滤机市场品牌繁杂、产品质量参差不齐,部分设备存在过滤速…