如果您无法下载资料,请参考说明:
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