免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
上一个内容:9.第二阶段x64游戏实战-创建项目代码获取人物属性
效果图:
当前游戏中的文字使用的是char*也就是多字节,所以要设置一下,我们也要使用多字节,如果char*读取的字符串中文是乱码的就说明游戏使用的是多字节字符串,相反char*中文乱码的就说明游戏使用宽字节也就是Unicode字符集
这里采用MFC提供的计时器,首先如下图点击类向导
点击类向导的时候注意当前选中的文件
这里和选中的文件是对应的,我们要给MyDialog类添加计时器所以要选中MyDialog类也就是MyDialog.cpp或MyDialog.h文件
然后如下图红框进行选择
然后点击添加处理程序
然后点击确定或应用
然后就可以发现给我生成了OnTimer,这里面的代码就是计时器的代码
MyDialog.cpp文件的修改:新加 OnTimer函数(计时器),修改了OnBnClickedButton1函数(读取角色按钮点击之后执行的函数)
// MyDialog.cpp: 实现文件
//
#include "pch.h"
#include "第二阶段x64一.h"
#include "afxdialogex.h"
#include "MyDialog.h"
#include "GameData.h"
// MyDialog 对话框
GameData* pData = new GameData;
IMPLEMENT_DYNAMIC(MyDialog, CDialogEx)
MyDialog::MyDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG1, pParent)
{
}
MyDialog::~MyDialog()
{
}
void MyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(MyDialog, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON1, &MyDialog::OnBnClickedButton1)
ON_WM_TIMER()
END_MESSAGE_MAP()
// MyDialog 消息处理程序
void MyDialog::OnBnClickedButton1()
{
CString str;
CString str1;
GetDlgItemText(IDC_BUTTON1, str);
str1 = "读取角色";
if (str == str1) {// 第一次点击按钮开启获取人物数据
str = "读取中";
LogW(L"读取中");
SetDlgItemText(IDC_BUTTON1, str);
/*
1位置表示事件名字
1000表示间隔时间,也就是说1000毫秒执行一次OnTimer函数
NULL位置表示用来指定处理 WM_TIMER 消息的函数,写NULL表示使用默认的
这里也就是说这里是用来设置计时器或者说添加一个计时器,计时器的名字是1,间隔执行时间是1000毫秒
*/
SetTimer(1, 1000, NULL);
}
else {// 第二次点击按钮关闭获取人物数据
LogW(L"读取结束");
// 把事件名叫1的计时器进行删除
KillTimer(1);
SetDlgItemText(IDC_BUTTON1, str1);
}
}
void MyDialog::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nIDEvent == 1) {
Role_Stu Role = pData->Updata_Role(0);//更新角色
CString str;
str.Format("角色对象:%p\n角色名字:%s\n角色等级:%d\n角色状态:%d\n角色的ID:%d\n角色血量:%d/%d\n角色蓝量:%d/%d\n角色活力:%d/%d\n角色精力:%d/%d\n角色经验:%d/%d\n角色坐标 x:%f z:%f y:%f\n角色体力:%d\n角色定力:%d\n角色身法:%d\n角色潜能:%d\n角色力量:%d\n角色灵气:%d\n外功攻击:%d\n内功攻击:%d\n外功防御:%d\n内功防御:%d\n角色命中:%d\n角色闪避:%d\n会心攻击:%d\n会心防御:%d", Role.m_Objadr, Role.m_Name.c_str(), Role.m_Lv, Role.m_State, Role.m_ID, Role.m_HP.min, Role.m_HP.max, Role.m_MP.min, Role.m_MP.max, Role.m_Vitality.min, Role.m_Vitality.max, Role.m_Energy.min, Role.m_Energy.max, Role.m_Exp.min, Role.m_Exp.max, Role.fPos.x, Role.fPos.z, Role.fPos.y, Role.m_PStrength, Role.m_CStrength, Role.m_Footwork, Role.m_Potential, Role.m_power, Role.m_Reiki, Role.m_Out_attack, Role.m_In_attack, Role.m_Out_Defense, Role.m_In_Defense, Role.m_hit, Role.m_dodge, Role.m_HeartAttack, Role.m_HeartDefense);
SetDlgItemText(IDC_STATIC, str);
}
CDialogEx::OnTimer(nIDEvent);
}