亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Cocos2d-x3.0游戲實例之《別救我》第二篇——創建物理世界

發布時間:2020-07-08 18:17:21 來源:網絡 閱讀:379 作者:musicvs 欄目:游戲開發


這篇我要給大家介紹兩個知識點:

1. 創建游戲物理世界

2. 沒了(小若:我噗)

 

害怕了?不用擔心,這太簡單了~!

 

笨木頭花心貢獻,啥?花心?不呢,是用心~

轉載請注明,原文地址:http://www.benmutou.com/blog/archives/804

文章來源:笨木頭與游戲開發

 

3.0新亮點,史上最簡單的物理引擎

在Cocos2d-x3.0里使用物理引擎,會很有快感,因為很多繁瑣的東西它都幫我們封裝好了。

 

那么,我要開始創建游戲的關卡場景了,大家跟緊了。

 

我們給關卡場景命名為TollgateScene,頭文件如下:

  1. #ifndef TollgateScene_H

  2. #define TollgateScene_H

  3. #include "cocos2d.h"

  4. USING_NS_CC;

  5. classTollgateScene:publicLayer

  6. {

  7. public:

  8.     ~TollgateScene();

  9. staticScene*scene();

  10.     CREATE_FUNC(TollgateScene);

  11. virtualboolinit();

  12. virtualvoidonExit()override;

  13. };

  14. #endif

頭文件沒有什么特別的,和普通的場景頭文件一樣。

然后,來看看cpp文件:

  1. #include "TollgateScene.h"

  2. #include "BackgroundLayer.h"

  3. TollgateScene::~TollgateScene()

  4. {

  5. }

  6. Scene*TollgateScene::scene()

  7. {

  8. autoscene=Scene::createWithPhysics();

  9. /* 微重力世界 */

  10.     Vect gravity(0,-0.5f);

  11.     scene->getPhysicsWorld()->setGravity(gravity);

  12. /* 開啟測試模式 */

  13.     scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);

  14. //創建一個邊界

  15.     Size visibleSize=Director::getInstance()->getVisibleSize();

  16. /*

  17.         創建一個空心盒子剛體,作為我們游戲世界的邊界(避免游戲內的物體跑出屏幕)

  18.         參數分別是剛體大小、材質(其實就是一些預設的配置數據)、邊線厚度

  19.     */

  20. autobody=PhysicsBody::createEdgeBox(Size(visibleSize.width, visibleSize.height), PHYSICSBODY_MATERIAL_DEFAULT,3);

  21. /* 創建一個節點,用于承載剛體,這樣剛體就能參與到游戲的物理世界 */

  22. autonode=Node::create();

  23.     node->setPosition(Point(visibleSize.width/2, visibleSize.height/2));

  24.     node->setPhysicsBody(body);

  25.     scene->addChild(node);

  26. autolayer=TollgateScene::create();

  27.     scene->addChild(layer,10);

  28. returnscene;

  29. }

  30. boolTollgateScene::init()

  31. {

  32. if(!Layer::init())

  33. {

  34. returnfalse;

  35. }

  36. returntrue;

  37. }

  38. voidTollgateScene::onExit()

  39. {

  40.     Layer::onExit();

  41. }

太復雜了,我要分幾個部分來講解(小若:但是你一開始說很簡單的啊!)

 

集成物理世界的場景

在3.0里要創建一個物理世界,很簡單,之前我們創建場景,調用的是Scene::create()。如果要創建物理場景,那就:

auto scene = Scene::createWithPhysics();

于是這個場景就具備了物理世界的功能,不要再做什么其他處理了。

 

設置游戲的重力方向

接下來我們要為物理世界設定一個重力方向,這個方向隨大家喜歡,我也是隨意設置的,不同的方向對游戲的操作也有一定的影響,說不定還更有意思。

要對物理世界進行操作,就要通過場景來獲取物理世界對象,然后再進行操作:

/* 微重力世界 */

Vect gravity(0, -0.5f);

scene->getPhysicsWorld()->setGravity(gravity);

 

/* 開啟測試模式 */

scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);

 

Vect就是一個向量,代表x和y方向,其實它就是一個Point對象。

 

后面好像亂入了一句代碼?沒錯,那是開啟調試模式的,這個功能很爽。開啟調試模式的話,所有物體對象的形狀節點什么的都會被畫出來,方便我們測試。當然,有個參數,可以設置你想要繪制的那些部分。

 

用最簡單的方式創建剛體

一般情況下,我們要創建剛體,還要先創建形狀,然后各種設置。在3.0里,不需要,只需要一句代碼:

/*

創建一個空心盒子剛體,作為我們游戲世界的邊界(避免游戲內的物體跑出屏幕)

參數分別是剛體大小、材質(其實就是一些預設的配置數據)、邊線厚度

*/

auto body = PhysicsBody::createEdgeBox(Size(visibleSize.width, visibleSize.height), PHYSICSBODY_MATERIAL_DEFAULT, 3);

 

createEdgeBox函數是創建空心盒子剛體,還有更多函數大家看看PhysicsBody的頭文件就知道了。

在createEdgeBox函數里,已經把形狀創建好,并添加給剛體了。

 

讓剛體加入到物理世界

/* 創建一個節點,用于承載剛體,這樣剛體就能參與到游戲的物理世界 */

auto node = Node::create();

node->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));

node->setPhysicsBody(body);

scene->addChild(node);

別忘了,現在的物理世界就是我們的場景,場景就是世界,世界就是場景。按照這種思想,剛體要加入到物理世界,那就要添加到場景里,而剛體怎么添加到場景里呢?直接addChild?

 

不~!場景是用來添加節點對象的,于是,我們把剛體放到節點里,然后把節點添加到場景里。懂了吧?(小若:哦~原來如此啊(完全沒聽懂))

 

其實很好理解,剛體只是一些模擬數據而已,它是看不見的,而游戲里面的對象需要用各種圖片、動畫來表現。

因此,節點對象用于表現,剛體對象用于物理模擬,兩者結合,就完美了。

 

剛體添加到節點之后,可以通過getPhysicsBody函數來獲取。

 

運行效果

OK,準備看看運行效果吧,在此之前,先改改AppDelegate.cpp文件,在applicationDidFinishLaunching函數里做一些配置:

  1. boolAppDelegate::applicationDidFinishLaunching(){

  2. // initialize director

  3. autodirector=Director::getInstance();

  4. autoglview=director->getOpenGLView();

  5. if(!glview){

  6.         glview=GLView::create("Don't Save Me!");

  7.         director->setOpenGLView(glview);

  8. }

  9. /* 設置Win32屏幕大小為480X800, */

  10.     glview->setFrameSize(480,800);

  11. /* 簡單的屏幕適配,按比例拉伸,可能有黑邊 */

  12.     glview->setDesignResolutionSize(480,800, ResolutionPolicy::SHOW_ALL);

  13.     director->setDisplayStats(true);

  14.     director->setAnimationInterval(1.0/60);

  15. /* 初始場景為關卡場景 */

  16. autoscene=TollgateScene::scene();

  17.     director->runWithScene(scene);

  18. returntrue;

  19. }

屏幕大小設置為480X800(這個隨意了,只是windows運行時的大小而已)。

游戲設計大小設置為480X800,這個大小決定了游戲素材的規格,我只使用一套資源來做適配。然后,這是一個豎屏方向的游戲。

屏幕適配方式我使用最簡單的SHOW_ALL模式,在某些手機上會有黑邊。

 

然后初始運行場景為TollgateScene,好了,運行游戲,效果如圖:

 

Cocos2d-x3.0游戲實例之《別救我》第二篇——創建物理世界

《別救我》第二篇-截圖-運行效果

 

留意一下屏幕邊緣的紅色線條,這就是我們創建的空心盒子物體,開啟了調試模式,所以會把它繪制出來。

有了這個空心盒子,在盒子里的物體就不會隨便跑出屏幕外面了。

 

好了,下一篇,我們要加入游戲的背景。

 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洛宁县| 安吉县| 廉江市| 乐平市| 敖汉旗| 定日县| 偃师市| 乡城县| 平罗县| 西乌| 柳河县| 翁源县| 长垣县| 宁阳县| 长泰县| 安远县| 抚顺市| 怀安县| 玉屏| 栖霞市| 林州市| 井冈山市| 射阳县| 洞头县| 萨迦县| 桦南县| 马边| 普格县| 嘉荫县| 盐山县| 平南县| 洮南市| 扶余县| 潞西市| 灌云县| 青神县| 泰顺县| 边坝县| 镇坪县| 涞源县| 绥滨县|