![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
布鲁克零三四四
这个作者很懒,什么都没留下…
展开
-
学FPS游戏服务器
在任一时刻,客户端看到的自己的位置始终是领先于服务器的,但看到的其他人的位置又都是落后于服务器的。例如客户端A在t3时刻瞄准了B,并开枪射击,服务器收到射击事件时已经是第i帧了,但t3时刻和t4时刻 玩家B在服务器上的位置都不是PBe。Z乎:在《Valorant》中,客户端与服务器的移动和物理都是保持128帧运行的,这使得两端的每一帧都可以 一一 对应上,这极大地方便了服务端的命中判定,服务器只需把其他人的位置回退固定的帧数,就可以与客户端上的位置匹配。再浑浑噩噩全家都要跟我一起遭殃!转载 2024-02-29 07:40:31 · 73 阅读 · 0 评论 -
跨进程通信,Rpc,协程
Windows游戏的大厅和具体游戏(两个不同的exe的进程)之间通信常用有两种方法。一种是发送Windows消息WM_COPYDATA,数据走的界面线程,必须同步操作。两种都可以封装成同步Rpc调用操作,实际使用效果完全相同。一种是共享内存CreateFileMapping,用。CreateSemaphore来进程间同步读写。原创 2022-11-01 10:52:16 · 543 阅读 · 0 评论 -
ESP8266(ESP12-F)刷Arduboy
首先是开发板,上面自带一个ESP12-F然后是0.96英寸OLED 屏幕单色屏幕,IIC接口,128X64分辨率下载项目下载到库目录,打开打砖块项目:C:\Users\Administrator\Documents\Arduino\libraries\esp8266_arduboy2-master\examples\ESP8266_BreakoutOnPaddle\ESP8266_BreakoutOnPaddle.ino。转载 2022-09-07 22:14:25 · 555 阅读 · 0 评论 -
Arduino ESP8266 float转String保留6位小数
auto str =String(f,6)原创 2021-04-28 22:28:40 · 2265 阅读 · 0 评论 -
MFC对话框接受文件拖放的方法
1、设置对话框属性为:ACCEPT FILES2、添加消息映射:ON_WM_DROPFILES()3、编写响应消息的代码如下:void CSetReleaseProjExeDlg::OnDropFiles(HDROP hDropInfo){ WCHAR szPath[MAX_PATH] = L"" ; UINT nChars=::DragQueryFile (hDrop原创 2009-03-09 10:41:00 · 3709 阅读 · 1 评论 -
wofstream 输出中文
wofstream ofs("c://ofs.txt"); ofs.imbue(std::locale("chs")); wstring ws = L"认命"; ofs ofs.close();原创 2009-03-09 16:18:00 · 1690 阅读 · 0 评论 -
c++只要基类有虚函数,子类同名同参数同返回值同属性的函数默认都是虚函数
即使不写virtual,也相当于写了一样原创 2010-01-15 21:56:00 · 1762 阅读 · 0 评论 -
同一进程中读文件无法共享
CFile file ; file.Open( “XXX”, CFile::modeRead) ; 1、如果在同一进程中多线程同时执行上面代码,就会出现“XXX时发生共享违例”2、使用CFile::shareDenyNone可以解决这个问题原创 2010-01-22 23:00:00 · 822 阅读 · 1 评论 -
sprintf ULONGLONG 导致格式化结果错乱的问题
ULONGLONG u1=1,u2=2;int i=0;sprintf( szDst , "%u,%u,%d",u1,u2,i)出来结果是"1,0,2" 下面这样就正常了:sprintf( szDst , "%I64u,%I64u,%d", u1,u2,i)结果:"1,2,0"原创 2009-12-11 23:13:00 · 2419 阅读 · 0 评论 -
消除警告:DLL输出和EXP中定义的不一样的警告
查找正则表达式LIBRARY ".*Dll" 替换为空字符串原创 2009-12-10 22:08:00 · 831 阅读 · 0 评论 -
警告,BYTE转型成INT,可能丢失数据,为什么会这样?
警告,BYTE转型成INT,可能丢失数据,为什么会这样? BYTE a=1;BYTE b=2;b+=a;警告,BYTE转型成INT,可能丢失数据,为什么会这样?原创 2009-12-23 00:30:00 · 1046 阅读 · 0 评论 -
VC调试时突然整个操作系统都不响应了?
因为调试时,在两个线程中几乎同时爆出一个ASSERT原创 2010-01-12 21:46:00 · 703 阅读 · 0 评论 -
const & 与赋值操作导致出现引用了匿名常量对象
const string &refStr = "abc";这个代码经验可以通过,但是把const去掉就不能通过了。VC建立了一个匿名局部变量让我引用。但是为什么不能建立一个非const的匿名对象给我引用。还不如去掉这种难懂的灵活性。原创 2010-05-03 11:55:00 · 787 阅读 · 0 评论 -
autoexp.dat可以修改VC调试watch窗口中自己数据类型的显示格式
方便多了。原创 2010-05-03 11:59:00 · 1227 阅读 · 0 评论 -
WM_KICKIDLE只能在模态对话框(DoModal)中起作用
<br />其他窗口无法获得这个消息原创 2010-08-11 18:24:00 · 1146 阅读 · 0 评论 -
什么时候在虚函数(接口)前面加“On”前缀表示事件?
<br /> <br />规则,<br />函数名与代码相同,不用“On”<br />例:<br />void OnClickBtn<br />{<br /> PlayerSound( "Ding.wav" );//播放声音与按下按钮无任何关系<br />}<br /><br />函数名与代码不同,用“On”<br />例:<br />void PushBtn()<br />{<br /> m_eBtnState = eDown; //设置按钮状态为按下,与按下按钮有关<br />原创 2010-08-14 12:25:00 · 2023 阅读 · 0 评论 -
"_variant_t(ole_time)"与“(_variant_t)ole_time”到底有什么区别
仍不清楚!原创 2010-09-20 12:21:00 · 930 阅读 · 0 评论 -
转换失败,和东八区时区有关
<br />SYSTEMTIME sys_time={0}; <br />sys_time.wYear = 1970 ;// /* years since 1900 */ sys_time.wMonth = 1 ;//months since January - [0,11] <br />sys_time.wDay = 1;//day of the month - [1,31]<br /> sys_time.wHour = 7;// [<br />sys_time.wMinute = 59; sys_tim原创 2010-09-21 00:30:00 · 835 阅读 · 0 评论 -
VC8和VC8SP1的LIB库兼容编译后发布到另一台无VC电脑上
<br />C:/WINDOWS/WinSxS/Policies 下有些文件是确保VC8各个版本DLL兼容的<br />要想把VC8 SP1编译(连接VC8的LIB)出来的EXE在安装VC8(没有SP1)的电脑上使用<br />除了把几个DLL目录考到工作目录外,还要把C:/WINDOWS/WinSxS/Policies下的对应文件考到对方的系统目录下<br /> <?xml version='1.0' encoding='UTF-8' standalone='yes'?><assembly xmlns原创 2010-09-27 17:20:00 · 796 阅读 · 0 评论 -
CDialog OnOK OnCancel的区别
OnOk会调用UpdateData(),导致控件变量被改变OnCancel不会原创 2010-11-30 15:47:00 · 1195 阅读 · 0 评论 -
界面设计的原则:同一操作只引发同一结果
<br />比如同一个快捷键,应该都引发同一个结果,弹出同一个对话框,同一些列产品应该也尽量统一。<br />比如<br />1、棋牌游戏的大厅和游戏房间中,不要有同一个快捷键引发不同的功能<br />2、MMORPG中,不要有同一个按钮引发不同功能,比如如果选中好友就私聊,选中怪物就攻击,应该设置选中好友不做任何操作,那么这个选中操作就是单一的攻击功能,玩家容易记忆<br />3、举一个反例:挖掘机有四个关节要活动(爪臂上有三个,水平旋转一个)但是只有两个操纵杆,每个操纵杆只有两个档位(BOOL类型)可以原创 2010-11-30 14:03:00 · 639 阅读 · 0 评论 -
MakeSureDirectoryPathExists参数不能是正斜杠(“/”)
<br />否则返回TRUE,但是文件夹还是没有创建出来。原创 2010-10-15 18:58:00 · 1055 阅读 · 0 评论 -
TTS ISAPI接口使用注意:
<br />1、微软提供的中文男声语音库(Microsoft Simplified Chinese)允许同时提交多个异步Speak(...)请求,微软的接口会自动按先后顺序朗读这些请求<br />2、有一批VW开头的语音库(比如VW Lily)不允许在一个Speak朗读结束前就提交另一个异步朗读,必须把第一个请求停止才能再请求第二个。<br />3、本来以为通过获得SetNotifyWindowMessage就可以接受语音朗读完成的消息,其实并非如此,只有微软的中文男声语音库才会在语音朗读结束后发送消息,V原创 2010-12-07 13:50:00 · 2373 阅读 · 6 评论 -
检查代码结合测试
<br />1、先测试程序<br />2、检查代码的时候,要回忆这段代码刚才测过没有,如果怀疑的话,就下断点测一下<br /> <br /> <br />昨天做一个TTS语音接口功能,写了一段代码,响应朗读文本后接收一个事件,<br />后来发现中文语音库朗读结束后根本不触发这个事件,如果当时加断点测一下就能提前发现了<br />原创 2010-12-06 19:59:00 · 874 阅读 · 0 评论 -
有自定义new的VC6转VC8(VS2005)出现 xdebug(32) : error C2365: operator new
http://www.developmentnow.com/g/42_2006_10_0_0_838119/Debug-Build-fails-Release-Build-OK--VC-6-0-to-VS2005-port.htm代码中包含一个自定义的new其实很简单,同时包含和,在VC6是没问题的,到VC8就报错全部改为就可以了。原创 2010-12-10 23:31:00 · 1246 阅读 · 0 评论 -
强制在TAB切换控件焦点时显示控件的 ToolTip
1、CWnd中的ToolTip会在接受定时器消息的时候判断当前的光标位置,这段代码不知如何写的,估计直接调用了系统API获得光标位置2、所以尝试使用PostMessage(WM_MOUSEMOVE)去触发ToolTip是可能的,但是无法显示,因为显示的代码在ToolTip的定时器中延时显示。3、所以必须设置光标位置,但是ToolTip发现任何键盘消息时都会取消显示,所以在控件获得焦点时设置光标位置是不行的,因为后面会有键盘抬起消息,这样就立刻取消了ToolTip的显示。4、所以必须在定时器中设置光标位置vo原创 2010-12-19 15:48:00 · 1544 阅读 · 0 评论 -
让自己写的子窗口可以被父对话框的TAB键切换,像一个控件一样
Create(_T("BUTTON"),NULL,WS_CHILD|WS_TABSTOP,CRect(0,0,0,0),this,IDC_BTN_LIST);测了很久,发现只要把第一个参数设置为“BUTTON”就可以了。原创 2010-12-18 17:10:00 · 1034 阅读 · 0 评论 -
TranslateAccelerator只处理WM_KEYDOWN消息
<br />其他消息都不处理。原创 2010-11-01 17:50:00 · 929 阅读 · 0 评论 -
修改代码要注意的地方
修改代码要注意的地方1、虚函数改名,要记得吧所有模块的覆盖函数都改名收到BUG消除情绪:1、讨厌:根源,人之常情。对策,职业如此,必须突破自己!2、愤怒:根源,原有工作计划被打乱、原有压力增大。对策,坚决不骂人,暂时记录下来,暂不解决!3、否认:根源,要面子。对策,突破自己,绝不否认,暂时记录下来,暂不解决!4、惊讶:根源,自己的能力收到怀疑,信心动摇。对策,接受现实,自己是个白痴!5、失落:根源,努力那么久,水平仍然很低。对策,总结原因,记录这是重复的第几个错误!6、绝望:根源,太累,受不了了,不想干程序原创 2010-11-04 21:26:00 · 1029 阅读 · 1 评论 -
CString::MakeLower() 崩溃问题
<br />一个程序CString::MakeLower() 总是崩溃,开始以为是多线程问题,但是检查后全是局部变量,不存在跨线程<br />后来发现原来是:<br />字符串中有二进制数据,也就是说字符串中有既不是中文也不是英文也不是标点符号的而且不为零的数据,来源于一段二进制数据。<br />确保字符串中只有字符串,没有二进制数据就OK了原创 2010-12-27 22:15:00 · 2309 阅读 · 4 评论 -
检查代码勘误表:
if( true == bIsShow ) //应改为if( bIsShow )if( false == bIsShow ) //应改为if( ! bIsShow )原创 2010-11-06 09:54:00 · 587 阅读 · 0 评论 -
VC10(VS2010)中,打开资源编辑时,弹出错误
错误如下:C:/Program Files/Microsoft SDKs/Windows/v7.0A/include/winuser.rh(1354)fatal error RC1122: I/O error writing file重装VC也没用,后来发现其实是硬盘满了。但是这是仍然可以编译的。编辑资源需要的硬盘比编译需要的资源还大。原创 2010-12-29 16:32:00 · 1920 阅读 · 0 评论 -
不要在.h文件中包含StdAfx.h
<br />如果在头文件中包含了预编译头,可能导致编译报错,说一个结构被定义了两次原创 2010-12-30 18:11:00 · 1075 阅读 · 0 评论 -
返回HANDLE的API,失败时有时候是NULL,有时候是INVALID_HANDLE_VALUE
<br />判断时要看好文档,别判断错了原创 2010-12-30 22:48:00 · 1414 阅读 · 0 评论 -
VC创建一个.h文件加入项目后,重命名为CPP,仍然不编译
<br />必须从项目中移除再添加进来才会编译原创 2011-01-01 15:47:00 · 995 阅读 · 0 评论 -
OleCreateStaticFromData返回E_OUTOFMEMORY
<br />重启电脑就好了<br />不知为什么原创 2011-01-01 17:55:00 · 2317 阅读 · 3 评论 -
学习的阻力
<br />学习的阻力:<br />1、要学习就说明自己有不懂而且需要学的地方,如果我在学,别人就知道我不懂,可能看透了我的底细。如果我长期不学习,自我感觉就发现自己其实已经掌握了职业领域的一切需要的知识,别人也摸不透我,认为我可能懂得很多东西。<br />2、害怕失败,更害怕别人知道自己失败了<br />3、失败的原因:对自己估计过高,对问题难度估计过低<br />4、对某项技术投入了很多的精力、排斥其他的技术。(比如自己买了某品牌手机,就不愿意知道其他手机性能价格更好,使用了某技术或平台好几年,不愿意相原创 2010-11-12 20:32:00 · 1307 阅读 · 0 评论 -
程序员抱怨太麻烦时间不足
<br />程序员说问题比较麻烦时,如果不能改方案,可以试试让其他程序员做或者搁置,这样程序员为了证明自己的能力反而会设法解决问题<br />当然让程序员选择任务和安排时间是最好的原创 2010-11-15 12:08:00 · 802 阅读 · 0 评论 -
收到策划和需求时表达意见的方式
1、这个太麻烦了,改为:这个估计要做XX天2、这个不值得做,改为:这个做了对用户有什么好处?3、这个做不了,改为:我暂时还没想好怎么才能实现。原创 2010-11-15 13:12:00 · 672 阅读 · 0 评论 -
变长参数列表不能再调用变长参数
<br />void PrintTxt(const char* fmt , ... ){ va_start( args, fmt ); vsprintf( buffer, fmt, args ); OutputDebugString( buffer ) ; }void PrintTxtDebug(const char* fmt , ... ){#ifdef _DEBUG PrintTxt( fmt ) ;//此处崩溃!#endif}原创 2011-01-13 20:30:00 · 879 阅读 · 0 评论