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