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 登陆
正常产品应该和登陆服务器通信,进行校验,本文demo只使用本地逻辑进行简单的模拟示意:
8.2 接入第三方登陆
使用bmob后端云
9 代码样例
请见仓库FCLoginMain
2021年3月27日 上午7:47 沙发
能开发出这个游戏吗
2021年3月31日 下午1:59 1层
@大象饼干 这正在我的计划内\(^o^)/~
2021年9月23日 下午3:12 2层
@kktoo 大佬已经开始了吗
2022年3月29日 上午11:47 3层
@哇喔哇喔 在,但是其他事情实在太忙了o(╥﹏╥)o
2022年4月21日 下午12:15 2层
@kktoo 大佬,还有后续吗? 有困难来贴吧讨论