D3D9 2.3 引擎规划

2.3 引擎规划

书中例子的游戏引擎分为5个主要部分。
渲染系统输入系统声音系统人工智能系统以及数学库
引擎的每一部分都有自己的头文件和源文件。

2.3.1 渲染系统

渲染系统包含了一次渲染大批几何图形的程序代码。

2.3.5 数学库

数学库是由引擎及其游戏大量使用的数学类、函数和常量构成的集合。

2.4 游戏项目概述

  1. 编写启动渲染系统的代码。
  2. 为渲染系统添加硬件光照和材料支持。
  3. 为渲染系统增加纹理映射支持。
  4. 文本和图形用户界面。
  5. 增加特效
  6. 基本脚本
  7. 数学库的构建
  8. 碰撞检测功能
  9. 输入系统
  10. 声音系统
  11. 模型加载和动画
  12. 增加让模型沿着动画路径移动的能力

2.5 游戏项目第1部分:启动项目

2.5.1 游戏源文件

第一个游戏项目的main.h 头文件

/*
   Demo Name:  Game Project 1
      Author:  Allen Sherrod
     Chapter:  Chapter 2
*/


#ifndef _UGP_MAIN_H_
#define _UGP_MAIN_H_


#include"StrandedEngine/engine.h"  //游戏引擎静态库
#pragma comment(lib, "lib/StrandedEngine.lib")

#define WINDOW_CLASS    "StrandedGame"   //
#define WINDOW_NAME     "Stranded"       //窗口名称
#define WIN_WIDTH       800				//宽度
#define WIN_HEIGHT      600				//高度
#define FULLSCREEN      1				//全屏显示

// Function Prototypes...
bool InitializeEngine();
void ShutdownEngine();

// Main game functions.
bool GameInitialize();
void GameLoop();
void GameShutdown();

#endif

游戏引擎将以静态库的形式实现。并绑定到游戏中。

第一个游戏项目的main函数和消息过程函数:

/*
   Demo Name:  Game Project 1
      Author:  Allen Sherrod
     Chapter:  Chapter 2
*/


#include"main.h"


// Globals...
HWND g_hwnd;
CRenderInterface *g_Render = NULL;


LRESULT WINAPI MsgProc(HWND hd, UINT msg, WPARAM wp, LPARAM lp)
{
   
   switch(msg)
      {
   
         case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
            break;

         case WM_KEYUP:
            if(wp == VK_ESCAPE) PostQuitMessage(0);
            break;
      }

   return DefWindowProc(hd, msg, wp, lp);
}


int WINAPI WinMain(HINSTANCE h, HINSTANCE p, LPSTR cmd, int show)
{
   
   // Register the window class
   WNDCLASSEX wc = {
    sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc,
                     0L, 0L, GetModuleHandle(NULL), NULL, NULL,
                     NULL, NULL, WINDOW_CLASS, NULL };
   RegisterClassEx(&wc);

   // Create the application's window
   if(FULLSCREEN)
      {
   
         g_hwnd = CreateWindowEx(NULL, WINDOW_CLASS, WINDOW_NAME,
                        WS_POPUP | WS_SYSMENU | WS_VISIBLE, 0, 0,
                        WIN_WIDTH, WIN_HEIGHT,
                        NULL, NULL, h, NULL);
      }
   else
      {
   
         g_hwnd = CreateWindowEx(NULL, WINDOW_CLASS, WINDOW_NAME,
                              WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,
                              0, WIN_WIDTH, WIN_HEIGHT,
                              NULL, NULL, h, NULL);
      }

   if(g_hwnd)
      {
   
         // Show the window
         ShowWindow(g_hwnd, SW_SHOWDEFAULT);
         UpdateWindow(g_hwnd);
      }

   // Initialize the Stranded Engine.
   if(InitializeEngine())
      {
   
         // Initialize Stranded game.
         if(GameInitialize())
            {
   
               // Enter the message loop
               MSG msg;
               ZeroMemory(&msg, sizeof(msg));

               SetCursorPos(0, 0);

               while(msg.message != WM_QUIT)
                  {
   
                     if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
                        {
   
                           TranslateMessage(&msg);
                           DispatchMessage(&msg);
                        }
                     else
                        GameLoop();
                  }
            }
      }

   // Release any and all resources.
   GameShutdown();
   ShutdownEngine();

   UnregisterClass(WINDOW_CLASS, wc.hInstance);
   return 0;
}

完成引擎和游戏的初始化和关闭。

main.cpp文件中余下的代码:

bool InitializeEngine()
{
   
   if(!CreateD3DRenderer(&g_Render)) return false; //渲染系统分配内存

   if(!g_Render->Initialize(WIN_WIDTH, WIN_HEIGHT, //初始化渲染系统
      g_hwnd, FULLSCREEN)) return false;

   g_Render->SetClearCol(0, 0, 0);  //清除色为黑色

   return true;
}


void ShutdownEngine()			//所有系统使用的动态内存清除干净
{
   
   if(g_Render)					//清除渲染系统
      
         g_Render->Shutdown();
         delete g_Render;
         g_Render = NULL;
      }
}


bool GameInitialize()
{
   
   return true;
}


void GameLoop()				//完成渲染一个黑屏的基本功能
{
   
   if(!g_Render) return;

   g_Render->StartRender(1, 1, 0);

   g_Render->EndRendering();
}


void GameShutdown()
{
   

}

清除色是在应用程序启动新帧时,清除后台缓存用的颜色。

2.5.2 引擎源文件和头文件

defines.h文件的全部代码:

/*
   Demo Name:  Game Project 1
      Author:  Allen Sherrod
     Chapter:  Chapter 2
*/


#ifndef _UGP_DEFINES_H_
#define _UGP_DEFINES_H_

#include<windows.h>

// Boolean values.
#define UGP_INVALID -1
#define UGP_OK       1
#define UGP_FAIL     0

// Window handle (need new way if porting to Mac and OpenGL).
#define WinHWND HWND

// Typedefs and enumerations.
typedef long VertexType;

enum PrimType
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值