C语言可以用的2D常用游戏引擎擎有哪些

比较简单的2D游戏引擎C++类 - CSDN博客
比较简单的2D游戏引擎C++类
//GameEngine.h文件:
#pragma once#include &windows.h&
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);class GameEngine{protected:HINSTANCE m_hI&&& // 应用程序实例句柄HWND&& m_hW&&&& // 窗口句柄LPSTR&& m_szWndT&& // 窗口标题int&&& m_cxG&&& // 游戏画面宽度int&&& m_cyG&&& // 游戏画面高度int&&& m_iFrameD&& // 帧之间延迟的毫秒数BOOL&& m_bP&&& // 指示游戏是否暂停HDC&&& m_hdcM&&&&HBITMAP&& m_hB
public:GameEngine(LPSTR szWndTitle, int cx, int cy, int iFrameRate);virtual ~GameEngine(void);int&& Run(void);LRESULT HandleEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); BOOL Init(HINSTANCE hInst);
// 访问内部字段HWND GetWnd(void) { return m_hW }BOOL IsPause(void) { return m_bP }int&& GetFrameDelay(void) { return m_iFrameD }int&& GetGameWidth(void) { return m_cxG }int&& GetGameHeight(void) { return m_cyG }
private:BOOL CreateWnd (HINSTANCE hInst);BOOL CreateBackBuffer(void);
// 用户要重写的接口protected:virtual BOOL SetGameParams(void) = 0;&&& // 初始化角色的参数virtual void PaintToMemDC(void) = 0;&&&& // 重绘帧virtual void ChangeGameParams(void) = 0;&&& // 改变角色的状态
virtual void OnKeyPress(void) = 0;&&&&& // 处理按键virtual void OnMouseLButtonDown(int x, int y) = 0; // 处理鼠标左键按下virtual void OnMouseLButtonUp(int x, int y) = 0;&& // 处理鼠标左键释放virtual void OnMouseRButtonDown(int x, int y) = 0; // 处理鼠标左键按下virtual void OnMouseRButtonUp(int x, int y) = 0;&& // 处理鼠标右键释放virtual void OnMouseMove(int x, int y) = 0;&&& // 处理鼠标移动};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
////GameEngine.Cpp文件
#include &./gameengine.h&
/***************** GameEngine Class ********************************************/GameEngine::GameEngine(LPSTR szWndTitle, int cx, int cy, int iFrameRate){m_hWnd&&& = NULL;m_cxGame&& =m_cyGame&& =m_iFrameDelay = 1000 / iFrameRm_bPause&& = FALSE;m_hBitmap&& = NULL;m_hdcMem&& = NULL;m_szWndTitle = szWndT}
GameEngine::~GameEngine(void){if (m_hBitmap)&& DeleteObject (m_hBitmap);if (m_hdcMem)&& DeleteObject (m_hdcMem);}
BOOL GameEngine::CreateWnd(HINSTANCE hInst){// 创建窗口类WNDCLASSwc.cbClsExtra&&& = 0;wc.cbWndExtra&&& = 0;wc.hbrBackground&& = (HBRUSH)(COLOR_WINDOW + 1);wc.hInstance&&& = m_hIwc.hCursor&&&& = LoadCursor (NULL, IDC_ARROW);wc.hIcon&&&& = LoadIcon (NULL, IDI_APPLICATION);wc.lpfnWndProc&&& = WndPwc.lpszClassName&& = m_szWndTwc.lpszMenuName&&& = NULL;wc.style&&&& = CS_HREDRAW | CS_VREDRAW;
// 注册窗口类if (!RegisterClass(&wc))&& return FALSE;
// 根据游戏画面计算窗口大小和位置int cxWnd = m_cxGame + GetSystemMetrics (SM_CXBORDER) * 2;int cyWnd = m_cyGame + GetSystemMetrics (SM_CYBORDER) * 2 +&& GetSystemMetrics (SM_CYCAPTION);if (wc.lpszMenuName != NULL)&& cyWnd += GetSystemMetrics (SM_CYMENU);int x = (GetSystemMetrics(SM_CXSCREEN) - cxWnd) / 2;int y = (GetSystemMetrics(SM_CYSCREEN) - cyWnd) / 2;
// 创建窗口m_hWnd = CreateWindow (m_szWndTitle, m_szWndTitle, WS_POPUPWINDOW&& | WS_CAPTION | WS_MINIMIZEBOX , x, y, cxWnd, cyWnd,&&& NULL, NULL, m_hInst, NULL);if (!m_hWnd)&& return FALSE;return TRUE;}
LRESULT GameEngine::HandleEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){HDCPAINTSTRUCT
switch (msg){case WM_SETFOCUS:&& m_bPause = FALSE;&& return 0;
case WM_KILLFOCUS:&& m_bPause = TRUE;&& return 0;
case WM_PAINT:&&&& hdc = BeginPaint(hWnd, &ps);&& BitBlt(hdc, 0, 0, m_cxGame, m_cyGame, m_hdcMem, 0, 0, SRCCOPY);&& EndPaint(hWnd, &ps);&& return 0;
case WM_LBUTTONDOWN:&& OnMouseLButtonDown (LOWORD(lParam), HIWORD(lParam));&& return 0;
case WM_LBUTTONUP:&& OnMouseLButtonUp (LOWORD(lParam), HIWORD(lParam));&& return 0;
case WM_RBUTTONDOWN:&& OnMouseRButtonDown (LOWORD(lParam), HIWORD(lParam));&& return 0;
case WM_RBUTTONUP:&& OnMouseRButtonUp (LOWORD(lParam), HIWORD(lParam));&& return 0;
case WM_MOUSEMOVE:&& OnMouseMove (LOWORD(lParam), HIWORD(lParam));&& return 0;
case WM_DESTROY:&& DeleteObject (m_hBitmap);&& DeleteObject (m_hdcMem);&& PostQuitMessage(0);&& return 0;}return DefWindowProc (hWnd, msg, wParam, lParam);}
int GameEngine::Run(void){MSGstatic int iTickTrigger = 0;int&&& cTwhile (TRUE){&& if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))&& {&&& if (msg.message == WM_QUIT)&&&&&&& TranslateMessage (&msg);&&& DispatchMessage (&msg);&& }&& else&& {&&& //确保游戏引擎没有休眠&&& if (!m_bPause)&&& {&&&& //检查滴答计数&&&& cTick = GetTickCount();&&&& if (cTick & iTickTrigger)&&&& {&&&&& iTickTrigger = cTick + GetFrameDelay();&&&&& OnKeyPress();&&& // 处理用户的按键&&&&& ChangeGameParams();&& // 更改游戏参数&&&&& PaintToMemDC();&&& // 在后台更新画面&&&&& InvalidateRect (m_hWnd, NULL, FALSE);&& // 更新前台画面&&&& }&&& }&& }}return 0;}
BOOL GameEngine::CreateBackBuffer(void){HDC hdc = GetDC(m_hWnd);m_hdcMem = CreateCompatibleDC (hdc);if (!m_hdcMem) return FALSE;m_hBitmap = CreateCompatibleBitmap (hdc, m_cxGame, m_cyGame);if (!m_hBitmap) return FALSE;SelectObject (m_hdcMem, m_hBitmap);ReleaseDC (m_hWnd, hdc);return TRUE;}
BOOL GameEngine::Init (HINSTANCE hInst){if (!CreateWnd(hInst))&& return FALSE;if (!CreateBackBuffer())&& return FALSE;if (!SetGameParams())&& return FALSE;// 游戏引擎准备就绪后就显示窗口ShowWindow (m_hWnd, SW_NORMAL);UpdateWindow (m_hWnd);return TRUE;}
// GameEngine类使用方法示例(由于它是一个抽象类,有纯虚方法,所以要派生出一个类来实现这些方
// 法,我派生出一个MyGameEngine类
// MyGameEngine.h文件#pragma once#include &gameengine.h&class MyGameEngine :public GameEngine{public:MyGameEngine(LPSTR szWndTitle, int cx, int cy, int iFrameRate);~MyGameEngine(void);
protected:BOOL SetGameParams(void);void ChangeGameParams(void);void PaintToMemDC(void);void OnKeyPress(void);void OnMouseLButtonDown(int x, int y); void OnMouseLButtonUp(int x, int y);&&void OnMouseRButtonDown(int x, int y); void OnMouseRButtonUp(int x, int y);&&void OnMouseMove(int x, int y);};
//MyGameEngine.Cpp文件#include &./mygameengine.h&MyGameEngine::MyGameEngine(LPSTR szWndTitle, int cx, int cy, int iFrameRate):GameEngine(szWndTitle, cx, cy, iFrameRate){}
MyGameEngine::~MyGameEngine(void){}
BOOL MyGameEngine::SetGameParams(){ return TRUE;}
void MyGameEngine::PaintToMemDC(){&&&}void MyGameEngine::ChangeGameParams(){ }void MyGameEngine::OnKeyPress(){}void MyGameEngine::OnMouseLButtonDown (int x, int y){}void MyGameEngine::OnMouseLButtonUp (int x, int y){}void MyGameEngine::OnMouseRButtonDown (int x, int y){}void MyGameEngine::OnMouseRButtonUp (int x, int y){}void MyGameEngine::OnMouseMove (int x, int y){}
////主文件main.cpp
#include &MyGameEngine.h&// 唯一的全局变量MyGameEngine * g_pGE = new MyGameEngine(TEXT(&MyGame&), 640, 480, 60);
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPreInst, PSTR szCmdLine, int iCmdShow){int iR
if (g_pGE == NULL)&& return&& -1;if (g_pGE-&Init(hInst))&& iRet = g_pGE-&Run();else&& MessageBox (NULL, TEXT(&游戏引擎初始化失败!&), TEXT(&初始化失败&), MB_ICONERROR);delete g_pGE;return iR}
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){return g_pGE-&HandleEvent(hWnd, msg, wParam, lParam);}
本文已收录于以下专栏:
相关文章推荐
原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/8481366。
题目是说的简单数据存储,也就是说少量的简单的数据存储,大量复...
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第一回合: 搭建开发环境   
搭建开发环境
1.下载Cocos2d-html5
3cocos2d-x 是用C++重写cocos2d-iphone引擎的一个开源项目,引擎主体从cocos2d-iphone-0.99.4-final版重写为C++。这个项目在7月初启动,到现在4个月过...
学习cocos2d-x首先得具备这个构架
之后的学习主要是以这个分层来构造类写一个一个事件
CCApplicationprotocol定义了接口
CCApplication各个平台是不同的
...
原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/8278012
实现的原理就是两张图片,一个亮一些,一个暗一些,将暗的图片放在亮...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)2013年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第三
2013年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第三
2013年3月 C/C++大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 独立游戏用什么引擎 的文章

 

随机推荐