网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第1篇)

来源:互联网 发布:淘宝虚假交易处罚2017 编辑:程序博客网 时间:2024/05/02 01:16

version2

主要内容:贴图

所属部分:客户端

代码地址 https://github.com/changjixiong/MMO-RPGGame, 如何获得代码,请参考如何用SVN从github上检出代码的不同版本

邮件地址:changjixiong@gmail.com

本系列目录


由于VC自动生成的代码,有点罗嗦,而且,我也不需要用到RC文件,希望能看到精简的代码,所以windows 的窗口生成代码,我使用了《windows游戏编程大师技巧》里面的代码(见p66~p68)。


在CreateWindowEx 调用了一个自定义的函数AdjustWindow(HWND hwnd)用于调整窗口的大小和位置,需要注意的是,最初创建的窗口大小是640X480的,并且已经居中了,但是,这个尺寸是包含标题栏的,所以需要用函数AdjustWindow(HWND hwnd)调整一下,调整后窗口的尺寸比640X480略大的,而客户区的尺寸是640X480。

下面的代码初始化HDC 和 HBITMAP 用于贴图, 用BitBlt向屏幕贴图,最后释放资源。

        HDC hdcScreen= GetDC(hwnd);HDC hdcGround= CreateCompatibleDC(hdcScreen);HBITMAP bitmap= (HBITMAP)LoadImage(NULL,"./pic/map/ground.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);HBITMAP bitOld= (HBITMAP)SelectObject(hdcGround,bitmap);// enter main event loop, but this time we use PeekMessage()// instead of GetMessage() to retrieve messageswhile(TRUE){// test if there is a message in queue, if so get itif (PeekMessage(&msg,NULL,0,0,PM_REMOVE))   {    // test if this is a quit   if (msg.message == WM_QUIT)   break;   // translate any accelerator keys   TranslateMessage(&msg);   // send the message to the window proc   DispatchMessage(&msg);   } // end if    // main game processing goes here// Game_Main(); // or whatever your loop is calledBitBlt(hdcScreen, 0, 0, 640, 480, hdcGround, 0, 0, SRCCOPY);//} // end while//Game_Shutdown();SelectObject(hdcGround, bitOld);DeleteObject(bitmap);DeleteDC(hdcGround);