1 前言
本文主要分享登錄器的簡要開發過程,只適合小白選手,高手請自動避讓。
此項目是復刻大沖鋒計劃中的子集。
(注:大沖鋒是迅雷代理的一款次時代多職業第一人稱FPS射擊游戲,目前已經關服嗝屁。)
2 效果展示
3 技術選型
本文選用c#語言,WPF框架來開發游戲登錄器,考量的原因:
-
大量的unity開發人員,普遍熟悉c#、dotNet、WPF技術棧,用起來輕車熟路,成本低
-
由于Win7系統自帶.NET 3.5、Win8系統自帶 .NET 4.0,所以可以覆蓋絕大多數目標平臺
-
WPF技術成熟,案例多,相關資料豐富
4 設計
4.1 功能拆分
主要分為三大塊
UI表現
啟動游戲
登陸校驗
本文限于時間和篇幅,重點介紹UI表現部分,關于登陸校驗和啟動游戲,只使用本地邏輯進行簡單的模擬示意。
4.2 素材準備
在大沖鋒登錄器目錄下,可以發現圖片素材和布局素材,我們只取用圖片素材如下:
5 窗體
5.1 實現異形窗體
WPF實現不規則窗體的方法有好幾種,比如使用blend繪制,比如使用path進行clip。有興趣的請自行搜索擴展了解。
本文選擇一個比較傻瓜的方式:使用透明背景的png圖片。
窗體xaml實現如下:
<Window x:Class="FCLoginMain.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:FCLoginMain"mc:Ignorable="d"Title="迅雷游戲登錄器-大沖鋒" Height="673" Width="950" AllowsTransparency="True" WindowStyle="None" OpacityMask="White" Background="Transparent" Icon="pack://siteoforigin:,,,/img/FCLoginMain.ico">
</Window>
重點是窗體的幾個屬性設置:
AllowsTransparency=“True” - 允許透明
WindowStyle=“None” - 去掉邊框
OpacityMask=“White” - 設置白色透明
Background=“Transparent” - 設置背景透明
5.2 實現窗體拖動
為Gird訂閱MouseLeftButtonDown事件:
<Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown"><Image Stretch="Fill" Source="pack://siteoforigin:,,,/img/big_bkg.png"/>
</Grid>
代碼中對MouseLeftButtonDown事件進行處理:
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{//實現窗體拖動this.DragMove();
}
5.3 最小化按鈕和關閉按鈕
這個功能很簡單,直接看代碼:
/// <summary>
/// 窗體最小化按鈕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMinimized_Click(object sender, RoutedEventArgs e)
{this.WindowState = WindowState.Minimized;
}
/// <summary>
/// 窗體關閉按鈕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnClose_Click(object sender, RoutedEventArgs e)
{Environment.Exit(0);//this.Close();//App.Current.Shutdown();
}
5.4 設置窗體的啟動位置
在構造函數中初始化啟動位置,計算屏幕寬高,進行居中顯示;
public MainWindow()
{InitializeComponent();//設置窗體的啟動位置double screenW = SystemParameters.ScrollWidth;double screenH = SystemParameters.ScrollHeight;double offsetHorizontal = 100;double offsetVertical = 200;this.Left = (this.Width - screenW ) / 2 - offsetHorizontal;this.Top = (this.Height - screenH) / 2 - offsetVertical;
}
5.6 圖標設置
準備中……
5.7 設計時正常,運行時圖片不顯示的問題
準備中……
6 圖片按鈕
6.1 顯示屬性
準備中……
6.2 點擊事件
準備中……
6.3 響應鼠標動作
準備中……
7 啟動游戲
登陸成功后,自動啟動游戲的可執行程序,即exe文件
啟動另一個可執行程序的方法
System.Diagnostics.Process.Start("FinalCombat.exe");
8 登陸
8.1 校驗賬戶密碼
正常產品應該和登陸服務器通信,進行校驗,本文demo只使用本地邏輯進行簡單的模擬示意:
8.2 接入第三方登陸
使用bmob后端云
9 代碼樣例
請見倉庫FCLoginMain