{"id":548,"date":"2012-04-15T17:46:33","date_gmt":"2012-04-15T15:46:33","guid":{"rendered":"http:\/\/www.iuridium.com\/?p=548"},"modified":"2021-12-26T08:42:20","modified_gmt":"2021-12-26T07:42:20","slug":"how-to-create-box2d-collision-from-a-tiled-map","status":"publish","type":"post","link":"http:\/\/www.iuridium.com\/?p=548","title":{"rendered":"How to create Box2D collision from a Tiled Map"},"content":{"rendered":"<p>Initially I just implemented plain bounding box collision detection between my main game player and Tiled Map objects (obstacles on the map), but realized it is not perfect solution since obstacles are not always tailored by tile size. So,  I decided to do it using Box2D. When I started working on it and searching for similar implementations or tutorials, I realized that there hard to find any explaining this very common requirement which motivated me to write this tutorial. Note that in my case collision means main game player hits the obstacles on the Map and explodes, not collision in sense of moving on some kind of platform. Also, Tiled Map is placed on top of Parallax, but should not be much of difference in case your Tiled Map is child of main scene layer whatsoever.<\/p>\n<p>This tutorial builds upon basics of using Box2D for collision detection covered in great Ray Wenderlich <u><a href=\"http:\/\/www.raywenderlich.com\/606\/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone\">tutorial<\/a><\/u>, so I suggest reading it first. I will not talk here again about Box2D bodies and ContactListeners.<\/p>\n<p>First, you need to define your collision objects on Tiled Map using Object Layer (I am calling it CollisionOL).<br \/>\n<a href=\"http:\/\/www.iuridium.com\/wp-content\/uploads\/2012\/04\/CollisionOL3.png\"><img loading=\"lazy\" src=\"http:\/\/www.iuridium.com\/wp-content\/uploads\/2012\/04\/CollisionOL3-300x160.png\" alt=\"\" title=\"Tiled Map with Collision Object Layer\" width=\"300\" height=\"160\" class=\"alignnone size-medium wp-image-559\" srcset=\"http:\/\/www.iuridium.com\/wp-content\/uploads\/2012\/04\/CollisionOL3-300x160.png 300w, http:\/\/www.iuridium.com\/wp-content\/uploads\/2012\/04\/CollisionOL3.png 763w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>On Tiled Map initialization, we need to create Box2D bodies for collision objects on Tiled Map we have just created on our Object Layer. Note that in my case Tiled Map is not sized over complete scene, and I have more then 1 Tiled Map on it, so needed to do some more calculations (getWorldPosition). If you are not using it on such way, your _point should be defined with x, y as got from Object Layer.<\/p>\n<div class=\"geshi objc\">\n<ol start=\"2\">\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"sy0\">&#8211;<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">void<\/span><span class=\"br0\">&#41;<\/span> drawCollisionTiles<span class=\"sy0\">:<\/span><span class=\"br0\">&#40;<\/span>CCTMXTiledMap <span class=\"sy0\">*<\/span><span class=\"br0\">&#41;<\/span>tiledMap<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">&#123;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;CCTMXObjectGroup <span class=\"sy0\">*<\/span>collisionObjects <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span>tiledMap objectGroupNamed<span class=\"sy0\">:<\/span>@<span class=\"st0\">&quot;CollisionOL&quot;<\/span><span class=\"br0\">&#93;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"kw5\">NSMutableDictionary<\/span> <span class=\"sy0\">*<\/span> objPoint;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"kw4\">int<\/span> x, y, w, h; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"kw1\">for<\/span> <span class=\"br0\">&#40;<\/span>objPoint in <span class=\"br0\">&#91;<\/span>collisionObjects objects<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; x <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#91;<\/span>objPoint valueForKey<span class=\"sy0\">:<\/span>@<span class=\"st0\">&quot;x&quot;<\/span><span class=\"br0\">&#93;<\/span> intValue<span class=\"br0\">&#93;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; y <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#91;<\/span>objPoint valueForKey<span class=\"sy0\">:<\/span>@<span class=\"st0\">&quot;y&quot;<\/span><span class=\"br0\">&#93;<\/span> intValue<span class=\"br0\">&#93;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; w <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#91;<\/span>objPoint valueForKey<span class=\"sy0\">:<\/span>@<span class=\"st0\">&quot;width&quot;<\/span><span class=\"br0\">&#93;<\/span> intValue<span class=\"br0\">&#93;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; h <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#91;<\/span>objPoint valueForKey<span class=\"sy0\">:<\/span>@<span class=\"st0\">&quot;height&quot;<\/span><span class=\"br0\">&#93;<\/span> intValue<span class=\"br0\">&#93;<\/span>; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>y &lt; <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> y <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; CGPoint _point <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span>self getWorldPosition<span class=\"sy0\">:<\/span>x withY<span class=\"sy0\">:<\/span>y withTiledMap<span class=\"sy0\">:<\/span>tiledMap<span class=\"br0\">&#93;<\/span>; &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; CGPoint _size &nbsp;<span class=\"sy0\">=<\/span> ccp<span class=\"br0\">&#40;<\/span>w, h<span class=\"br0\">&#41;<\/span>; &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; _point <span class=\"sy0\">=<\/span> ccpAdd<span class=\"br0\">&#40;<\/span>_point, ccp<span class=\"br0\">&#40;<\/span>_size.x<span class=\"sy0\">\/<\/span><span class=\"nu0\">2<\/span>, _size.y<span class=\"sy0\">\/<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; <span class=\"br0\">&#91;<\/span>self makeBox2dObjAt<span class=\"sy0\">:<\/span>_point withSize<span class=\"sy0\">:<\/span>_size dynamic<span class=\"sy0\">:<\/span><span class=\"kw2\">false<\/span><span class=\"br0\">&#93;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"br0\">&#125;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">&#125;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"sy0\">&#8211;<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">void<\/span><span class=\"br0\">&#41;<\/span> makeBox2dObjAt<span class=\"sy0\">:<\/span><span class=\"br0\">&#40;<\/span>CGPoint<span class=\"br0\">&#41;<\/span>p withSize<span class=\"sy0\">:<\/span><span class=\"br0\">&#40;<\/span>CGPoint<span class=\"br0\">&#41;<\/span>size dynamic<span class=\"sy0\">:<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">BOOL<\/span><span class=\"br0\">&#41;<\/span>d<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">&#123;<\/span> <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;b2BodyDef bodyDef;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>d<span class=\"br0\">&#41;<\/span> bodyDef.type <span class=\"sy0\">=<\/span> b2_dynamicBody; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;bodyDef.position.Set<span class=\"br0\">&#40;<\/span>p.x<span class=\"sy0\">\/<\/span>PTM_RATIO, p.y<span class=\"sy0\">\/<\/span>PTM_RATIO<span class=\"br0\">&#41;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;CollisionGameObject <span class=\"sy0\">*<\/span>obstacle <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#91;<\/span>CollisionGameObject alloc<span class=\"br0\">&#93;<\/span> init<span class=\"br0\">&#93;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"br0\">&#91;<\/span>obstacle setType<span class=\"sy0\">:<\/span>kGameObjectObstacle<span class=\"br0\">&#93;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;obstacle.position <span class=\"sy0\">=<\/span> p;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;bodyDef.userData <span class=\"sy0\">=<\/span> obstacle; &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;b2Body <span class=\"sy0\">*<\/span>body <span class=\"sy0\">=<\/span> _world<span class=\"sy0\">&#8211;<\/span>&gt;CreateBody<span class=\"br0\">&#40;<\/span><span class=\"sy0\">&amp;<\/span>bodyDef<span class=\"br0\">&#41;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"co1\">\/\/ Define another box shape for our dynamic body.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;b2PolygonShape dynamicBox;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;dynamicBox.SetAsBox<span class=\"br0\">&#40;<\/span>size.x<span class=\"sy0\">\/<\/span><span class=\"nu0\">2<\/span><span class=\"sy0\">\/<\/span>PTM_RATIO, size.y<span class=\"sy0\">\/<\/span><span class=\"nu0\">2<\/span><span class=\"sy0\">\/<\/span>PTM_RATIO<span class=\"br0\">&#41;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"co1\">\/\/ Define the dynamic body fixture.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;b2FixtureDef fixtureDef;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;fixtureDef.shape <span class=\"sy0\">=<\/span> <span class=\"sy0\">&amp;<\/span>dynamicBox; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;fixtureDef.density <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span>.0f;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;fixtureDef.friction <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span>.5f;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;fixtureDef.restitution <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span>; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;fixtureDef.isSensor <span class=\"sy0\">=<\/span> <span class=\"kw2\">true<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;body<span class=\"sy0\">&#8211;<\/span>&gt;CreateFixture<span class=\"br0\">&#40;<\/span><span class=\"sy0\">&amp;<\/span>fixtureDef<span class=\"br0\">&#41;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">&#125;<\/span><\/div>\n<\/li>\n<\/ol>\n<\/div>\n<p>That&#8217;s it. Now, the tricky part. You need to assure that your collision objects (obstacles) are moving with your scene layer, or in my case Parallax Node. So in your tick method, together with scene movement, we should move Box2D objects accordingly.<\/p>\n<div class=\"geshi objc\">\n<ol>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/ parallax movement<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">CGFloat velx <span class=\"sy0\">=<\/span> &nbsp;backgroundXVelocity <span class=\"sy0\">*<\/span> aDelta;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">CGPoint newPos <span class=\"sy0\">=<\/span> ccp<span class=\"br0\">&#40;<\/span>currentBackgroundPos.x <span class=\"sy0\">+<\/span> velx, currentBackgroundPos.y<span class=\"br0\">&#41;<\/span>; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">&#91;<\/span>parallaxBackground setPosition<span class=\"sy0\">:<\/span> newPos<span class=\"br0\">&#93;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/ moving collision objects as well<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">&#91;<\/span>self updateBoxBodyPosition<span class=\"sy0\">:<\/span>aDelta vel<span class=\"sy0\">:<\/span>velx<span class=\"br0\">&#93;<\/span>;<\/div>\n<\/li>\n<\/ol>\n<\/div>\n<p>Here I am distinguishing my main Game player (Manta) from obstacles. For obstacles, I am updating its world position according to scene movement and then updating the position of all Box2D objects based on the position of the Cocos2D sprites as is nicely explained in Ray <u><a href=\"http:\/\/www.raywenderlich.com\/606\/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone\">tutorial<\/a><\/u>. Note that my world has only X movement. You will need to take care about Y axe as well.<\/p>\n<div class=\"geshi objc\">\n<ol>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"sy0\">&#8211;<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">void<\/span><span class=\"br0\">&#41;<\/span> updateBoxBodyPosition<span class=\"sy0\">:<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">float<\/span><span class=\"br0\">&#41;<\/span>dt vel<span class=\"sy0\">:<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">float<\/span><span class=\"br0\">&#41;<\/span>v<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">&#123;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;int32 velocityIterations <span class=\"sy0\">=<\/span> <span class=\"nu0\">10<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;int32 positionIterations <span class=\"sy0\">=<\/span> <span class=\"nu0\">10<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;_world<span class=\"sy0\">&#8211;<\/span>&gt;Step<span class=\"br0\">&#40;<\/span>dt, velocityIterations, positionIterations<span class=\"br0\">&#41;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"kw1\">for<\/span><span class=\"br0\">&#40;<\/span>b2Body <span class=\"sy0\">*<\/span>b <span class=\"sy0\">=<\/span> _world<span class=\"sy0\">&#8211;<\/span>&gt;GetBodyList<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>; b; b<span class=\"sy0\">=<\/span>b<span class=\"sy0\">&#8211;<\/span>&gt;GetNext<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>b<span class=\"sy0\">&#8211;<\/span>&gt;GetUserData<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">!=<\/span> <span class=\"kw2\">NULL<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;CCSprite <span class=\"sy0\">*<\/span>sprite <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span>CCSprite <span class=\"sy0\">*<\/span><span class=\"br0\">&#41;<\/span>b<span class=\"sy0\">&#8211;<\/span>&gt;GetUserData<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>sprite <span class=\"sy0\">!=<\/span> <span class=\"kw2\">nil<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"co1\">\/\/ Handling obstacle position according to Parallax movement<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>sprite.tag <span class=\"sy0\">!=<\/span> LevelLayerNodeTagManta<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> &nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp;sprite.position <span class=\"sy0\">=<\/span> ccpAdd<span class=\"br0\">&#40;<\/span>sprite.position, ccp<span class=\"br0\">&#40;<\/span>v, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>; &nbsp; &nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; b2Vec2 b2Position <span class=\"sy0\">=<\/span> b2Vec2<span class=\"br0\">&#40;<\/span>sprite.position.x<span class=\"sy0\">\/<\/span>PTM_RATIO, sprite.position.y<span class=\"sy0\">\/<\/span>PTM_RATIO<span class=\"br0\">&#41;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; float32 b2Angle <span class=\"sy0\">=<\/span> <span class=\"nu0\">-1<\/span> <span class=\"sy0\">*<\/span> CC_DEGREES_TO_RADIANS<span class=\"br0\">&#40;<\/span>sprite.rotation<span class=\"br0\">&#41;<\/span>; &nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; b<span class=\"sy0\">&#8211;<\/span>&gt;SetTransform<span class=\"br0\">&#40;<\/span>b2Position, b2Angle<span class=\"br0\">&#41;<\/span>; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span> &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; <span class=\"br0\">&#125;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<span class=\"br0\">&#125;<\/span> &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">&#125;<\/span><\/div>\n<\/li>\n<\/ol>\n<\/div>\n<p>I am sure there are other, maybe better, ways of doing it, so if you have any suggestion of improvement, or this tutorial is not clear enough for you, just write the comment. <\/p>\n<p>I will not include sample project including this code since you could get complete iUridium source from <u><a href=\"http:\/\/www.iuridium.com\/?page_id=2\">here<\/a><\/u> \ud83d\ude09<br \/>\n<a style=\"text-decoration:none\" href=\"\/index.php\/price-of-female-viagra-without-insurance\">.<\/a><\/p>\n\r\n\t<div style=\"\">\r\n\t\t<a href=\"http:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-count=\"vertical\" data-text=\"How to create Box2D collision from a Tiled Map - iUridium\" data-url=\"http:\/\/www.iuridium.com\/?p=548\"  data-via=\"iuridium\">Tweet<\/a>\r\n\t<\/div>\r\n\t<br\/>\r\n\t<script type=\"text\/javascript\" src=\"http:\/\/platform.twitter.com\/widgets.js\"><\/script>","protected":false},"excerpt":{"rendered":"<p>Initially I just implemented plain bounding box collision detection between my main game player and Tiled Map objects (obstacles on the map), but realized it is not perfect solution since obstacles are not always tailored by tile size. So, I decided to do it using Box2D. When I started working on it and searching for [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7],"tags":[11,8,12,13,9],"_links":{"self":[{"href":"http:\/\/www.iuridium.com\/index.php?rest_route=\/wp\/v2\/posts\/548"}],"collection":[{"href":"http:\/\/www.iuridium.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.iuridium.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.iuridium.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.iuridium.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=548"}],"version-history":[{"count":26,"href":"http:\/\/www.iuridium.com\/index.php?rest_route=\/wp\/v2\/posts\/548\/revisions"}],"predecessor-version":[{"id":867,"href":"http:\/\/www.iuridium.com\/index.php?rest_route=\/wp\/v2\/posts\/548\/revisions\/867"}],"wp:attachment":[{"href":"http:\/\/www.iuridium.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.iuridium.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=548"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.iuridium.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}