热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

抖音做我女朋友程序(.Net5WPF源码)

这串代码很简单。加入了一些音效和简单的动画效果。.net5的wpf版本跟以前.netframework编码方式没有任何区别。简单说一下所用的一些技术吧。 检测鼠标进入事件当鼠标进入

抖音做我女朋友程序(.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;
    }

    /// 
    /// 获取当前程序集中的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


推荐阅读
author-avatar
jiuyueling
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有