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.pswp.cn/news/284606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284606.shtml
英文地址,請注明出處:http://en.pswp.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…

django源碼簡析——后臺程序入口

django源碼簡析——后臺程序入口 這一年一直在用云筆記&#xff0c;平時記錄一些tips或者問題很方便&#xff0c;所以也就不再用博客進行記錄&#xff0c;還是想把最近學習到的一些東西和大家作以分享&#xff0c;也能夠對自己做一個總結。工作中主要基于django框架&#xff0c…

【BIM入門實戰】最新《建筑制圖與識圖》復習題帶參考答案(一)

文章目錄 一、單選題二、填空題三、簡答題四、繪圖題五、閱讀總平面圖,完成問題一、單選題 1.在圖紙右下角用以說明設計單位、圖名、設計負責人等內容的表格為(B )。 A. 會簽欄 B. 圖標 C. 圖框 D. 圖紙目錄 2.正面投影與側面投影應保持( C )的關系。 A.長度相等且對正…

yum安裝openoffice

安裝方法如下&#xff1a;1、首先安裝openoffice.org套件yum groupinstall "Office/Productivity" 安裝好后&#xff0c;由于采用默認安裝&#xff0c;語言是英文&#xff0c;我可以通過以下方法來查找來安裝中文語言包。yum list openoffice* ....openoffice.org-la…

常見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…

Redis數據類型應用場景及具體方法總結

StringsStrings 數據結構是簡單的key-value類型&#xff0c;value其實不僅是String&#xff0c;也可以是數字。使用Strings類型&#xff0c;你可以完全實現目前 Memcached 的功能&#xff0c;并且效率更高。還可以享受Redis的定時持久化&#xff0c;操作日志及 Replication等功…

幾種距離的計算

http://www.tinysoft.com.cn/TSDN/HelpDoc/display.tsl?id12831 http://www.3566t.com/news/kvqa/1172028.html轉載于:https://www.cnblogs.com/wangduo/p/5526003.html

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;全…

九九乘法表

問題描述&#xff1a;打印乘法表如圖&#xff1a;1*112*12 2*243*13 3*26 3*394*14 4*28 4*312 4*4165*15 5*210 5*315 5*420 5*5256*16 6*212 6*318 6*424 6*530 6*6367*17 7*214 7*321 7*428 7*535 7*642 7…

C++ 對象的內 存布局(下)

原文地址&#xff1a;http://blog.csdn.net/haoel/article/details/3081385 (注:看本文的時候由于宿舍快斷電了,來不及細看,所以怕自己忘記,先貼出來.不排除文章有錯誤,大家自己測試一下.) 重復繼承 下面我們再來看看&#xff0c;發生重復繼承的情況。所謂重復繼承&#xff0c;…

用python快速合并代碼(方便軟著申請)

Title: This is a file for …… Author: JackieZheng Date: 2021-09-08 09:43:58 LastEditTime: 2021-09-08 21:14:22 LastEditors: Please set LastEditors Description: FilePath: \\pythonCode\\mergeCodeFile.py import os# 允許提取的文件類型 include_file_types[.php,…

【GIS風暴】一文徹底弄懂數字地形(DEM、DOM、TDOM、DSM)的區別與聯系

在2021自然資源部發布的《實景三維中國建設技術大綱(2021版)》中,空間數據部分包括“數字高程模型(DEM)、數字表面模型(DSM)、數字正射影像(DOM)、真正射影像(TDOM)、傾斜攝影三維模型、激光點云等。” 那么到底什么是DEM、DOM、TDOM、DSM,它們之間又有什么用的區別…

na+mb與gcd

蒜頭君和花椰妹在玩一個游戲&#xff0c;他們在地上將 nn 顆石子排成一排&#xff0c;編號為 11 到 nn。開始時&#xff0c;蒜頭君隨機取出了 22 顆石子扔掉&#xff0c;假設蒜頭君取出的 22 顆石子的編號為 aa, bb。游戲規則如下&#xff0c;蒜頭君和花椰妹 22 人輪流取石子&a…

什么是“異步 Request-Reply”模式?編程如何實現?

在某些情況下&#xff0c;WEB API 可能需要很長時間來處理請求&#xff0c;而客戶端如果一直等待工作完成是不可行的&#xff0c;比如連接超時等。這時&#xff0c;可以使用“異步 Request-Reply 模式”。異步 Request-Reply 模式異步 Request-Reply 模式是指&#xff1a;在后端…