抖音做我女朋友程序(.Net5 WPF 源码)
这串代码很简单。
加入了一些音效和简单的动画效果。
.net5的wpf版本跟以前.net framework编码方式没有任何区别。
简单说一下所用的一些技术吧。
检测鼠标进入事件
当鼠标进入放置至【想得美】按钮时,这个按钮进行移动。
//获取当前可用范围内高宽 var pH = (int)(panel.ActualHeight - btnNo.ActualHeight); var pW = (int)(panel.ActualWidth - btnNo.ActualWidth); //随机生成坐标 var y = rd.Next(pH); var x = rd.Next(pW); btnNo.SetValue(Canvas.TopProperty, (double)y); btnNo.SetValue(Canvas.LeftProperty, (double)x);
这样的话,几乎她是不可能点中这个按钮的。不是特完美,也有可能出现,随机位置与原有位置相重叠的情况。
WPF动画的支持是非常简单的,我便加了个动画上去。
readonly DoubleAnimation dh = new DoubleAnimation(); readonly DoubleAnimation dw = new DoubleAnimation(); private void btnNo_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { //获取当前可用范围内高宽 var pH = (int)(panel.ActualHeight - btnNo.ActualHeight); var pW = (int)(panel.ActualWidth - btnNo.ActualWidth); //随机生成坐标 var y = rd.Next(pH); var x = rd.Next(pW); //btnNo.SetValue(Canvas.TopProperty, (double)y); //btnNo.SetValue(Canvas.LeftProperty, (double)x); dh.From = (double)btnNo.GetValue(Canvas.TopProperty); dw.From = (double)btnNo.GetValue(Canvas.LeftProperty); dh.To = y; dw.To = x; btnNo.BeginAnimation(Canvas.LeftProperty, dw); btnNo.BeginAnimation(Canvas.TopProperty, dh); }
主要使用的便是 DoubleAnimation 这个类。当前也可以使用Blend绘制,个人觉得Blend会使得xaml代码很乱,便手写了几行。
.Net程序中资源文件的读取
点击 【好呀】 后,会有音乐声,所以有资源文件的嵌入。
using System;
using System.Reflection;
using System.Resources;
public class AssemblyResource
{
public static byte[] GetAccseeblyPic(Assembly assembly, string imgKey)
{
string[] names = assembly.GetManifestResourceNames();
byte[] dataByte = null;
foreach (string name in names)
{
using ResourceReader rr = new ResourceReader(assembly.GetManifestResourceStream(name));
try
{
rr.GetResourceData(imgKey, out _, out byte[] tmpByte);
dataByte = new byte[tmpByte.Length - 4];//去除多余的字节
Array.Copy(tmpByte, 4, dataByte, 0, dataByte.Length);
break;
}
catch
{
continue;
}
}
return dataByte;
}
/// <summary>
/// 获取当前程序集中的image
/// </summary>
/// <param name="imaKey">图片名字</param>
public static byte[] GetCurrentAccseeblyData(string imaKey)
{
return GetAccseeblyPic(Assembly.GetEntryAssembly(), imaKey);
}
}
上面红色代码部分有知道的原因的吗?可以说说。哈哈,很多年前分析头文件的代码了取资源的代码了,直到今天也没搞懂多出的4个字节是什么鬼。
本来是想做个单文件程序的,但是通过 dotnet publish -r win-x86 -c Release -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:PublishReadyToRun=true --self-contained true 此命令发布出来的程序(加上-p:IncludeNativeLibrariesForSelfExtract=true)却无法运行,看了一日志,说是运行时错误,就没深入下去了。年纪大了,懒的一逼。
音乐播放代码
var bytes = AssemblyResource.GetCurrentAccseeblyData("assests/ok.wav");
var ms = new MemoryStream(bytes);
var Audio = new SoundPlayer(ms);
Audio.Play();
窗体背景设置
<Window.Background> <ImageBrush ImageSource="/Assests/love.jpg"/> </Window.Background>
差不多了去这里下载源代码吧!或加Q群427121410 找群主
源码下载:https://download.csdn.net/download/jbltt/16636222