標籤:cocos2dx vs2010 遊戲引擎 helloworld 遊戲
Cocos2dx就不廢話介紹了, 非常火的遊戲引擎,關鍵是它開源,可以免費下載、學習、開發,不用搞這麼多啟用的東西。下面以Cocos2dx 2.x為例說明這個平台的一些基本東西。雖然現在Cocos2dx早已去到3.x的穩定版本,但之所以選用Cocos2dx 2.x版本,主要是這方面的資料比較多,本來搞Cocos2dx的人就不多了,搞了也沒幾個人寫寫編程記錄,再去毫無資料只有一堆難以看懂的官方文檔的Cocos2dx 3.x,基本上等於瞎整。
首先,由於這引擎在Windows的主流平台是通過大家熟悉的C++寫出來的,所以Cocos2dx 2.x的開發,你首先要準備Visual Studio 2010以上的版本。如果你選用Cocos2dx 3.x還要支援準備Visual Studio 2012以上的版本。已經不支援Visual Studio 2008了,這就沒辦法了,怪怪下載一個完整安裝。網上一搜一堆,不說了。
之後,由於Cocos2dx 2.x在當今網站的最後一版2.2.6不再提供InstallWizardForVS2010.js這鬼東西,需要用python語言建立新的工程,因此你可以參看我之前的《【Python】Windows版本的Python開發環境的配置,Helloworld,Python中文問題,輸入輸出、條件、迴圈、數組、類》(點擊開啟連結)先配好Python2.x的環境。
然後,你才在Cocos2dx的中文官網(點擊開啟連結),如,拉到最下面,下載Cocos2dx 2.x版本。
具體為:http://54.192.159.100/cocos2d-x-2.2.6.zip?fid=D2qKo-*f7vaAbUj7fijGQlgs5hzdkV4YAAAAAOeOX4E0-gk5fRKd*Y-Bb8j7lCvn&mid=666&threshold=150&tid=5D3FD9855047216E67D27C85E859FC2D&srcid=119&verno=1
下載之後,得到一個cocos2d-x-2.2.6.zip,解壓,這個解壓位置就是你以後cocos2dx的開發環境、工程的所在目錄,和php是一樣的,不好遷移,請小心選擇。
在你的cocos2dx的解壓目錄找到build-win32.bat這東西,雙擊運行。
經曆如下的一個漫長的編譯過程:
搞好之後,會出現如下的一個介面,cocos2dx官方提供的一大堆例子,有興趣看看之後,可以直接關閉。
至此,Cocos2dx的配置完成。
下面建立一個屬於我們自己的Helloworld,不要用官方的例子,根本看不出什麼端倪。
利用命令列進入.\cocos2d-x-2.2.6\tools\project-creator這個檔案夾,利用python命令,如,建立一個工程。
create_project.py -project 你的工程檔案夾名稱 -package 包名 -language 開發語言(基本上為cpp,不排除有大神精通肥豬流的Lua,也不建議使用javascript開發!)
在建立的過程中,可能會有如的報錯,不用管,因為你建立的MyDemo工程已經成功出現在.\cocos2d-x-2.2.6\projects檔案夾了,進入.\cocos2d-x-2.2.6\projects\MyDemo\proj.win32開啟HelloCpp.sln,開始利用Cocos2dx引擎(架構)在Windows上開發遊戲。
你可以觀察到在.\cocos2d-x-2.2.6\projects\MyDemo,出現proj.android、proj.ios等平台的檔案夾,這裡意味著,你可以在這些平台同樣利用Cocos2dx引擎(架構)進行開發。不是說一個平台開發,多平台共同編譯……
開啟HelloCpp.sln之後,等待Visual Studio 2010載入一大堆外部庫之後,你可以看到如下的檔案結構:
首先,你要明白一個概念,Cocos2dx中最簡單的Helloworld,是由一個叫Helloworld的情境、然後在這個Helloworld情境上放上一個Helloworld字串所組成的,
官方初始的Helloworld還在Helloworld這個情境中放上背景圖片、關閉按鈕等雜七雜八的東西,讓Helloworld檔案看起來比較複雜。
我們先從的main.cpp與AppDelegate.cpp入手,先設定好程式的一些基本東西。
首先是main.cpp,這東西的主函數就5行代碼,將其關於程式標題與視窗尺寸的18、19行進行修改,如下:
#include "main.h"#include "AppDelegate.h"#include "CCEGLView.h"USING_NS_CC;int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // create the application instance AppDelegate app; CCEGLView* eglView = CCEGLView::sharedOpenGLView(); eglView->setViewName("HelloWorld");//修改程式啟動並執行標題為Helloworld eglView->setFrameSize(1024, 768);//修成程式啟動並執行尺寸為1024x768 return CCApplication::sharedApplication()->run();}
其餘代碼看不懂暫時先不要管,就像你當初學C語言,不必在乎#include<stdio.h>與void main(){}是什麼鬼,你首先要會改printf()中的內容。關於引入、函數這些東西,回頭再來學。
之後,還沒有改完,對AppDelegate.cpp進行修改,把第22行的幀數調試資訊關了,第25行的幀數有興趣可以改下,不過改了也看不出效果,修改如下:
#include "AppDelegate.h"#include "HelloWorldScene.h"USING_NS_CC;AppDelegate::AppDelegate() {}AppDelegate::~AppDelegate() {}bool AppDelegate::applicationDidFinishLaunching() { // initialize director CCDirector* pDirector = CCDirector::sharedDirector(); CCEGLView* pEGLView = CCEGLView::sharedOpenGLView(); pDirector->setOpenGLView(pEGLView); // turn on display FPS pDirector->setDisplayStats(false);//關閉調試資訊 // set FPS. the default value is 1.0/60 if you don't call this pDirector->setAnimationInterval(1.0 / 60);//這裡是設定遊戲啟動並執行幀數鎖定為60,一般牛B機器、牛B的遊戲都是鎖這個幀數,30幀是低配 // create a scene. it's an autorelease object CCScene *pScene = HelloWorld::scene(); // run pDirector->runWithScene(pScene); return true;}// This function will be called when the app is inactive. When comes a phone call,it's be invoked toovoid AppDelegate::applicationDidEnterBackground() { CCDirector::sharedDirector()->stopAnimation(); // if you use SimpleAudioEngine, it must be pause // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();}// this function will be called when the app is active againvoid AppDelegate::applicationWillEnterForeground() { CCDirector::sharedDirector()->startAnimation(); // if you use SimpleAudioEngine, it must resume here // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();}其餘那些什麼初始化代碼之類,看不懂,先不要管,也不要改。
之後,對整個程式的核心,管理HelloWorld這個情境的HelloWorldScene.cpp進行修改,放上屬於我們自己的東西,去掉官方的東西。主要對HelloWorldScene.cpp中的初始化參數bool HelloWorld::init(){}進行修改,其餘不要動,整個HelloWorldScene.cpp修改如下:
#include "HelloWorldScene.h"USING_NS_CC;CCScene* HelloWorld::scene(){ // 'scene' is an autorelease object CCScene *scene = CCScene::create(); // 'layer' is an autorelease object HelloWorld *layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){//保留已經存在的初始化部分,不要進行修改,開始 if ( !CCLayer::init() ) { return false; } CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); //保留已經存在的初始化部分,不要進行修改,結束 CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 96);//聲明一個標籤文本Helloworld,其字型為Arial,字型大小為96 pLabel->setPosition(ccp(origin.x + visibleSize.width/2,//設定標籤文本的位置ccp是必須的,visibleSize.width/2為螢幕的中央,前面的origin.x是必須加上,用於多平台固定好位置 origin.y + visibleSize.height/2));//y部分同理 this->addChild(pLabel, 1);//把這個標籤文本Helloworld放到情境中,層疊關係為1,相當於css中的z-index,這個數字越大,越在上面 return true;}void HelloWorld::menuCloseCallback(CCObject* pSender){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");#else CCDirector::sharedDirector()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0);#endif#endif}
利用Ctrl+F5運行,或者點擊上方的運行按鈕則看到如下效果:
如果在編譯的時候,遇到如的“LINK : fatal error LNK1123: 轉換到 COFF 期間失敗: 檔案無效或損壞”錯誤:
那不關Cocos2dx的問題,是由於電腦中有多個Visual Studio衝突,或者之前版本的Visual Studio沒有卸載乾淨。當前系統中存在兩個cvtres.exe檔案,版本不同就會有問題了。我們讓VS2010直接使用系統的cvtres.exe程式。重新命名或刪除:(vs2010安裝的位置).\VC\bin\cvtres.exe
,我就把cvtres.exe搞成_cvtres.exe完事。
最後總結一下,Cocos2dx的Helloworld比起SSH算是簡單多了,代碼清晰。關鍵是注意好版本,正如php5.5之後不支援windows2003這樣的問題,你必須搞清楚Visual Studio 2010隻能支援Cocos2dx 2.x之類的。就是安裝可能有些繁瑣,畢竟python環境的安裝對於很多人來說比較陌生,Visual Studio 2010的安裝的耗時實在是無力吐槽了,再加上Cocos2dx 2.x的編譯過程,就是比較久。最主要網上許多蛋疼的資料就不說了……
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
【Cocos2dx】Windows平台下Cocos2dx 2.x的下載、安裝、配置,打造自己的Helloworld