2015-10-06 59 views
0

我是遊戲開發新手。Cocos2d/Box2d。如何從tilemap .tmx生成物理體?

我試圖做的是tilemap的我已經從瓷磚創建我的遊戲作爲一個物理體(IES),我使用C++和Boxd2加載.tmx。我的瓷磚地圖只顯示我想要碰撞的瓷磚,如地板和一些平臺。

重要的是要注意,我在Windows編程中是重要的,所有的文檔,我發現大約IOS或舊版本,像b2BodyDef bodyDef一些功能似乎並沒有工作。

+0

你是如何創造身體的?平鋪不會生成物理本身 - 您可以創建一些形狀,然後在您的應用程序中創建基於此的物理 –

回答

0

我目前做的,你在我最新的遊戲被描述的一致,唯一的區別是我用cocostudio建立在我的遊戲的一切,包括我的地圖。我這樣做的原因是,我可以控制所需的一切,我使用預先定義的命名約定來指示物理邊緣,然後我讀取並確定其尺寸並構建邊緣體。

高度概括

繼續在這裏之前是我在做你.tmx tilemap的假設。對於想要創建爲物理對象的對象,您有唯一的標識符 (您可以使用它的名稱將其拉出並檢查它)。

  1. 閱讀.tmx文件並將其提供給您的fileParser。
  2. 獲取所有「節點」,「精靈」,其中包含您的身體標識符。
  3. 由於您使用的是瓷磚貼圖,因此我假設所有的碰撞區域都是正方形。
  4. 給節點列表您PhysicsBodyFactory和使用下面的代碼來構建您所需要的機構。

僞上下的代碼下面

auto tileNode = listOfNodes.at(nodeIndex); 

b2BodyDef tileBodyDef; 
tileBodyDef.type = b2_staticBody; 
tileBodyDef.position.Set(tileNode->getPositionX()/Pixel_To_Meter_Ratio, 
         tileNode->getPositionY()/ Pixel_To_Meter_Ratio); 

auto b2PolygonShape tileShape; 
tileShape.SetAsBox(tileNode->getBoundingBox().size.width/Pixel_To_Meter_Ratio, 
        tileNode->getBoundingBox().size.height/Pixel_To_Meter_Ratio); 

auto tileBody = physicsWorld->CreateBody(tileBodyDef); 
// This can be used later on when you want to have different reactions for different collisions.  
tileBody->SetUserData("CollidableTile"); 

這將創建和放置這些對象在你的物理世界,讓在那裏的其他機構與它相撞。如果您的球員在世界上有自己的身體,基本的碰撞將爲您處理。

我使用cocostudio作爲比UI工具,這將完全涵蓋這更寫一篇博客文章。我希望這可以幫助,請讓我知道這個解決方案是你在找什麼。