WPF星空效果

效果

前阵子看到ay的蜘蛛网效果和知乎的登录页背景,觉得效果很酷.自己也想写一个.于是写着写着就变成这样了.少女梦幻的赶脚有木有.我这有着一颗少女心的抠脚大汉

实现思路

分为两个部分:

1.星星无休止的漫游.

2.星星之间的连线.

星星和连线非别放到两个容器里,以便分开操作.

星星

把星星的运动分解为X轴和Y轴两个不相干的运动,分别操作.操作就是随机生成一个速度,随机生成一个时间.运动完之后再随机生成一个速度,随机生成一个时间......无限循环.

星星的旋转也是同样的道理.

连线

首先解释下连线的规则.两个星星之间连线,每个星星都有一个连线的势力范围,就是宽度乘以连线倍率,这个连线倍率可以在窗体设置.当两个势力范围有交集的时候,就连线.

例:星1宽度5,星2宽度10,连线倍率是3,那么这两个星星的距离小于5*3+10*3=45时就连线,大于45时断开.如果连线倍率设置为4,则两个星星减的距离小于5*4+10*4=60时连线,大于60时断开.

实现与资源占有率

星星运动的实现有两种:

1.基于Grid和TranslateTransform.用DoubleAnimation动画控制星星的位移.

2.基于Canvas.通过帧动画控制Canvas的X,Y.

连线的实现也有两种:

1.简单粗暴.在每一帧都清空连线容器.然后双层循环星星,重新连接所有星星(符合连线规则的).

2.在每一帧循环连线,判断连线规则.符合就改变此连线的X1,Y1,X2,Y2.而不去重新new连线.不符合规则的就移除.然后依然是双层循环星星,看符合规则的两个星星间有没有连线,没有的就new一个.

众所周知,WPF做这种动画资源占有率还是比较高的,写了这么多实现,也是因为这个.

大体上还是基于Canvas的实现占用资源稍低.但也有个问题,如果给星星再加一个模糊效果的话,基于Canvas实现的资源占有率不会飙升,而是帧数明显降低.(也可能是我电脑环境的原因)

并不能说那种实现好与坏,可能具体运行环境不一样,参数设置不一样,每种实现都有不同的表现.

然后关于资源占有率问题,以我目前的水平,就只能到这了.博友们自己取舍吧.

源码下载:星空效果的两种实现.zip

时间: 2024-12-15 23:23:44

WPF星空效果的相关文章

C# WPF抽屉效果实现(C# WPF Material Design UI: Navigation Drawer & PopUp Menu)

原文:C# WPF抽屉效果实现(C# WPF Material Design UI: Navigation Drawer & PopUp Menu) 时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.WPF.ASP.NET Core等,亦有C++桌面相关的Qt Quick和Qt Widgets等,只分享自己熟悉的.自己会的. 一.先看效果: 二.本文

WPF钟表效果实现

WPF在样式定义和UI动画上面相对于以前的技术有了不少的提升,下面给出WPF技术实现钟表的效果: 1.Visual Studio新建一个WPF应用程序,命名为WpfClock,新建一个images文件夹,并准备一个钟表的背景图片和程序图标素材. 2.编辑MainWindow.xaml文件,对UI进行定制,代码如下(指针都是用Rectangle实现的,当然可以用图片代替): 1 <Window x:Class="WpfClock.MainWindow" 2 xmlns="

WPF 外发光效果

WPF的滤镜效果,目前框架自带的只有BlurEffect和DropShadowEffect两种.DropShadowEffect为投影效果,只能显示黑灰颜色的效果,如果想让一个边框达到别的颜色的滤镜效果,我们可以利用BlurEffect进行模糊处理实现.实现原理主要是用两个Border进行叠加,第一个Border进行背景色的模糊效果处理,第二个Border设置背景色.边框色以及叠加在第一个Border上面. 效果图: <Grid> <Border Background="#77

基于ESRIMAP的WPF地图效果

>基于ESRI开放的WPF地图组件进行开发 >支持地图的触控技术 >大屏宏观地图展示 >加载标准的切片图层 >加载标准的WMS图层 >WPF透明浮动操控按钮,实现地图操作                                   (OSM二维矢量地图加载) (谷歌卫星地图加载)

星空添加星星效果

private var starNum:int = 100; //星星数量 private var scene_width:int=1440; //星星的舞台范围 private var scene_height:int=500; //星星的舞台范围 //星空效果 动态添加星星 for(var j:int = 0;j < starNum;j++){ var McClass2:Class = loadClassDefinition("star"); var mcstart:Movi

WPF学习之绘图和动画

如今的软件市场,竞争已经进入白热化阶段,功能强.运算快.界面友好.Bug少.价格低都已经成为了必备条件.这还不算完,随着计算机的多媒体功能越来越强,软件的界面是否色彩亮丽.是否能通过动画.3D等效果是否吸引用户的眼球也已经成为衡量软件的标准. 软件项目成功的三个要素是:资源.成本.时间.无论是为了在竞争中保持不败还是为了激发起用户对软件的兴趣,提高软件界面的美化程度.恰当的将动画和3D等效果引入应用程序都是一个必然趋势.然而使用传统的桌面应用程序开发工具和框架(如Winform.MFC.VB.D

【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/core-static-files.html http://www.yuanjiaocheng.net/ASPNET-CORE/setup-mvc.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-design-pattern.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-routing.html h

用JS写出星空

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>星空效果_www.jb51.net</ti

WPF绘画和动画(原文:http://blog.csdn.net/fwj380891124/article/details/8177125 )

1.1   WPF绘图 与传统的.net开发使用GDI+进行绘图不同,WPF拥有自己的一套绘图API.使用这套API不但可以轻松绘制出精美的图形,还可以为各种图形添加类似与PhotoShop的"滤镜效果"及"变形效果".本节我们就一起研究WPF图形API绘图,效果和变形等功能. 先观察下面一组图片: 显然,这组图片是矢量图(Vector Image),无论怎样放大缩小都不会出现锯齿.你可能会想:"这是组PNG格式的图片吗?"答案是"NO