369 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			369 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | #include "easy2d.h"
 | |||
|  | #include "EasyX\easyx.h"
 | |||
|  | #include <time.h>
 | |||
|  | #include <assert.h>
 | |||
|  | #include <imm.h>
 | |||
|  | #pragma comment(lib, "imm32.lib")
 | |||
|  | #include <mmsystem.h>
 | |||
|  | #pragma comment(lib, "winmm.lib")
 | |||
|  | 
 | |||
|  | 
 | |||
|  | // Application <20><>Ψһʵ<D2BB><CAB5>
 | |||
|  | static Application * s_pInstance = nullptr; | |||
|  | // <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | static int originX = 0; | |||
|  | static int originY = 0; | |||
|  | 
 | |||
|  | Application::Application() :  | |||
|  | 	m_currentScene(nullptr),  | |||
|  | 	m_nextScene(nullptr),  | |||
|  | 	m_bRunning(false),  | |||
|  | 	m_bPause(false), | |||
|  | 	m_nWidth(0), | |||
|  | 	m_nHeight(0), | |||
|  | 	m_nWindowMode(0) | |||
|  | { | |||
|  | 	assert(!s_pInstance);	// <20><><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Application ʵ<><CAB5>
 | |||
|  | 	s_pInstance = this;		// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	setFPS(60);				// Ĭ<><C4AC> FPS Ϊ 60
 | |||
|  | } | |||
|  | 
 | |||
|  | Application::~Application() | |||
|  | { | |||
|  | 	destory();				// <20><><EFBFBD><EFBFBD> Application
 | |||
|  | } | |||
|  | 
 | |||
|  | Application * Application::get() | |||
|  | { | |||
|  | 	assert(s_pInstance);	// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	return s_pInstance;		// <20><>ȡ Application <20><>Ψһʵ<D2BB><CAB5>
 | |||
|  | } | |||
|  | 
 | |||
|  | void Application::setOrigin(int originX, int originY) | |||
|  | { | |||
|  | 	::originX = originX; | |||
|  | 	::originY = originY; | |||
|  | 	setorigin(originX, originY); | |||
|  | } | |||
|  | 
 | |||
|  | int Application::getOriginX() | |||
|  | { | |||
|  | 	return ::originX; | |||
|  | } | |||
|  | 
 | |||
|  | int Application::getOriginY() | |||
|  | { | |||
|  | 	return ::originY; | |||
|  | } | |||
|  | 
 | |||
|  | int Application::run() | |||
|  | { | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
 | |||
|  | 	BeginBatchDraw(); | |||
|  | 	// <20><EFBFBD>ʱ<EFBFBD>侫<EFBFBD><E4BEAB>
 | |||
|  | 	timeBeginPeriod(1); | |||
|  | 	// <20><>ȡ CPU ÿ<><C3BF><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	LARGE_INTEGER freq; | |||
|  | 	QueryPerformanceFrequency(&freq); | |||
|  | 	// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	LARGE_INTEGER nLast; | |||
|  | 	LARGE_INTEGER nNow; | |||
|  | 	// <20><>¼<EFBFBD><C2BC>ǰʱ<C7B0><CAB1>
 | |||
|  | 	QueryPerformanceCounter(&nLast); | |||
|  | 	// ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	LONGLONG interval = 0LL; | |||
|  | 	// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
 | |||
|  | 	LONG waitMS = 0L; | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>صĴ<D8B5><C4B4><EFBFBD><EFBFBD><EFBFBD>ʾ
 | |||
|  | 	ShowWindow(GetHWnd(), SW_NORMAL); | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | |||
|  | 	m_bRunning = true; | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
 | |||
|  | 	while (m_bRunning) | |||
|  | 	{ | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
 | |||
|  | 		QueryPerformanceCounter(&nNow); | |||
|  | 		// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 		interval = nNow.QuadPart - nLast.QuadPart; | |||
|  | 		// <20>жϼ<D0B6><CFBC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7>㹻
 | |||
|  | 		if (interval >= m_nAnimationInterval.QuadPart) | |||
|  | 		{ | |||
|  | 			// <20><>¼<EFBFBD><C2BC>ǰʱ<C7B0><CAB1>
 | |||
|  | 			nLast.QuadPart = nNow.QuadPart; | |||
|  | 			// ִ<><D6B4><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>
 | |||
|  | 			_mainLoop(); | |||
|  | 		} | |||
|  | 		else | |||
|  | 		{ | |||
|  | 			// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
 | |||
|  | 			waitMS = LONG((m_nAnimationInterval.QuadPart - interval) * 1000LL / freq.QuadPart) - 1L; | |||
|  | 			// <20><><EFBFBD><EFBFBD><EFBFBD>̣߳<DFB3><CCA3>ͷ<EFBFBD> CPU ռ<><D5BC>
 | |||
|  | 			if (waitMS > 1L) | |||
|  | 				Sleep(waitMS); | |||
|  | 		} | |||
|  | 	} | |||
|  | 	// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
 | |||
|  | 	EndBatchDraw(); | |||
|  | 	// <20>رմ<D8B1><D5B4><EFBFBD>
 | |||
|  | 	close(); | |||
|  | 	// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>
 | |||
|  | 	destory(); | |||
|  | 	// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>侫<EFBFBD><E4BEAB>
 | |||
|  | 	timeEndPeriod(1); | |||
|  | 
 | |||
|  | 	return 0; | |||
|  | } | |||
|  | 
 | |||
|  | void Application::_initGraph() | |||
|  | { | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
 | |||
|  | 	initgraph(m_nWidth, m_nHeight, m_nWindowMode); | |||
|  | 	// <20><><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>ֹ<EFBFBD>ڼ<EFBFBD><DABC>ؽ<D8BD><D7B6><EFBFBD>ʾ<EFBFBD>ڴ<EFBFBD><DAB4>ڣ<EFBFBD>
 | |||
|  | 	ShowWindow(GetHWnd(), SW_HIDE); | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1>Ļ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
 | |||
|  | 	int screenWidth = GetSystemMetrics(SM_CXSCREEN); | |||
|  | 	int screenHeight = GetSystemMetrics(SM_CYSCREEN); | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С
 | |||
|  | 	CRect rcWindow; | |||
|  | 	GetWindowRect(GetHWnd(), &rcWindow); | |||
|  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
 | |||
|  | 	SetWindowPos(GetHWnd(), HWND_TOP, | |||
|  | 		(screenWidth - rcWindow.Size().cx) / 2, | |||
|  | 		(screenHeight - rcWindow.Size().cy) / 2, | |||
|  | 		rcWindow.Size().cx, | |||
|  | 		rcWindow.Size().cy, | |||
|  | 		SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOSIZE); | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뷨
 | |||
|  | 	ImmAssociateContext(GetHWnd(), NULL); | |||
|  | 	// <20><><EFBFBD>û<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
 | |||
|  | 	reset(); | |||
|  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
 | |||
|  | 	if (m_sTitle.empty()) | |||
|  | 	{ | |||
|  | 		// <20><><EFBFBD>浱ǰ<E6B5B1><C7B0><EFBFBD><EFBFBD>
 | |||
|  | 		TCHAR title[31]; | |||
|  | 		GetWindowText(GetHWnd(), title, 30); | |||
|  | 		m_sTitle = title; | |||
|  | 	} | |||
|  | 	else | |||
|  | 	{ | |||
|  | 		setWindowText(m_sTitle); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void Application::_mainLoop() | |||
|  | { | |||
|  | 	// <20><>Ϸ<EFBFBD><CFB7>ͣ
 | |||
|  | 	if (m_bPause) | |||
|  | 	{ | |||
|  | 		return; | |||
|  | 	} | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
 | |||
|  | 	if (m_nextScene) | |||
|  | 	{ | |||
|  | 		_enterNextScene(); | |||
|  | 	} | |||
|  | 	// <20><><EFBFBD>Ե<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>
 | |||
|  | 	assert(m_currentScene); | |||
|  | 	 | |||
|  | 	cleardevice();				// <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
 | |||
|  | 	m_currentScene->_onDraw();	// <20><><EFBFBD>Ƶ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
 | |||
|  | 	FlushBatchDraw();			// ˢ<>»<EFBFBD><C2BB><EFBFBD>
 | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD>ִ<EFBFBD>г<EFBFBD><D0B3><EFBFBD>
 | |||
|  | 	MouseMsg::__exec();			// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	KeyMsg::__exec();			// <20><><EFBFBD>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	Timer::__exec();			// <20><>ʱ<EFBFBD><CAB1>ִ<EFBFBD>г<EFBFBD><D0B3><EFBFBD>
 | |||
|  | 	FreePool::__flush();		// ˢ<><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
 | |||
|  | } | |||
|  | 
 | |||
|  | void Application::createWindow(int width, int height, int mode) | |||
|  | { | |||
|  | 	// <20><><EFBFBD>洰<EFBFBD><E6B4B0><EFBFBD><EFBFBD>Ϣ
 | |||
|  | 	m_nWidth = width; | |||
|  | 	m_nHeight = height; | |||
|  | 	m_nWindowMode = mode; | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	_initGraph(); | |||
|  | } | |||
|  | 
 | |||
|  | void Application::createWindow(tstring title, int width, int height, int mode) | |||
|  | { | |||
|  | 	// <20><><EFBFBD>洰<EFBFBD><E6B4B0><EFBFBD><EFBFBD>Ϣ
 | |||
|  | 	m_nWidth = width; | |||
|  | 	m_nHeight = height; | |||
|  | 	m_nWindowMode = mode; | |||
|  | 	m_sTitle = title; | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	_initGraph(); | |||
|  | } | |||
|  | 
 | |||
|  | void Application::setWindowSize(int width, int height) | |||
|  | { | |||
|  | 	// <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
 | |||
|  | 	assert(m_bRunning); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	closegraph(); | |||
|  | 	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻᵼ<DABB><E1B5BC><EFBFBD>ڴ<EFBFBD>ռ<EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD> EasyX <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BUG<55><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD> yangw80 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 	initgraph(width, height, m_nWindowMode); | |||
|  | 
 | |||
|  | 	/* EasyX <20><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD> Windows API <20>Ĵ<DEB8><C4B4>ڴ<EFBFBD>С */ | |||
|  | 	/////////////////////////////////////////////////////////////////////////////////
 | |||
|  | 	//	// <20><>ȡ<EFBFBD><C8A1>Ļ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
 | |||
|  | 	//	int screenWidth = GetSystemMetrics(SM_CXSCREEN);
 | |||
|  | 	//	int screenHeight = GetSystemMetrics(SM_CYSCREEN);
 | |||
|  | 	//	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	//	CRect rcWindow;
 | |||
|  | 	//	GetWindowRect(GetHWnd(), &rcWindow);
 | |||
|  | 	//	// <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>С
 | |||
|  | 	//	CRect rcClient;
 | |||
|  | 	//	GetClientRect(GetHWnd(), &rcClient);
 | |||
|  | 	//	// <20><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>С
 | |||
|  | 	//	width += (rcWindow.right - rcWindow.left) - (rcClient.right - rcClient.left);
 | |||
|  | 	//	height += (rcWindow.bottom - rcWindow.top) - (rcClient.bottom - rcClient.top);
 | |||
|  | 	//	// <20>Ĵ<DEB8><C4B4>ڴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
 | |||
|  | 	//	SetWindowPos(
 | |||
|  | 	//		GetHWnd(),
 | |||
|  | 	//		HWND_TOP,
 | |||
|  | 	//		(screenWidth - width) / 2,
 | |||
|  | 	//		(screenHeight - height) / 2,
 | |||
|  | 	//		width,
 | |||
|  | 	//		height,
 | |||
|  | 	//		SWP_SHOWWINDOW | SWP_NOREDRAW);
 | |||
|  | 	//////////////////////////////////////////////////////////////////////////////////
 | |||
|  | } | |||
|  | 
 | |||
|  | void Application::setWindowText(tstring title) | |||
|  | { | |||
|  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
 | |||
|  | 	SetWindowText(GetHWnd(), title.c_str()); | |||
|  | 	// <20><><EFBFBD>浱ǰ<E6B5B1><C7B0><EFBFBD>⣬<EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD>Ĵ<DEB8><C4B4>ڴ<EFBFBD>Сʱ<D0A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	m_sTitle = title; | |||
|  | } | |||
|  | 
 | |||
|  | void Application::close() | |||
|  | { | |||
|  | 	// <20>رջ<D8B1>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
 | |||
|  | 	closegraph(); | |||
|  | } | |||
|  | 
 | |||
|  | void Application::enterScene(Scene * scene, bool save) | |||
|  | { | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
 | |||
|  | 	m_nextScene = scene; | |||
|  | 	// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ浱ǰ<E6B5B1><C7B0><EFBFBD><EFBFBD>
 | |||
|  | 	m_bSaveScene = save; | |||
|  | } | |||
|  | 
 | |||
|  | void Application::backScene() | |||
|  | { | |||
|  | 	// <20><>ջ<EFBFBD><D5BB>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룬<EFBFBD><EBA3AC>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
 | |||
|  | 	m_nextScene = m_sceneStack.top(); | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>浱ǰ<E6B5B1><C7B0><EFBFBD><EFBFBD>
 | |||
|  | 	m_bSaveScene = false; | |||
|  | } | |||
|  | 
 | |||
|  | void Application::_enterNextScene() | |||
|  | { | |||
|  | 	// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
 | |||
|  | 	if (m_sceneStack.size() && m_nextScene == m_sceneStack.top()) | |||
|  | 	{ | |||
|  | 		m_sceneStack.pop();					// ɾ<><C9BE>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	} | |||
|  | 	 | |||
|  | 	if (m_bSaveScene) | |||
|  | 	{ | |||
|  | 		m_sceneStack.push(m_currentScene);	// <20><>Ҫ<EFBFBD><D2AA><EFBFBD>浱ǰ<E6B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ŵ<EFBFBD>ջ<EFBFBD><D5BB>
 | |||
|  | 	} | |||
|  | 	else | |||
|  | 	{ | |||
|  | 		SAFE_DELETE(m_currentScene);		// <20><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
 | |||
|  | 	} | |||
|  | 	 | |||
|  | 	m_currentScene = m_nextScene;			// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	m_nextScene = nullptr;					// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>
 | |||
|  | } | |||
|  | 
 | |||
|  | void Application::quit() | |||
|  | { | |||
|  | 	m_bRunning = false; | |||
|  | } | |||
|  | 
 | |||
|  | void Application::end() | |||
|  | { | |||
|  | 	m_bRunning = false; | |||
|  | } | |||
|  | 
 | |||
|  | void Application::pause() | |||
|  | { | |||
|  | 	m_bPause = true; | |||
|  | } | |||
|  | 
 | |||
|  | bool Application::isRunning() | |||
|  | { | |||
|  | 	return m_bRunning && !m_bPause; | |||
|  | } | |||
|  | 
 | |||
|  | void Application::reset() | |||
|  | { | |||
|  | 	// <20><><EFBFBD>û<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
 | |||
|  | 	graphdefaults(); | |||
|  | 	setbkmode(TRANSPARENT); | |||
|  | 	setbkcolor(Color::black); | |||
|  | } | |||
|  | 
 | |||
|  | Scene * Application::getCurrentScene() | |||
|  | { | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
 | |||
|  | 	return m_currentScene; | |||
|  | } | |||
|  | 
 | |||
|  | LPCTSTR easy2d::Application::getVersion() | |||
|  | { | |||
|  | 	return _T("1.0.0"); | |||
|  | } | |||
|  | 
 | |||
|  | void Application::setFPS(DWORD fps) | |||
|  | { | |||
|  | 	// <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>֡<EFBFBD>ʣ<EFBFBD><CAA3>Ժ<EFBFBD><D4BA><EFBFBD>Ϊ<EFBFBD><CEAA>λ
 | |||
|  | 	LARGE_INTEGER nFreq; | |||
|  | 	QueryPerformanceFrequency(&nFreq); | |||
|  | 	m_nAnimationInterval.QuadPart = (LONGLONG)(1.0 / fps * nFreq.QuadPart); | |||
|  | } | |||
|  | 
 | |||
|  | int Application::getWidth() const | |||
|  | { | |||
|  | 	return m_nWidth; | |||
|  | } | |||
|  | 
 | |||
|  | int Application::getHeight() const | |||
|  | { | |||
|  | 	return m_nHeight; | |||
|  | } | |||
|  | 
 | |||
|  | void Application::free() | |||
|  | { | |||
|  | 	// <20>ͷų<CDB7><C5B3><EFBFBD><EFBFBD>ڴ<EFBFBD>
 | |||
|  | 	SAFE_DELETE(m_currentScene); | |||
|  | 	SAFE_DELETE(m_nextScene); | |||
|  | 	// <20><><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>ջ
 | |||
|  | 	while (m_sceneStack.size()) | |||
|  | 	{ | |||
|  | 		auto temp = m_sceneStack.top(); | |||
|  | 		SAFE_DELETE(temp); | |||
|  | 		m_sceneStack.pop(); | |||
|  | 	} | |||
|  | 	// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>
 | |||
|  | 	Timer::clearAllTimers(); | |||
|  | } | |||
|  | 
 | |||
|  | void Application::destory() | |||
|  | { | |||
|  | 	// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
 | |||
|  | 	free(); | |||
|  | 	// ʵ<><CAB5>ָ<EFBFBD><D6B8><EFBFBD>ÿ<EFBFBD>
 | |||
|  | 	s_pInstance = nullptr; | |||
|  | } |