COCOS2DX课程游戏主循环.doc
上传人:sy****28 上传时间:2024-09-11 格式:DOC 页数:17 大小:95KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

COCOS2DX课程游戏主循环.doc

COCOS2DX课程游戏主循环.doc

预览

免费试读已结束,剩余 7 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

本文由麦可网HYPERLINK"http://www.microoh.com/"http://www.microoh.com/收集整理,转载请注明出处。cocos2d-x学习MoonWarriorsx(四)小节一:游戏主循环;终于抽时间把这个游戏写完了。由于没有自拍神器,所以把它移植到了Android上,用我的戴妃跑的很欢啊。自此,我算是完成了一个功能比较完善的游戏了。麻雀虽小,五脏俱全,该有的都有,不该有的估计也有,嘿嘿。这几天把写这个游戏的经历和学习过程整理一下,多写几篇博客,就当做记笔记了。首先还是就我个人的理解,讲讲游戏引擎的处理流程。其实游戏逻辑简单化就是一个死循环,如下:boolgame_is_running=true;while(game_is_running){update_game();display_game();}我们所看到的游戏画面,游戏音乐,以及一些触控,输入等。在逻辑上就是这么一个死循环。这个循环一直再跑,期间会处理一些列的事件,简化之就是上面的两个函数。cocos2d-x引擎也是如此,所有的逻辑都是在这个主循环下实现的。下面看看cocos2dx在各平台上的主循环实现。1.Win看它的main.cpp#include"main.h"#include"../Classes/AppDelegate.h"#include"CCEGLView.h"USING_NS_CC;intAPIENTRY_tWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);//createtheapplicationinstanceAppDelegateapp;CCEGLView*eglView=CCEGLView::sharedOpenGLView();eglView->setFrameSize(2048,1536);//Theresolutionofipad3isverylarge.Ingeneral,PC'sresolutionissmallerthanit.//Soweneedtoinvoke'setFrameZoomFactor'(onlyvalidondesktop(win32,mac,linux))tomakethewindowsmaller.eglView->setFrameZoomFactor(0.4f);returnCCApplication::sharedApplication()->run();//注意这里}前面都不要关心,只是用来传递OpenGL窗口的,关键是最后一句,CCApplication::sharedApplication()->run()。看这个run函数:intCCApplication::run(){PVRFrameEnableControlWindow(false);//Mainmessageloop:MSGmsg;LARGE_INTEGERnFreq;LARGE_INTEGERnLast;LARGE_INTEGERnNow;QueryPerformanceFrequency(&nFreq);QueryPerformanceCounter(&nLast);//Initializeinstanceandcocos2d.if(!applicationDidFinishLaunching()){return0;}CCEGLView*pMainWnd=CCEGLView::sharedOpenGLView();pMainWnd->centerWindow();ShowWindow(pMainWnd->getHWnd(),SW_SHOW);while(1)//注意这里,主循环来了{if(!PeekMessage(&msg,NULL,0,0,PM_REMOVE)){//Getcurrenttimetick.QueryPerformanceCounter(&nNow);//Ifit'sthetimetodrawnextframe,drawit,elsesleepawhile.if(nNow.QuadPart-nLast.QuadPart>m_nAnimationInterval.QuadPart){nLast.QuadPart=nNow.QuadPart;CCDirector::sharedDire