抖音作我女友程序(.Net5 WPF 源碼)

這串代碼很簡單。動畫

加入了一些音效和簡單的動畫效果。編碼

.net5的wpf版本跟之前.net framework編碼方式沒有任何區別。spa

簡單說一下所用的一些技術吧。.net

 

檢測鼠標進入事件日誌

當鼠標進入放置至【想得美】按鈕時,這個按鈕進行移動。code

//獲取當前可用範圍內高寬
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);

這樣的話,幾乎她是不可能點中這個按鈕的。不是特完美,也有可能出現,隨機位置與原有位置相重疊的狀況。blog

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");
MemoryStream ms = new MemoryStream(bytes); Audio = new SoundPlayer(ms); Audio.Play();

 窗體背景設置

<Window.Background>
    <ImageBrush ImageSource="/Assests/love.jpg"/>
</Window.Background>

 

差很少了去這裏下載源代碼吧!或加Q羣427121410 找羣主

https://545c.com/d/24904474-42399455-40f79a(訪問密碼:6050)

相關文章
相關標籤/搜索