1、WIN2D学习记录(win2d实现JS雨天效果)
一、Win2D
Win2D是微软开源的项目
它的github地址是 https://github.com/Microsoft/Win2D
里面有详细的文档 http://microsoft.github.io/Win2D/html/Introduction.htm
大量Sample https://github.com/Microsoft/Win2D-samples
二、运用
1、上手win2d十分快,在nuget下载安装相应win2d插件即可使用了。
2、win2d里面有canvasControl ,CanvasAnimatedControl等实用的控件。
3、大量不懂的可以看Sample里面的代码。
三、例子
去年实习的时候,看过js实现下雨天的效果( https://github.com/maroslaw/rainyday.js ),所以一直想自己按照js的思路用C#实现一遍,win2d正好的适用。
最后是基本实现了效果,还有好多可以扩展优化的(其中几个效果会卡)。
1、实现背景高斯模糊
blurEffect = new GaussianBlurEffect()
{
Source = imgbackground,
BlurAmount = 4.0f,
BorderMode = EffectBorderMode.Soft
};
2、加载背景
imgbackground = await CanvasBitmap.LoadAsync(sender, imgPath, defaultDpi);
3、玻璃准备
glassSurface = new CanvasRenderTarget(sender, imgW, imgH, defaultDpi);
4、画不同形状的雨滴
/// <summary>
/// Draws a raindrop on canvas at the current position.
/// </summary>
public void Draw(RainyDay rainyday, CanvasDrawingSession context)
{
float orgR = r;
r = 0.95f * r;
if (r < )
{
clipGeo = CanvasGeometry.CreateCircle(context, new Vector2(x, y), r);
}
else if (colliding != null || yspeed > )
{
if (colliding != null)
{
var collider = colliding;
r = 1.001f * (r > collider.r ? r : collider.r);
x += (collider.x - x);
colliding = null;
}
float yr = + 0.1f * yspeed;
using (CanvasPathBuilder path = new CanvasPathBuilder(context))
{
path.BeginFigure(x - r / yr, y);
path.AddCubicBezier(new Vector2(x - r, y - r * ), new Vector2(x + r, y - r * ), new Vector2(x + r / yr, y));
path.AddCubicBezier(new Vector2(x + r, y + yr * r), new Vector2(x - r, y + yr * r), new Vector2(x - r / yr, y));
path.EndFigure(CanvasFigureLoop.Closed);
clipGeo = CanvasGeometry.CreatePath(path);
}
}
else
{
clipGeo = CanvasGeometry.CreateCircle(context, new Vector2(x, y), 0.9f * r);
}
r = orgR;
if (rainyday.Reflection != null)
{
using (context.CreateLayer(, clipGeo))
{
rainyday.Reflection(context, this);
}
}
if (clipGeo != null)
{
clipGeo.Dispose();
}
}
5、清除某个矩形区域
context.Blend = CanvasBlend.Copy;
context.FillRectangle(x - r - , y - r - , * r + , * r + , Colors.Transparent);
context.Blend = CanvasBlend.SourceOver;
6、UWP全屏设置
private void btnFullScreen_IsChecked(object sender, RoutedEventArgs e)
{
if (btnFullScreen.IsChecked==true)
{
ApplicationView.TryUnsnapToFullscreen(); ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
toolSP.Visibility = Visibility.Collapsed;
}
else
{
ApplicationView.GetForCurrentView().ExitFullScreenMode();
toolSP.Visibility = Visibility.Visible;
}
}
四、实现效果动图
图一:

图2:(全屏)

实现源码:https://github.com/Neilxzn/RainDayForUAP
完成这个例子还是挺爽的。继续努力,学多点,看多点
1、WIN2D学习记录(win2d实现JS雨天效果)的更多相关文章
- DWZ学习记录--关闭loading效果
修改文件:jquery-1.7.1.js 查找内容:7142行 ajaxSettings: { 修改内容:global: true=>global: false修改目的:关闭loading效果
- D3.js学习记录【转】【新】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 我的three.js学习记录(二)
通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...
- 我的three.js学习记录(三)
此次的亮点不是three.js的3d部分,而是通过调用摄像头然后通过摄像头的图像变化进行简单的判断后进行一些操作.上篇中我通过简单的示例分析来学习three.js,这次是通过上一篇的一些代码来与摄像头 ...
- Node.js权威指南学习记录
学习nodeJS权威指南的学习记录 导航: 1.console模块 2.全局变量 3.Buffer对象 4.事件对象 5.网络请求 6.文件操作对象 一. COMMON.js的学习.(commonJS ...
- JS继续学习记录(一)
JS继续学习记录(一) 总感觉自己的js code写的还算可以,但是又深知好像只知道一些皮毛,所以打算仔细记录一下js晋级学习过程,日日往复 先记录一下自己目前对js的了解吧(20180828) js ...
- vue.js学习记录
vue.js学习记录 文章已同步我的github笔记https://github.com/ymblog/blog,欢迎大家加star~~ vue实例 生命周期 beforeCreate:不能访问thi ...
- JS正则表达式学习记录
JS:正则表达式学习记录 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- 我的学习笔记之node----node.js+socket.io实时聊天(1) (谨此纪念博客开篇)
本想着从hello word开篇,也确实写了相关学习笔记.各种原因吧,现在又着急写出作品,便作罢. 这里将记录一个node.js+socket.io的实时聊天程序.(当然我也是跟着网上各种教程资料学习 ...
随机推荐
- linux下与windows下的换行符
[原文有些许错误,已作了修改] 回车符号和换行符号产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传 ...
- gulp 安装笔记
1.全局安装cnpm(淘宝的npm国内镜像),gulp,rimraf(卸载用插件)npm install -g cnpm --registry=https://registry.npm.taobao. ...
- an interview question(4)
版权声明:本文为博主原创文章,未经博主允许不得转载. 写这篇博客前请让博主先吐糟下自己的PC. i3+2G内存+开了一上午=C盘剩下0字节+打开VS2012花了半个小时+一晚上的心情不好 吐槽完PC, ...
- Redis使用及优化入门
Redis的优势 MySQL读写慢,Redis内存数据库,读写速度快. 少量的数据要经常读写,尤其是读操作,读写速度要求高. 丰富的数据结构,Redis支持5种数据结构,MySQL字段变化,需要手动维 ...
- eclipse rcp 打包出适合不同操作系统和操作位数.
http://blog.csdn.net/luoww1/article/details/8677999 http://blog.csdn.net/soszou/article/details/8053 ...
- jQuery正则的使用方法步骤详解
本文主要和大家分享的就是jQuery学习中正则的使用,正则在jquery里面并没有比javascript多哪些知识,基本上是一样的,只是选择器更好了一点,一起来看看吧. 基础正则 1.正则表达式的创建 ...
- 推荐6款常用的Java开源报表制作工具
JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表.JasperReports 支持PDF.HTML.XLS.CSV和XML文件输出格 ...
- Scrapy爬虫导图(持续完善中)
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.
- c#数据绑定(2)——删除DataTable的数据
文/嶽永鹏 c#数据绑定(1)中,简要的通过代码应用了DataTable,DataTableColumns,DataTableRow类,通过UI界面的Textbox向DataTable中添加数据然后响 ...
- 转载:《TypeScript 中文入门教程》
缘由 事情是这样的,我想搜索 TypeScript 中文教程,结果在 https://www.baidu.com , https://cn.bing.com ,上都找不到官方的翻译,也没有一个像样的翻 ...