Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
extensions:tiledbox [2013/02/07 00:24] – [Tiledbox] 67.173.131.150extensions:tiledbox [2015/09/14 11:14] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +~~NOTOC~~
  
 +====== Tiledbox ======
 +
 +---- dataentry extension ----
 +type          : extension #or 'mod' if it requires changing the Sparrow source
 +author_mail   : matt62king@gmail.com Matt King
 +description   : An interface between Tiled, Box2D, and Sparrow #enter a short description of the extension
 +lastupdate_dt :  #the date you created the extension
 +compatible    : v1.X #the Sparrow version you tested the extension with
 +depends       : Box2d (Included) #if the ext. depends on others, list them here
 +tags          : TileMap, Tiled, Box2d, Physics #enter a few tags, separated by commas
 +homepage_url  :  #if the ext. has an URL (e.g. a Gist-page), add it here
 +download_url  : https://github.com/matt62king/TiledBox #a direct link to the download (e.g. the Gist-archive)
 +----
 +===== Usage =====
 +
 +TiledBox is an interface between Tiled, Box2D, and Sparrow. It is capable of rendering graphics and Box2D world based on a TMX file.
 +
 +TiledBox is pretty young right now. A lot of box2d functions are not yet support. The design of it is being based around a platform game. 
 +
 +Graphics rendering, body placement, collisions and movement are currently supported. 
 +
 +Implementation is very simple. 
 +
 +<code objc>
 +        mBXWorld = [BXWorld sharedWorldWithGravity:b2Vec2(0.0, 25.0) edgeInsets:BXWorldMakeEdgeInsets(-0.1, 10.0, -0.1, -0.1)];
 +        mBXWorld.autoAnimate = YES;
 +        mBXWorld.contactDelegate = self;
 +        
 +        SXTileMap *tileMap = [self tileMapForWorld:_world];
 +        //NSLog(@"%@", tileMap);
 +        
 +        SXTileViewport *viewport = [[SXTileViewport alloc] initWithLayer:[tileMap layerNamed:@"Background"]];
 +        [self addChild:viewport];
 +        
 +        mViewport = viewport;
 +
 +        TATom *tom = [[TATom alloc] initWithPosition:CGPointMake((self.width / 2.0) - 15.0, 100.0)];
 +        tom.canJump = NO;
 +        tom.canMove = YES;
 +        
 +        SXTileViewport *levelViewport = [[SXTileViewport alloc] initWithLayer:[tileMap layerNamed:@"Forground"] detectObjects:YES];
 +        levelViewport.automaticallyDrawObjects = YES;
 +        levelViewport.delegate = self;
 +        levelViewport.actor = tom;
 +        [self addChild:levelViewport];
 +        
 +        mLevelViewport = levelViewport;
 +
 +#if BX_DRAW_WORLD
 +
 +        SXDebugDraw *debugDraw = [[SXDebugDraw alloc] initWithWorld:mBXWorld];
 +        [self addChild:debugDraw];
 +        
 +#endif
 +
 +</code>
 +
 +From there you just have to handle movement and collisions on your own.
 +
 +TiledBox supports the drawing of interactive tile objects through call backs via a delegate:
 +
 +<code objc>
 +
 +
 +- (SPDisplayObject *)displayObjectForObject:(SXTileObject *)object viewport:(SXTileViewport *)viewport {
 +    if ([object.name hasPrefix:@"Nut"]) {
 +        CGPoint location = [mLevelViewport locationInViewport:object.rect.origin];
 +        
 +        TACoin *coin = [[TACoin alloc] initWithPosition:location bodyType:BXStaticBody];
 +        coin.x = location.x;
 +        coin.y = location.y;
 +        
 +        return coin;
 +    }
 +    
 +    return nil;
 +}
 +
 +</code>
 +
 +The limitation is that the custom object must be placed in Tiled in a specific format under one of two distinct object groups. 
 +
 +DisplayObjects - Custom objects for display that will not interact with the player. (Currently only "Text" types are supported)
 +
 +b2Objects - Custom objects that can interact with the player. (Currently only "StaticBody" types are supported)
 +
 +When you layout your object group ensure you label the object group name and object types correctly. It is also important to make sure all your objects have a different name.
 +
 +Here is an example of what the object output should look like:
 +
 +<code objc>
 +
 +<objectgroup name="DisplayObjects" width="100" height="10">
 +  <object name="Sign" type="Text" x="160" y="128" width="128" height="32">
 +   <properties>
 +    <property name="fontColor" value="ffffff"/>
 +    <property name="fontName" value="Verdana-Bold"/>
 +    <property name="fontSize" value="16.0"/>
 +    <property name="text" value="World 1-1"/>
 +   </properties>
 +  </object>
 +  <object name="Nut6" type="Callback" x="667" y="183" width="16" height="16"/>
 +  <object name="Nut2" type="Callback" x="708" y="135" width="16" height="16"/>
 +  <object name="Nut3" type="Callback" x="734" y="121" width="16" height="16"/>
 +  <object name="Nut4" type="Callback" x="762" y="132" width="16" height="16"/>
 +  <object name="Nut5" type="Callback" x="787" y="150" width="16" height="16"/>
 +  <object name="Nut1" type="Callback" x="685" y="159" width="16" height="16"/>
 +  <object name="Nut7" type="Callback" x="849" y="94" width="16" height="16"/>
 +  <object name="Nut8" type="Callback" x="893" y="79" width="16" height="16"/>
 +  <object name="Nut9" type="Callback" x="921" y="79" width="16" height="16"/>
 + </objectgroup>
 + <objectgroup name="b2Objects" width="100" height="10">
 +  <object name="Ground1" type="StaticBody" x="0" y="224" width="672" height="96"/>
 +  <object name="Ground3" type="StaticBody" x="768" y="192" width="224" height="128"/>
 +  <object name="Platform1" type="StaticBody" x="832" y="128" width="64" height="16"/>
 +  <object name="Platform2" type="StaticBody" x="880" y="112" width="80" height="16"/>
 +  <object name="Ground5" type="StaticBody" x="1216" y="192" width="128" height="128"/>
 +  <object name="Ground4" type="StaticBody" x="1088" y="224" width="128" height="96"/>
 +  <object name="Platform3" type="StaticBody" x="1024" y="80" width="32" height="16"/>
 +  <object name="Platform4" type="StaticBody" x="1088" y="112" width="32" height="16"/>
 +  <object name="Platform5" type="StaticBody" x="1152" y="112" width="32" height="16"/>
 +  <object name="Platform6" type="StaticBody" x="1216" y="128" width="32" height="16"/>
 +  <object name="Step2" type="StaticBody" x="1200" y="192" width="16" height="32"/>
 +  <object name="Step1" type="StaticBody" x="1184" y="208" width="16" height="16"/>
 +  <object name="Ground6" type="StaticBody" x="1472" y="224" width="160" height="96"/>
 +  <object name="Ground7" type="StaticBody" x="1952" y="256" width="96" height="64"/>
 +  <object name="Ground8" type="StaticBody" x="1952" y="128" width="192" height="32"/>
 +  <object name="Ground9" type="StaticBody" x="2240" y="224" width="128" height="96"/>
 +  <object name="Ground10" type="StaticBody" x="2496" y="256" width="96" height="64"/>
 +  <object name="Ground11" type="StaticBody" x="2592" y="160" width="192" height="160"/>
 +  <object name="Ground12" type="StaticBody" x="2784" y="224" width="64" height="96"/>
 +  <object name="Platform7" type="StaticBody" x="1664" y="176" width="64" height="16"/>
 +  <object name="Platform8" type="StaticBody" x="1760" y="160" width="64" height="16"/>
 +  <object name="Platform9" type="StaticBody" x="1888" y="144" width="32" height="16"/>
 +  <object name="Platform10" type="StaticBody" x="1856" y="256" width="64" height="16"/>
 +  <object name="Platform11" type="StaticBody" x="2176" y="128" width="32" height="16"/>
 +  <object name="Platform12" type="StaticBody" x="2112" y="256" width="32" height="16"/>
 +  <object name="Platform13" type="StaticBody" x="2208" y="256" width="32" height="16"/>
 +  <object name="Platform14" type="StaticBody" x="2912" y="240" width="32" height="16"/>
 +  <object name="Platform15" type="StaticBody" x="3008" y="240" width="32" height="16"/>
 +  <object name="Platform16" type="StaticBody" x="3072" y="208" width="32" height="16"/>
 +  <object name="Platform16" type="StaticBody" x="3136" y="176" width="32" height="16"/>
 +  <object name="Step3" type="StaticBody" x="2560" y="224" width="32" height="32"/>
 + </objectgroup>
 +
 +</code>
 +
 +Here is the end result:
 +
 +Note: The below screen shot is with box2d debug draw enabled.
 +
 +{{ :extensions:screenshot_2013.02.05_21.41.21.png |}}
 +
 +
 +===== Changelog =====
 +
 +  * //2013/02/06 03:29//: First public version
 +
 +===== Source Code =====
 +
 +[[https://github.com/matt62king/TiledBox]]
 +
 +Source includes the box2d source as well
 +===== Discussion =====
 +
 +//No comments so far. Feel free to edit this part of the page.//
 
 
Powered by DokuWiki