生活就是这么狗血——WPF粒子小记
今天看到了一篇博客,不应该说昨天,作者用了HTML5去实现,老实说本来不想凑热闹,可看了有位兄弟sandcu用SL实现了遍,不过感觉速度并不理想,想来这种粒子效果自己还未用WPF实现过,顺便看看WPF到底性能如何,随着手痒了下面的悲剧也发生了。
1.因为闲的慌,我看了Flash的效果比较好,于是直接拿了Flash的代码来改,结果浪费了N多时间在上面,Flash的Random是从0到1的小数C#里的是整数的,开始效果就是达不,到后来报错才知道,郁闷了半天。
2. 我是用WriteableBitmap这个类来实现坐标点颜色的写入,可老是说我数组越界,弄了半天才知道是row和colum和x,y坐标的关系弄错了,应该是row = y,x = colum.
3.想FPS检测更准确,于是把ETW Event Tracing in WPF中的东西直接抄过来,结果发现他在UAC状态下一定要管理员启动不说,在我的项目里面还不能用,只能自己山寨。
4.花我最长时间最后也没搞定的,我图像的背景不得不是黑色的,为什么?因为我不知道怎么换成其他的,就算是我把背景画了一遍可还是有黑色东西来干扰(见图一),似乎没有clear(color)类似这样基本的函数调用,总之我是没找到怎么设置背景色;上一次的东西也无法清除,我搞不懂为什么会变成黑色。SL倒是查到有篇可以清理,按照这种情况看可能SL的运行效率比WPF还要好?WPF团队早就在“淫光”中那乐不思蜀了。http://nokola.com/blog/post/2009/11/11/Best-Way-To-Clear-WriteableBitmap.aspx
5.除了精神上摧残外,肉体也让我受不了,房间内有嗡嗡的吵杂声让我几经崩溃,也找不到声音来源,怀疑是隔壁或是外面马路上的施工,忙了半天连澡都没戏。
小结:
虽然我坚信成功来源于坚持,可还是需要良道吉日的,感觉很费,早上还要上班,我的天啊。算了睡前安慰下,WPF的呈现速度还过的去,中间滚轮支持定点放大缩小,没怎么做用的是默认的,右键可以返回到原来的样子,其他的就是左键点住拖拖试试了。
附件下载:希望好心人能帮我解决下背景问题
______________________
后记:(原来附件还是有问题未修改)
感谢各位的支持,特别是地狱门神和Clingingboy。
1.确实如地狱门神所说,背景问题是由于我的Long类型超出界限,影响到其他的格子所致。修改如下既可
byte* pBackBuffer = (byte*)_writeableBitmap.BackBuffer;
// Find the address of the pixel to draw.
pBackBuffer += row * _writeableBitmap.BackBufferStride;
pBackBuffer += column * 4;
pBackBuffer[0] = color.B;
pBackBuffer[1] = color.G;
pBackBuffer[2] = color.R;
pBackBuffer[3] = color.A;
就是把_writeableBitmap.BackBuffer当成byte*来扫描,应该说是位图中的基本操作了,惭愧惭愧。
2.Clingingboy给我另一种思路,也可以说是换了另外一套API来实现,感觉比用指针操作还快而且还不需要把项目设成unsafe编译,这API应该可以用于SL。
这种方法是使用WritePixels这个方法来实现。我把他给我项目又修改了下,完全用这个方法还省却了自己的锁定和表示更新操作。
当然你也可以用两种方法一起来在操作,这样的话背景是图画也是可以的,如把图片的点保存为一个数组,WritePixels每次用这个数组当背景刷新,用指针操作来抒写Water点。
当然我这份是最简单的谁让我这么懒呢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述