cocos2d-x C++ 工程初探
經過較為繁瑣的環境搭建後,我們終於執行出了一個helloworld視窗,可以正式上手cocos了
現在我們就從改程式碼開始玩起
視窗
我們之前講到AppDelegate類是程式的入口,所以和視窗有關的設定也在這個類裡,開啟我們的AppDelegate.cpp,從AppDelegate::applicationDidFinishLaunching
這個成員函式看起
函式中有幾行程式碼涉及到遊戲的一些設定
這裡面有幾個基礎的可選項:
glview = GLViewImpl::createWithRect( "Test", cocos2d::Rect( 0, 0, designResolutionSize.width, designResolutionSize.height ) );//設定視窗的尺寸 director->setDisplayStats(true);//顯示FPS director->setAnimationInterval(1.0f / 60);//設定每幀的間隔 glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);//設定遊戲的解析度
如果把setDisplayStats
的引數改成false,可以發現helloworld中左下角的FPS和Drawcall資訊消失了,你也可以自己動手試試其他的引數
視窗大小
往上翻應該不難找到這幾行程式碼
cocos有一個叫做Size的類,這個尺寸的width和height兩個成員是我們經常需要使用的,在設定精靈的尺寸,座標的時候會經常使用到
Copystatic cocos2d::Size designResolutionSize = cocos2d::Size(480, 320); static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320); static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768); static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536);
這是cocos給我們提供的常用的視窗尺寸,我們可以發現,現在使用的是designResolutionSize
這個尺寸,480,320
是比較小的,可以把視窗的尺寸設定成mediumResolutionSize
,它的size是(1024, 768)
將下面這個designResolutionSize
引數改成mediumResolutionSize
即可:
執行:
畫面解析度
現在雖然我們視窗的尺寸設定成了1024*768
,但是實際上游戲窗口裡的解析度還是480*320
個畫素
開啟專案目錄的Resources資料夾我們可以看到HelloWorld.png
這個圖片的解析度是195*270
你可以試試把我們換上去的mediumResolutionSize
largeResolutionSize
,這個圖示在窗口裡還是480*320
那麼大的
精靈
精靈(Sprite)是 cocos裡的一個概念,我們helloworld介面的cocos的logo就是一個精靈,現在我們嘗試把他換成別的圖片,選一張圖片放到專案目錄的Resources資料夾內
控制這個精靈的程式碼在HelloWorldScene.cpp
內,開啟找到這段程式碼:
把HelloWorld.png
修改成你放入Resources內的圖片名即可
執行:
座標系統
要了解cocos的座標系統,首先要介紹一下Vec2類,有接觸過圖形庫或者遊戲引擎的同學對這種命名應該都不陌生,這個類代表的是二維向量,有x和y這兩個成員,我們在設定遊戲物體的座標的時候會使用到
同樣在HelloWorldScene.cpp中,在建立sprite精靈的地方有這麼幾行程式碼,就是我們剛才換圖片的那裡
// position the sprite on the center of the screen
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
這行程式碼就是使用setPosition設定初始化好的精靈(你的圖片)的座標,有意思的來了,座標中出現了兩個物件,一個是visibleSize和origin,visibleSize這個物件儲存了遊戲世界的尺寸,也就是我們能夠看到的視窗的尺寸,設定遊戲的解析度可以影響這個值,origin指的是視窗左下角的點在遊戲世界中的位置
在設定座標的程式碼下加入這樣一行程式碼輸出一些資訊(log函式可以當作c/c++的printf使用)
log("visibleSize.width=%f, visibleSize.height=%f, origin.x=%f, origin.y=%f",
visibleSize.width,
visibleSize.height,
origin.x,
origin.y);
執行,檢視輸出視窗
可以看到visibleSize和origin的值
再回看設定座標的程式碼
// position the sprite on the center of the screen
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
實際上意思很簡單,就是set到了視窗正中間的位置,我們把座標改成
Vec2(visibleSize.width/4 + origin.x, visibleSize.height/2 + origin.y)
向左移動了1/4視窗寬度的距離
最後一句
this->addChile(sprite, 0);
是將這個精靈加入到當前圖層中,引數0代表最底層,如果不加這行程式碼,sprite不會成為遊戲世界中的一員,編譯出來之後就不會顯