SkiaSharp 之 WPF 自绘弹跳球(案例版)

熟悉下SkiaSharp的基础操作,这次搞个弹跳球效果,实现后,发现效果还真不错。

大概效果如下:

5ca6c1b82ff2b1f7a20d4859056daea8.png

原理分析

先是实现了网格效果,这个比较简单,直接横线,竖线,就OK了。

另外一个就是随机一个圆形,我这边随机了一百个,初始位置大致都一样,但是,每个方向角度随机,颜色随机,移动速度随机。

然后,它们移动起来,遇到了墙壁就会自动回弹回去,形成了不错的视觉效果。

Wpf 和 SkiaSharp

新建一个WPF项目,然后,Nuget包即可 要添加Nuget包

Install-Package SkiaSharp.Views.WPF -Version 2.88.0

其中核心逻辑是这部分,会以我设置的60FPS来刷新当前的画板。

skContainer.PaintSurface += SkContainer_PaintSurface;
_ = Task.Run(() =>
{while (true){try{Dispatcher.Invoke(() =>{skContainer.InvalidateVisual();});_ = SpinWait.SpinUntil(() => false, 1000 / 60);//每秒60帧}catch{break;}}
});

实现代码的圆形逻辑

/// <summary>
/// 圆圈
/// </summary>
internal class Circles
{private Random r = new Random();public Circles(){VelocityX = GetRandom(0, 3);VelocityY = GetRandom(0, 3);Radius = GetRandom(0, 50);Color = new SKColor((byte)r.Next(0, 255), (byte)r.Next(0, 255), (byte)r.Next(0, 255));}public float X { get; set; } = 100;public float Y { get; set; } = 100;public float VelocityX { get; set; }public float VelocityY { get; set; }public float Radius { get; set; }public SKColor Color { get; set; }public float GetRandom(int min, int max){var result = r.Next(min * 100, max * 100);return (float)(result / 100.0);}
}

圆形的移动逻辑

/// <summary>
/// 调整位置
/// </summary>
public void AdjustPosition(SKCanvas canvas, SKTypeface Font, int Width, int Height)
{foreach (var circle in circles){using var paint = new SKPaint{Color = circle.Color,Style = SKPaintStyle.Fill,IsAntialias = true,StrokeWidth = 1};canvas.DrawCircle(circle.X, circle.Y, circle.Radius, paint);if (circle.X + circle.VelocityX + circle.Radius > Width || circle.X + circle.VelocityX - circle.Radius < 0){circle.VelocityX = -circle.VelocityX;}if (circle.Y + circle.VelocityY + circle.Radius > Height || circle.Y + circle.VelocityY - circle.Radius < 0){circle.VelocityY = -circle.VelocityY;}circle.X += circle.VelocityX;circle.Y += circle.VelocityY;}
}

实现网格的逻辑

/// <summary>
/// 画格子
/// </summary>
public void DrawGrid(SKCanvas canvas, SKColor sKColor, int Width, int Height, int StepX, int StepY)
{using var paint = new SKPaint{Color = sKColor,Style = SKPaintStyle.Stroke,StrokeWidth = 0.5f,IsStroke = true,IsAntialias = true};for (var i = 0.5; i < Width; i += StepX){var path = new SKPath();path.MoveTo((float)i, 0);path.LineTo((float)i, Height);path.Close();canvas.DrawPath(path, paint);}for (var i = 0.5; i < Height; i += StepY){var path = new SKPath();path.MoveTo(0, (float)i);path.LineTo(Width, (float)i);path.Close();canvas.DrawPath(path, paint);}
}
}

效果

2b74844a8a25d0a761bb94bda7d83c07.gif

看着效果还是真不错。

总结

这个案例搞定,下一次,想想做个啥案例好点。

代码地址

https://github.com/kesshei/BouncingBallsDemo.git

https://gitee.com/kesshei/BouncingBallsDemo.git

一键三连呦!,感谢大佬的支持,您的支持就是我的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284606.shtml

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

相关文章

Windows11 发布更新 Insider Preview Build 22000.100

微软今天凌晨向开发频道中的所有用户发布Windows 11 Insider Preview Build 22000.100&#xff01; 变化和改进 我们已经开始在 Dev Channel 中将 Chat 从 Microsoft Teams 推广到 Insiders。不是每个人都会马上看到&#xff0c;任务栏右下方的隐藏图标弹出窗口已更新&#x…

常见RGB格式

计算机世界中&#xff0c;最终对于颜色和画面的显示&#xff0c;更多的采用的是RGB模式&#xff0c;这里记录一下常见的RGB格式。任何计算机设备以及智能终端等&#xff0c;呈现在我们眼前的色彩实际上便是红绿蓝三基色不同的组合&#xff0c;RGB实际上就是三基色的组合&#x…

《ASP.NET Core 6框架揭秘》实例演示[04]:自定义依赖注入框架

ASP.NET Core框架建立在一个依赖注入框架之上&#xff0c;已注入的方式消费服务已经成为了ASP.NET Core基本的编程模式。为了使读者能够更好地理解原生的注入框架框架&#xff0c;我按照类似的设计创建了一个简易版本的依赖注入框架&#xff0c;并它命名为“Cat”。本篇提供的四…

【QGIS入门实战精品教程】4.8:QGIS如何下载SRTM数字高程模型DEM?

本文讲解QGIS中下载SRTM数字高程模型DEM,以黑龙江省塔河县为例。 图幅效果: 最终效果: 文章目录 1. 下载安装STRM Download插件2. 加载矢量数据,读取范围3. 下载STRM4. DEM拼接5. DEM裁剪1. 下载安装STRM Download插件 点击【插件】→【管理并安装插件】。 在搜索框中输入…

Win11 恢复设置Win10任务栏、快速启动栏及右键菜单(Win11 22000.100版本测试通过)

恢复方法 按下边路径添加 UndockingDisabled项&#xff0c;DWORD (32-bit)值为1&#xff1a; [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell\Update\Packages] "UndockingDisabled"dword:00000001显示效果 已知问题 开始按钮点击无反应&a…

vue vue-router vuex element-ui axios 写一个代理平台的学习笔记(十一)构思商品页面...

在写商品页面product.vue之前&#xff0c;我应该思考一下&#xff0c;商品页面要实现那些功能&#xff0c;该不如布局&#xff1f;要实现的功能 1、所有商品列表的展示2、分类商品的列表展示 3、搜索商品或得列表展示4、单一商品的详细页面5、商品列表分页功能6、还没想到的...…

【ArcGIS Pro微课1000例】0019:ArcGIS Pro从海洋的视角看世界---海洋投影(Spilhaus Projection)

从海洋的视角看世界: 世界地图大多是以陆地为主要载体,如果以海洋为主角,就需要使用一种海洋投影。该投影以Spilhaus博士的名称命名。ArcGIS Pro自2.5版本以来提供了Spilhaus Projection。 投影效果预览: 接下来演示ArcGIS Pro 2.8中海洋投影的转换方法: 1. 新建一个工程…

有人撸了个网页版win11,惊艳!

演示地址&#xff1a;https://win11.blueedge.me/ Github地址&#xff1a;https://github.com/blueedgetechno/windows11

Vue3+.NET6+C#10,最近优质前后端分离项目汇总

据说80%的WEB开发都是管理后台&#xff0c;一套开源的优秀管理后台开发模板堪称福音&#xff01;分享一套Vue3 Axios TS Vite Element Plus .NET 6 WebAPI JWT SqlSugar的前后端分离架构的通用管理后台源码数据库脚本&#xff0c;还有与之配套录制的一组视频教程&#xff0c;全…

C++ 对象的内 存布局(下)

原文地址&#xff1a;http://blog.csdn.net/haoel/article/details/3081385 (注:看本文的时候由于宿舍快断电了,来不及细看,所以怕自己忘记,先贴出来.不排除文章有错误,大家自己测试一下.) 重复继承 下面我们再来看看&#xff0c;发生重复继承的情况。所谓重复继承&#xff0c;…

【GIS风暴】一文彻底弄懂数字地形(DEM、DOM、TDOM、DSM)的区别与联系

在2021自然资源部发布的《实景三维中国建设技术大纲(2021版)》中,空间数据部分包括“数字高程模型(DEM)、数字表面模型(DSM)、数字正射影像(DOM)、真正射影像(TDOM)、倾斜摄影三维模型、激光点云等。” 那么到底什么是DEM、DOM、TDOM、DSM,它们之间又有什么用的区别…

什么是“异步 Request-Reply”模式?编程如何实现?

在某些情况下&#xff0c;WEB API 可能需要很长时间来处理请求&#xff0c;而客户端如果一直等待工作完成是不可行的&#xff0c;比如连接超时等。这时&#xff0c;可以使用“异步 Request-Reply 模式”。异步 Request-Reply 模式异步 Request-Reply 模式是指&#xff1a;在后端…

【测绘程序设计】Excel度分秒(° ‘ “)转换度(°)模板附代码超实用版

在实际工作中,无论是ArcGIS中,还是CASS中,作图时需要将GPS实测的经纬度度分秒( ’ ")坐标转换为度(),在前面的文章中介绍了C#中将度分秒转为度的转换程序,本文讲解在Excel中快速度分秒( ’ ")转换度(),提高工作效率。 文章目录 准备工作编写代码注意事…

IO扩展控件(System.IO.Abstractions)

刚看到这个Namespace的时候还以为是.Net Framework里自带的包&#xff0c;结果查了一圈无任何结果。果断上Github搜索&#xff0c;一击即中 https://github.com/tathamoddie/System.IO.Abstractions先翻译下开发者给出的简单说明&#xff0c;今后再慢慢使用类似于System.Web.Ab…

[转]面向对象(1、三大特征;2、六大原则)

目录 一、面向对象的概述&#xff1a; 二、封装&#xff1a; 1、封装概述 2、封装原则 3、封装好处 4、封装坏处 5、封装代码展示 三、继承&#xff1a; 1、概念&#xff1a; 2、实现格式&#xff1a; 3、特点&#xff1a; 4、好处&#xff1a; 5、弊端&#xff1…

【测绘程序设计】C#将度分秒(° ‘ “)转换度(°)程序实现(附源码)

在实际工作中,无论是ArcGIS中,还是CASS中,作图时需要将GPS实测的经纬度度分秒( ’ ")坐标转换为度(),在前面的文章中介绍了Excel中将度分秒转为度的转换程序,本文讲解在Visual Studio中,采用C#语言实现快速度分秒( ’ ")转换度(),提高工作效率。 案例…

Spotlight监控工具使用

Spotlight on unix监控linux服务器 1.下载安装&#xff0c;工具包下载地址&#xff1a; 注&#xff1a;安装之后需要破解注册码 2.由于spotlight不能默认使用root用户登录&#xff0c;所以必须先创建一个具有root权限的用户 注&#xff1a;密码最好不要设置的过于简单化 [rootm…

Grpc MagicOnion库 之 客户端和服务端 (案例版)

之前通过自己写动态代理和用现成的动态代理库等实现过RPC功能&#xff0c;今天&#xff0c;就写一下如何直接引用GRPC的库来实现业务逻辑。gRPC的介绍&#xff0c;之前我也说了这个g的含义太多&#xff0c;也包含谷歌的意思了。可以看这个gRPC的文档介绍 : https://grpc.io/doc…

Windows11右下角出现评估副本水印如何去除?

Universal Watermark Disabler是一款十分好用的桌面工具&#xff0c;这款工具可以帮助用户轻松的去除Windows11 版本的操作系统右下角的水印。 使用方法 1、打开Universal Watermark Disabler软件&#xff0c;显示出当前系统的版本与水印状态。 2、Status中显示Ready for insta…

【GlobalMapper精品教程】001:GlobalMapper23+24 Pro-x64中文安装教程(附软件包下载)

Global Mapper 23是一款非常专业的地图绘制软件&#xff0c;功能非常的丰富&#xff0c;内置距离和面积计算&#xff0c;包括光栅混合、对比度调节、海拔高度查询、视线计算以及一些高级功能&#xff0c;可轻松实现图像校正、通过地表数据进行轮廓生成、通过地表数据观察分水岭…