主页 > 编程 > c语言 >

SkyGameEngine C++游戏引擎自带demo游戏代码分析(1)

2019-07-24 22:56 阅读:189 来源:智宇SEO自媒体
智宇之前用的游戏引擎太过于简陋,游戏图片资源本来就不好找,还要先转成bmp格式,写起游戏来很费劲。这特么像极了爱情,开始的开始总是喜欢的。通过百度又找到了一个C++游戏引擎——SkyGameEngine。因为作者暂时还没有提供完整的文档。所以先拿这个引擎自带的游戏demo开刀。
一、框架部分:


GameAppDelegate.cpp

#include "../scene/StartScene.h"     //游戏开始场景
#include "GameAppDelegate.h"
#include <ctime>
#include "../Game.h"

const int WinWidth = 1136;         //窗口宽度
const int WinHeight = 640;         //窗口高度

//在这里 可以进行一些 初始化操作,并且开始 一个场景
bool GameAppDelegate::appInit()
{
	//设置帧率
	auto app = Application::getInstance();
	app->setPerFrameInterval(1 / 60.0f);

	//TODO 做自己想做的事情吧 。
	GameWorld::getInstance()->setTimeScale(1.0f);   //设置时间缩放
	srand((unsigned)time(NULL));    //随机数种子

#ifdef _DEBUG
	GameWorld::getInstance()->openDebugConsole();  //打开调试控制台
	GameWorld::getInstance()->isDisplayRenderInfo(true);
#endif // _DEBUG

	if (!Game::getInstance()->loadResource())  ////加载游戏资源
	{
		return false;
	}

	Game::getInstance()->statrGame();  //游戏开始

	//开始场景
	auto g = GameWorld::getInstance();   
	g->start();

	return true;
}

//在这里提供窗口的大小
Size GameAppDelegate::getWindowsSize()
{
	return Size(WinWidth, WinHeight);
}

void GameAppDelegate::appEnterBackground()
{
	AudioManager::getInstance()->pauseAllAudio();
}

void GameAppDelegate::appEnterForeground()
{
	AudioManager::getInstance()->resumeAllAudio();
}

GameAppDelegate.h
#ifndef GameAppDelegate_h__
#define GameAppDelegate_h__

#include <SkyGameEngine.h>

class GameAppDelegate
	:public IAppDelegate
{

public:
	virtual Size getWindowsSize() override;//引擎通过该接口获取程序的窗口尺寸

	virtual bool appInit() override;//引擎初始化后会调用,用来控制程序的初始信息


	virtual void appEnterBackground() override;//当程序被最小化时调用该接口


	virtual void appEnterForeground() override;//程序从最小化进入正常窗口时调用该接口

};


#endif // GameAppDelegate_h__

程序入口main.cpp
#include "main.h"


using namespace std;


#include "GameAppDelegate.h"

int WINAPI WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow
)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);
	/*
	WinMain() 为win32应用程序的主函数【类似于 main() 】。
	在该函数中首先创建一个GameAppDelegate对象,然后获取程序实例并且设置代理对象。
	最后,程序实例对象app执行 run() 函数。
	*/
	std::unique_ptr<GameAppDelegate> app_delegate = std::make_unique<GameAppDelegate>();
	auto app=Application::getInstance();
	app->setAppDelegte(app_delegate.get());
	return app->run();
}