游戏入门引擎代码
来源:互联网 发布:sqlserver 创建试图 编辑:程序博客网 时间:2024/05/17 03:59
头文件 GameEngine.h
#pragma once#include <windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow);LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);bool GameInitialize(HINSTANCE hInstance);void GameStart(HWND hWnd);void GameEnd();void GameActive(HWND hWnd);void GameDeactive(HWND hWnd);void GamePaint(HDC hdc);void GameCycle();class GameEngine{public: GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass, LPTSTR szTitle, WORD wIcon, WORD wSmallIcon, int iWidth = 640, int iHeight = 480); virtual ~GameEngine(); ////////////////////////////////////////////////////////////////////////// static GameEngine* GetEngine(){ return m_pGameEngine; } static void SetEngine(GameEngine* pGameEngine){ m_pGameEngine = pGameEngine; } BOOL Initialize(int iCmdShow); LRESULT HandleEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); ////////////////////////////////////////////////////////////////////////// HINSTANCE GetInstance(){ return m_hInstance; } HWND GetWnd(){ return m_hWnd; } void SetWnd(HWND hWnd){ m_hWnd = hWnd; } LPTSTR GetTitle(){ return m_szTitle; } WORD GetIcon(){ return m_wIcon; } WORD GetSmallIcon(){ return m_wSmallIcon; } int GetWidth(){ return m_iWidth; } int GetHeight(){ return m_iHeight; } int GetFrameDelay(){ return m_iFrameDelay; } void SetFrameRate(int iFrameRate){ m_iFrameDelay = 1000 / iFrameRate; } BOOL GetSleep(){ return m_bSleep; } void SetSleep(BOOL bSleep){ m_bSleep = bSleep; }private:protected: static GameEngine* m_pGameEngine; HINSTANCE m_hInstance; //应用程序句柄 HWND m_hWnd; //主窗口句柄 TCHAR m_szWindowClass[32]; //窗口类名称 TCHAR m_szTitle[32]; //主窗口名称 WORD m_wIcon, m_wSmallIcon; //程序图标 int m_iWidth, m_iHeight; //宽 高 int m_iFrameDelay; //周期 BOOL m_bSleep; //是否休眠};
源文件GameEngine.cpp
#include "stdafx.h"#include "GameEngine.h"int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ MSG msg; static int iTickTrigger = 0; int iTickCount; if (GameInitialize(hInstance)) { if (!GameEngine::GetEngine()->Initialize(iCmdShow)) { return FALSE; } while (true) { if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { if (!GameEngine::GetEngine()->GetSleep()) { iTickCount = GetTickCount(); if (iTickCount > iTickTrigger) { iTickTrigger = iTickCount + GameEngine::GetEngine()->GetFrameDelay(); GameCycle(); } } } } return (int)msg.wParam; } GameEnd(); return TRUE;}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ return GameEngine::GetEngine()->HandleEvent(hWnd, message, wParam, lParam);}GameEngine::GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass, LPTSTR szTitle, WORD wIcon, WORD wSmallIcon, int iWidth, int iHeight) :m_hInstance(hInstance),m_wIcon(wIcon),m_wSmallIcon(wSmallIcon),m_iWidth(iWidth),m_iHeight(iHeight),m_iFrameDelay(50),m_bSleep(TRUE),m_hWnd(nullptr){ memcpy(m_szWindowClass, szWindowClass, strlen(szWindowClass)); memcpy(m_szTitle, szTitle, strlen(szTitle));}GameEngine::~GameEngine(){}BOOL GameEngine::Initialize(int iCmdShow){ WNDCLASSEX wndclass; wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = m_hInstance; wndclass.hIcon = LoadIcon(m_hInstance, MAKEINTRESOURCE(GetIcon())); wndclass.hIconSm = LoadIcon(m_hInstance, MAKEINTRESOURCE(GetSmallIcon())); wndclass.hCursor = LoadCursor(nullptr, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wndclass.lpszMenuName = nullptr; wndclass.lpszClassName = m_szWindowClass; if (!RegisterClassEx(&wndclass)) { return FALSE; } //根据game大小计算窗口大小和位置 int iWindowWidth = m_iWidth + GetSystemMetrics(SM_CXFIXEDFRAME) * 2; int iWindowHeight = m_iHeight + GetSystemMetrics(SM_CYFIXEDFRAME) * 2 + GetSystemMetrics(SM_CYCAPTION); if (wndclass.lpszMenuName != nullptr) { iWindowHeight += GetSystemMetrics(SM_CYMENU); } int iXWindowPos = (GetSystemMetrics(SM_CXSCREEN) - iWindowWidth) / 2; int iYWindowPos = (GetSystemMetrics(SM_CYSCREEN) - iWindowHeight) / 2; m_hWnd = CreateWindow(m_szWindowClass, m_szTitle, WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX, iXWindowPos, iYWindowPos, iWindowWidth, iWindowHeight, nullptr, nullptr, m_hInstance, nullptr); if (!m_hWnd) { return FALSE; } ShowWindow(m_hWnd, iCmdShow); UpdateWindow(m_hWnd); return TRUE;}LRESULT GameEngine::HandleEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ switch (msg) { case WM_CREATE: SetWnd(hWnd); GameStart(hWnd); return 0; case WM_SETFOCUS: GameActive(hWnd); SetSleep(FALSE); return 0; case WM_KILLFOCUS: GameDeactive(hWnd); SetSleep(TRUE); return 0; case WM_PAINT: HDC hdc; PAINTSTRUCT ps; hdc = BeginPaint(hWnd, &ps); GamePaint(hdc); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: GameEnd(); PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, msg, wParam, lParam);}__declspec(selectany) GameEngine* GameEngine::m_pGameEngine = nullptr;
0 0
- 游戏入门引擎代码
- 游戏引擎与游戏引擎开发入门
- Android游戏引擎--AndEngine入门
- photon游戏引擎代码例子
- Android游戏引擎Libgdx使用入门
- 卡卡游戏引擎之快速入门
- Android游戏引擎AndEngine入门讲解
- photon游戏引擎代码例子2
- 265行代码实现第一人称游戏引擎
- 265行代码实现第一人称游戏引擎
- 游戏编程入门(2):创建游戏引擎和使用该引擎制作小游戏
- 游戏引擎
- 游戏引擎
- 游戏引擎
- 游戏引擎
- 游戏引擎
- 游戏引擎
- 游戏引擎
- c#委托及事件响应第一篇
- 表关系(一对一、一对多、多对多)
- C++对象成员
- yii2.0使用心得
- USACO 4.3解题报告
- 游戏入门引擎代码
- Framework中的TelephonyManager
- 静态资源处理
- CCF之炉火传说(java)
- 最大密度子图
- {题解}[jzoj4064]【JSOI2015】套娃(doll)
- MyBatis之返回类型
- Android之解析XML的三种Demo!
- 树结构练习——排序二叉树的中序遍历