作者:jiuyueling | 来源:互联网 | 2023-09-17 18:13
这串代码很简单。加入了一些音效和简单的动画效果。.net5的wpf版本跟以前.netframework编码方式没有任何区别。简单说一下所用的一些技术吧。 检测鼠标进入事件当鼠标进入
这串代码很简单。
加入了一些音效和简单的动画效果。
.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;
}
///
/// 获取当前程序集中的image
///
/// 图片名字
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