Dotnet Core 跨平台GUI 开发实践
2021-06-03 18:06
标签:工具 2-2 引擎 sharp ken mono ++ seve 细节 这一切都要从一只蝙蝠说起。。。。。。 实现了跨平台的 GUI开发(基于2D图形引擎) 实现了跨平台的多媒体开发(图中播放mp3 和 ogg) LINUX代表 Ubuntu(条件有限,只能虚拟机了) MACOS代表 IMAC 以及WINDOWS代表 这三个平台运行的都是这个 一个 mp3 和 ogg的播放器 还有一个NES模拟器 wsad 上下左右 jk是 AB op 是select 和start 这些都不需要复杂的配置,装好dotnet,拉下仓库, 一条dotnet run 就可以跑起来 仓库在 https://gitee.com/lightsever/fakenes 为什么要做这样一个东西呢,还得从一只蝙蝠说起。。。。。。 嗯嗯,跑远了,出发点是因为自从转向.netcore技术栈以后,总是缺一块,如鲠在喉。对了,就是GUI与多媒体开发。 在.net 时代,windows上有winform,wpf linux macos上有mono 携带gtk# 但是毕竟还是完全割裂的两家人。 .netcore解决了根本的执行环境的统一,可是在图形多媒体这一块始终缺一点。 而我,始终很在意跨平台这个问题。 想写一个工具,所有平台都能用,要么electron方案,但是毕竟js还是没有c#的生产力。 c#方案官方还是没有一套统一的机制 怎么办,要说咱可是20年前就接触c++了,虽说c#圈子里没有这样一个全覆盖的方案,c++那边可是成群啊。 所以,我只要选择一个,提供了最基础最基础的功能的,保证他的跨平台,用c# p/invoke 去调用他的API,实现各个平台一套代码,一字不改。 要构建一个多媒体GUI系统需要三个功能 1.窗口管理 2.绘图功能 3.声音系统 这方面广为人知的系统有两个,一个OpenTK,一个SDL,都非常有名气而且还古老。 他们都能完全覆盖我的需求,经过简单的比较,我毫不犹豫放弃了OpenTK 因为OpenTK的实现太复杂了,而且在每个平台都有一些不同的实现,而且声音播放基于OPENAL,这玩意在windows下都不能带个dll就跑,还得安装,pass,pass. OpenTK的优点只有OpenGL的兼容非常好。 而SDL就非常的干净了,主库SDL2 1.有窗口管理 2.只有非常简单的2D绘图功能 3.声音系统也只有简单的向声音设备写流数据 但是,他确实实现了,各个平台一套完全一致的代码。 所以,后面的问题只需要我们调试好SDL2的c#包装。 说是只需要,可是我还是调了很久。。。 尤其是macos的SDL2动态库生成,真的是折腾了一阵子。 索性,现在这些你都不用操心了,我全都把他们搞好了 然后,我写了一个小霸王风格的UI系统, 可以看到还在开发中,只要能画像素,这些都不是问题 需要3D绘图 OPENGL的接口还得另绑,不过我本来定位就不打算搞3D 有窗口管理和事件,有绘图,基于他实现一个UI系统该有的都有了 SDL主库不具备图片解码器,不能加载图片,要加载图片有个SDL2_Image库,但是折腾跨平台编译、绑定真的很烦躁,所以我决定上层功能全部使用pure c#实现,目前还没实现 不过这里有一个我曾经用过的 https://github.com/SixLabors/ImageSharp 这个库,质量很高,基本不用动手 目前我支持了加载ogg 和 mp3格式的音乐 ogg用了我以前修改过的 nVorbis ,这是谁照着官方c代码翻得,质量挺高,我原来搞Unity中实时播放音乐时稍微改了改就能用了,这次直接搬过来了 Mp3我用了mp3sharp的50%代码,这个库的品质太差,是java 翻c#,一堆bug,我花了大力气,才让mp3正常播放出来,现在mp3读取写的比较清晰了,实际还需要再重构一下。 好了,我们已经解决了开发dotnetcore 跨平台 多媒体程序开发的问题。 还有两件事 写代码 dotnet run Dotnet Core 跨平台GUI 开发实践 标签:工具 2-2 引擎 sharp ken mono ++ seve 细节 原文地址:https://www.cnblogs.com/crazylights/p/12347294.html有图有真相
细节分析
UI与绘图
加载图片的问题
加载音乐的问题
文章标题:Dotnet Core 跨平台GUI 开发实践
文章链接:http://soscw.com/index.php/essay/90113.html