Facebook Twitter E-mail RSS
Home Level Director
Level Director

Level Director has now been replaced by Level Director X

Level Director is a purpose built level editor and asset manager for the Corona SDK and runs under Windows. Using the new template export system it now supports other Box2D SDK's.




  • Multiple Layers
  • Assets
  • Supports Sprite sheets (fixed size or from TexturePacker or ShoeBox)


  • Generic or LUA Corona SDK Export (Assets & Level Data)

controls = {}

controls = LD:loadLevel (“Controls”)

  • Grid per Layer

  • Collision Editor

  • Polygon Body Editor (bodies can also be made visible on layer)


  • Auto Trace Shape (before & after)


  • Supports complex bodies and Physics editor import (as of LD v2.1)


  • Full support for Physics (Box2D)
  • User Properties at all levels (Level, layer, Asset and Object)
  • Animation sequences



  • Custom Targets
  • Vector Display Objects




  • Bezier Curves

With or without physics and export with or without display (data only).


  • New API and export templates that enables support for other platforms

You can easily define the format in what you want your data to be output in.

  • Joints


  • Multiple Levels

Easily create multiple levels or scenes within one level pack.

  • Polygons

Create polygons and fill with textures.



  • Paths/Waypoints

With or without physics and export with or without display (data only).


  • Parallax Scrolling

Level Director has properties on the level to indicate if the Parallax should be enabled and on each layer to determine the scroll speed.  When using the CoronaTemplate export it will also automatically add methods to your level so you can move the whole level with just one line of code.


Supports GenericXML format, but very soon Texture Packer will support a dedicated Level Director format.

Please use the Sparrow xml export from ShoeBox.

Coming Soon

  • Widgets

113 Responses

  1. Chuck

    This looks just what I want when can I have it?
    I’ve been using Gumbo but I really want the ability to use layers and something that runs on windows.

  2. admin

    Hi chuck, we are hoping to have a version ready for download in the next couple of weeks.

    Thanks for your interest.

  3. admin

    Level Director is available to download now.

  4. admin

    Version 1.3 just released which contains many new features and fixes.

  5. admin

    Version 1.4 uploaded

  6. Alfredo

    Did you just raise the price? Or it’s always been $15? Don’t know why I thought it was $10

    • admin


      Yes due to the amount of time and effort I’m putting into this project I have increased the price (plus paypal take their cut), but until the end of November use the discount code 5OFFLD to get $5 off.

      I should be ready to release the asset manager changes in the next day or so, I’m just putting together an example project that demostrates how to use it.


  7. admin

    Version 1.6 now available for download…

    * New asset manager export added

    * Export property added to asset.
    – Defaults to True for single frame images and frame 1 for spritesheets.

    * ‘Export Assets’ option added to tools->options.

    * ‘Export Level’ option added to tools->options.
    * ‘LoadAssets’ and ‘CreateObjectFromAsset’ functions added to export LUA code.
    – LoadAssets must be called first.

    * Assets can now be multi-selected and deleted.

    * Added new ‘AssetTest’ example project.

    * Fixed issue in polygon editor where ‘round’ shape would not draw correctly for images contained in a spritesheet.

    * Fixed typo in Pong example to correctly centre the ball.

  8. admin

    I’m pleased to announce the release of Level Director 1.7.

    • Newly added Text Objects are now positioned correctly when canvas scrolled.
    • Updated config files in all examples so that the case of the image folders matched the actual folders.
    o This resolves an issue where the examples did not run on a real device.
    • Fixed issue with objects that are rotated and scaled.
    • NEW : added ability to create Bezier curves.
    o Each bezier has the option to export only data or data and display.
    o Note: physics properties are not currently supported.
    o Bezier points can be added, moved and deleted.
    o Added new example project ‘Bezier’ to show it in action.

  9. admin

    Physic Joints – Comming soon

  10. admin

    Level Director v1.9 (Beta) can be downloaded here;

    This has basic joint implementation by clicking the joint button and then selection two objects that should be joined.

    Please try it out and let me know what you find.


  11. Adel

    it is a very interesting tool!! but no tutorials are available yet!!
    would you provide some tuts so i can buy the Level Builder

    • admin

      Hi Adel,

      Yes tutorials are on the way, I should have these done in the next week or so.
      It is very easy to get started with Level Director but if you have any questions please ask so I can help you on your way.


  12. nil

    really no mac version? Is it an option to use it with parallels (any experience how that works or does not)?

    • admin


      Sorry, no mac version, I don’t actually own a mac which is why I created Level Director.
      Hopefully in the near future I will and will convert it.
      I’m not sure what you mean by ‘Parallels’ could you explain?


  13. nil


    Which I guess requires also installation of corona on windows emulator, it does not seem like a good idea, but without trying hard to say.
    (what is required for final compilation I do not know since I so far only compiled and uploaded to iTunes from mac. But is it possible to move the build files from windows to mac for compilation?)

    I am originally a windows user, not a real mac fan, so I do not say “go get a mac” 😉

    • admin

      Parallels look quite cool and I can’t see why you couldn’t run corona and level director on it.

      A friend of mine actually does all his coding on windows and uses an old mac to submit to iTunes so the files are transferable.

  14. admin

    A user discovered that there are some hardcoded paths in the asset example, if you have encountered this problem please replace the asset.ldf with the following file;



  15. admin

    I’m very pleased to announce the release of Level Director V2

    Please check out the website for more information but here is the release notes for your information;

    • Add support for texture packer sprite sheets saved as ‘Generic XML’. The add asset button now provides two options, add image (as before) and add texturepacker xml file.
    • Added template export feature which is documented here Export-Templates.
    • New checkbox ‘New file per level’ added for when using templates.
    • Fixed fit to window on body editor for circle objects.
    • Save last zoom value on level.
    • Moved example projects to user local documents folder under Level Director to fix permission issues with Windows8.
    • Canvas margins can now be changed per level, see level properties.
    • Added the ability to specify indivdual frames to an animation sequence e.g. 1,3,4,5,8.
    • Multiple levels/scenes can now be created. A new level dropdown has been added above the layers window with new buttons to allow you to add and delete a level/scene.
    • 25% Zoom level added.
    • Project tab added to tools-options which allows you to specify the export folder and file extension when using an export template.
    • New corona export template created along with a LD_Loader and LD_Helper files to aid in the object creation and asset management. This helps separate the level data from the creation code. These can be found in the Utils folder.
    • Added some templates to output data in a generic LUA format and also a prototype MOAI format.
    • Reworked rotation code so the host rectangle is resized correctly allowing the rotated images to show in proportion.
    • A general ‘Class’ property added to asset and object to allow you to group objects and assets easily.
    • Show bodies on text objects now supported.
    • Fixed issue when editing text where delete button would remove the object.
    • New ‘Path’ object added which allows you to specify points along a line and optionally hook-up to physics.
    • LD_Helper attaches a ‘followPath’ method to each object which allows you to specify which path to follow (see LD_Helper.lua)
    • Parallax properties added to Level – ParallaxEnabled and ParallaxInfinite.
    • Parallax properties added to Layer – ParallaxRepeated, ParallaxSpeedX and ParallaxSpeedY
    • LD_Helper will check to see if ParallaxEnabled and attaches two new methods ‘move’ and ‘moveCamera’ to the level object. moveCamera only moves layers so object wrapping not supported in this mode.
    • X Flip property added to Image objects.
    • Y Flip property added to image objects.
    • EnableDrag property added, when set to true and used with LD_Helper a touch event will be added to the object.
    • New V2Demo example project added to demo v2 features.
    • *NOTE: The V2Demo example uses the CoronaTemplate export whereas all the other examples use the built-in corona export. So if you intend to make changes be sure to set the correct export method othewise the main.lua will not work correctly. Alternatively you could change the main.lua to work with the corresponding export. Please see the example project documentation on the website.

  16. riccardo

    any discount code for today?

  17. Bjørn

    Hey man, I would like to start off by thanking you for spending your time on this project. I have been playing around with the demo for a little while now and I will probably purchase it.

    Now over to my request. I am currently developing a pixel art platform game for iOS and Android. I am working with sprites which are 2x in size (4x for retina), so the actual game resolution on an iPhone 4 would be 240×160. Part of the reason why I have started on this project now i that Corona SDK finally has the ability to scale images using “nearest neighbour” which is essential for pixel art.

    display.setDefault( “magTextureFilter”, “nearest” )
    display.setDefault( “minTextureFilter”, “nearest” )


    Unfortunately this doesn’t seem to be possible in Level Director yet. This means that when I scale up the sprites to 2x in Level Director they appear blurry rather than sharp pixel art because of the standard scaling. I would be very grateful if you could make this feature so that you could set the scaling mode to “nearest neighbour” in the options.


    • admin

      Hi Bjorn,

      I must admit I’ve not come across this feature before but as I’m always looking to improve LD I will certainly look into it for you.

      Thanks for your interest in LD.
      Speak soon,


    • admin

      Hi Bjorn,

      Just to clarify is the issue with the export i.e. you cannot specify these default properties?

      If this is the case, on the properties for the level (click just outside of the grid area), add two new user properties;
      key = ‘magTextureFilter’ value = ‘nearest’
      key = ‘minTextureFilter’ value = ‘nearest’

      In tools->option make sure you are using the template export and select the coronaTemplate.lua file from the Template folder.
      Now open up the coronaTemplate.lua file in a text editor and go to the end.

      Just after these lines (although you might have to move all these lines before the layer objects are created)
      < %USERPROPS%>
      level.%USERPROP%.Key = ‘%USERPROP%.Value’

      display.setDefault(‘magTextureFilter’, ‘level.magTextureFilter’)
      display.setDefault(‘minTextureFilter’, ‘level.minTextureFilter’)

      Now export and run your level.

      Let me know if this helps.

      • Bjørn

        Hi again, I truly appreciate your quick responses.

        My first post was probably a little unclear. The export is fine. The problem is how the images look inside Level Director. When I scale them they become blurry because of the scaling filter which is used. What I would like is an option to set scaling filter to what is commonly known as “nearest neighbour” inside Level Director. This way my pixel art sprites won’t be blurry inside Level Director once I scale them. I’m sure I’m not the only one who would love to have this feature implemented.


        • admin

          Oh sorry I see what you mean.

          I’m using Microsoft .net to do the drawing so it will look slightly different than Corona although I can control the draw smoothing quality so I’ll take a look.
          Please could you email me via the support email link an example image/sprite so I have something to test with.


          • admin

            Hi Bjorn,

            I think I’ve cracked it and added an option to change the drawing mode within Level Director.

            I’ve fixed another issue where some of the example projects appear to have lost their unique id’s so you get strange results when trying to select certain objects.
            Once I’ve done some more testing I’ll upload a new version.


  18. admin

    Minor update uploaded
    • Clear export folder when a new level pack is created.
    • New: Drawing mode added to tools->options so you can switch to pixel art mode.
    • Fixed issue with some of the example projects where the object ids got corrupted so selecting objects did not work correctly.

    • Bjørn

      Thank you so much for adding this! Going from feature request to implemented feature in under 9 hours is truly astounding! Will definitely buy Level Director now, and recommend it to my fellow developers.


  19. admin

    Level Director 2.0.2 Released
    •New: Added ‘Auto Trace Polygon’ to tools->options (default is off).
    •New: Added ‘Max Points’ to tools->options (default is 8 to support Corona).
    •New: Added Delete point button to polygon editor.
    •New: Added Trace Shape button to polygon editor.
    •New: When an Asset or Object physics.bodyshape is set to ‘Polygon’ and the ‘Auto Trace Polygon’ option is checked then Level Director will automatically add a polygon shape to the object. It does its best to trace the outline of the image and plot convex points based on the ‘Max Points’ specified in the options. The results are impressive when the max points are above 20 but Corona currently only supports 8. In the future we’ll add support for complex shapes.
    •UI: In the polygon editor if there are points already defined the edit button is automatically selected.

  20. admin

    Level Director 2.1.0 Released (now supports Physics Editor).
    •New: Added support for Complex Bodies and body shape editor re-designed to accommodate.
    •New: Added Physics Editor (codeandweb) import button to asset add button. This will import all physics and shape data and apply to assets.
    •New: A new LevelDirector xml exporter created for use with Physics Editor, please copy these files from the PhysicsEditor folder into your PE exporters folder.
    •New: Template export modified to support new ‘Shapes’ object which contains all the fixtures for an asset or object.
    •New: LD_Helper changed to work with complex bodies with support for dynamic scaling.
    •New: A new property called ‘LinkFixtures’ added to Asset and Image Objects so that changes to the main body physics attributes are replicated down to the sub fixtures/shapes.
    •Fix: ‘Show bodies’ option (on layer) now renders correctly for rotated objects.
    •Fix: Collision editor fixed when drilling down from Image object.
    •New: Collision Editor now has two new buttons, ‘Select All’ and ‘Unselect All’.
    •New: PEDemo example added which was created using sprites from texture packer and physics from physics editor.
    •Fix: LD_Helper didn’t work correctly when multiple animation sequences were used.
    •Fix: Enabled ‘Use physics from assets’ on export options in template mode.

  21. admin

    Level Director v2.2.0 Released

    •New: Completely new animation sequence window created that allows you to create, modify and preview your animations.

    •New: A new template export tag < %?OBJECT_PHYSICS%> has been added to the corona_template which honors the option ‘Use Asset Physics’ setting. This acts like an IF statement and will only include the section if you are not using physics at the asset level. This cuts down the file size by excluding all the object physics properties. LD_Helper automatically knows to use the physics on the asset instead.

    •New: You can now rotate an object by right-clicking and dragging the mouse.

  22. mickmur

    Well man, nice work on Level Director. I recently purchased the application and have a question in relation to using Level Director with Corona SDK, Texture Packer and Physics Editor.
    I am building a game which targets the 480 x 320 display, but can dynamically scale up to twice the resolution, using the ‘.png’ and ‘@2x.png’ convention. I have a list of sprites at the high resolution (‘@2x.png’). I have used Texture Packer to create two spritesheets (spritesheet.png and spritesheet@2x.png with associated .lua files). PhysicsEditor was then used on the original high res sprites to add the physics properties. In LevelDirector I added the lower res spritesheet.xml asset to the project. I then imported the PhysicsEditor spritedefs@2x.xml. Obviously this added physics bodies to the sprites which are twice the sizes of the sprite images. What is the correct approach for me in this case to import the assets into Level Director so that dynamic scaling is correctly implemented in Corona? Am I going the wrong way at this altogether?! 🙂
    To recap, I wish to design my sprites in high res, use TexturePacker to create low&high res sprite sheets, use Corona’s dynamic scaling to choose which res sprite to select, I also wish the correct physics body to be associated with the low res sprites when designing a 480×320 level in LevelDirector.
    Also, I haven’t been able to find a way to remove a spritesheet asset from LevelDirector. When trying to delete an individual asset I get a ‘you cannot delete an asset linked to a spritesheet’ message.

    • admin

      The ability to remove a texture packer spritesheet has been added in the next version (v2.03 soon to be released and has some really nice new features).

      To be honest I haven’t played with the multi-res options in TP and PE but the theory would be that you do everything in level director at 1x and then corona will upscale to 2x. LD_Helper does support scaling on the physics but currently you have to specify it.

      I’ll try and find some time to play with this and let you know.


  23. mickmur

    That’s great, looking forward to working with your product and appreciate the impressive support.

  24. mickmur

    Something I am encountering..
    In LD, when I change an image/sprite’s reference point from ‘centre’ to ‘bottom left’ the ‘x’ and ‘y’ positions are updated accordingly in LD, but when I run in Corona the image is positioned with its centre at the bottom left of the screen..
    Cheers, Mick

    • admin

      I’ll take a look.
      Was this using the template export method?

    • admin

      Hi Mick,

      I found and fixed this issue last night and it will be included in the next release.
      For some reason I had the ‘reference point’ property linked to the physics attributes, this has now been moved to just the object level and the export changed to deal with it accordingly.
      The next release is currently in testing so hopefully not too long now.

  25. mickmur

    Sorry I’ve been away for a couple of days. That’s good news. Thanks for the reply and quick fix.

  26. admin

    V2.3.0 Released
    • New: The < %?> export decision control tags have been extended to greatly reduce the size of the exported files.
    < %?OBJECT_POINT%> only export path/point data for path and bezier objects.
    < %?OBJECT_STYLE%> only export style data e.g. strokeWidth for relevant objects.
    < %?OBJECT_FOLLOWPATH%> only export follow path data for objects that have it configured.
    < %?OBJECT_JOINT%> only export joint data for Joint objects.
    < %?OBJECT_TEXT%> only export text related data for Text objects.
    • Fix: ReferencePoint has been moved from the Physics attributes to the object and the export template updated accordingly.
    • Fix: It is now possible to delete an asset group added from a TexturePacker file.
    • New: You can now collapse spritesheet groups in the asset window.
    • New: Non-spritesheet assets are included in a new ‘Assets’ group so it can be collapsed.
    • New: The screen position and canvas size are now stored and reloaded.
    • Fix: Now exports FixedRotation and IsSleeping correctly.
    • New: LD now stores all image files as relative paths to the project location. For existing projects these will be updated so please take a backup and make sure the images are located within a valid relative path.
    • New: When ‘Use physics at assest level’ is checked then the physics properties at object level are disabled.
    • New: The canvas window will automatically scroll if objects are dragged to the edge of the screen. This can be turned off in options.
    • New: The path object now shows as a dotted line when export mode is set to ‘Data Only’.
    • Fix: Canvas windows now positions correctly after window size is changed.
    • Fix: The default referencepoint for rectangles is now set to ‘Center’ rather than ‘Top left’.
    • New: FollowPath properties now added to each object.
    Path – Path to follow and is a dropdown list of current paths added to level.
    Repeats – Number of times to repeat, -1 = forever.
    Rebound – When true, object will rebound i.e. traverse in opposite direction.
    XFlip – If rebound, then flip in the x direction.
    YFlip – If rebound, then flip in the y direction.
    Rotate – Rotate object according to current position/angle on path.
    Delay – controls how fast the object should follow the path, bigger number = slower.
    AutoStart – when set and using LD_Loader the object will automatically start following the path (need to call initLevel).
    Direction – The start direction i.e. Forward or Backward.
    • New: In tools->options you can now add user defined class names e.g. ‘Coin’ or ‘Enemy’ and then specify a class value to each object from a dropdown list.
    • New: In LD_Loader some new helper functions have been added;
    LD_Loader:getObject(objectName) – return the first object with the specified name
    LD_Loader:getLayerObject(layerName,objectName) – return the object on the specified layer
    LD_Loader:objectsWithClass(className) – return all objects of that class name.
    LD_Loader:layerObjectsWithClass(layerName, className) – as above but on a given layer
    LD_Loader:removeLayerObject(layerName,objectName) – remove a named object on a layer
    LD_Loader:removeLayerObjectsWithClass(layerName,className) – remove all objects on a layer for specificed class.
    LD_Loader:removeObjectsWithClass(className) – remove all objects for specified class name.
    LD_Loader:addEventListenerToAllObjects(eventName, listener) – add specified event listener to all objects
    LD_Loader:initLevel() – call this after load level to start objects that are to follow a path.
    • New: DebugMode has been added as a property on the level and exported as token %LEVEL%.DebugMode.
    • New: PositionIterations has been added as a property on the level and exported as token %LEVEL%.PositionIterations.
    • New: VelocityIterations has been added as a property on the level and exported as token %LEVEL%.VelocityIterations.
    • Fix: Physics – isSensor and isBullet is now exported correctly and LD_Helper has been updated accordingly.
    • New: Beizer and Paths exported for display are now part of a display group.
    • Fix: Export now works correctly when regional settings converts dot to comma.
    • New: PottyBird endless runner type game example added to demonstrate many of the new features in Level Director (drag bird and tap to poop).

  27. Vincent

    The discount code is invalid, can I have a new discount code ? I am ready to buy it now

  28. […] technologies from Assembler to C#. Alan is also the founder of Retrofit Productions, the creator of Level Director, a third party tool which helps app developers create complex screens and levels with […]

  29. admin

    Level Director v2.4 Released that now supports Corona SDK Graphic 2.0 Engine.

    •Fix: Resolved issue with PhysicsEditor imported items for European regions where dots and commas are swapped, it would cause the physics editor window to crash.
    •New: Graphics2.0 – Default AnchorX and Y properties added to tools->options and associated to each project.
    •New: Graphics2.0 – AnchorX and Y added to Assets and defaulted from project defaults (above).
    •New: Graphics2.0 – AnchorX and Y added to objects and defaults to assoicated asset values (above).
    •New: Graphics2.0 – Flag added to tools->options to specify if a project is Graphics2.0 enabled. If set then coordinates are calculated based on the anchor values
    •New: LD_HelperG2.lua, LD_LoaderG2.lua and Corona_templateG2.lua files created to work with Graphics2.0 projects only.
    •New: %LEVEL%.AnchorX and Y added to export the default anchor values.
    •New: %ASSET%.AnchorX and Y added to export anchor values for an asset.
    •New: %OBJECT%.AnchorX and Y added to export anchor values for an object.
    •New: G2Test example project added to test the new modules (above) work with the Graphics2.0 builds of Corona.
    •New: Click scroll wheel and move mouse (not drag) to scroll canvas in that direction.
    •Fix: Auto load last level fixed.
    •New: A simple Storyboard example project added.
    •New: Allowed Physics to be imported from PhysicsEditor and applied to non imagesheet assets.
    •New: Polygon shape object added. Size a container then start plotting points. Supports texture fills.
    •New: Rectangles and Circle object now support texture fill when in Graphics 2.0 (G2) mode.
    •New: Anchor point indicator now shows on selected object (G2 mode).
    •New: When plotting points (polygons, paths etc) the last point is shown in a different colour.
    •New: Points (polygons, paths etc) are only drawn when object is selected.
    •New: WireFrame property added to level and %LEVEL%.WireFrame export tag created.
    •New: %OBJECT%.FillType added to export, 0 = Colour, 1= Texture from Image, 2 = Texture from ImageSheet
    •New: %OBJECT%.FillAssetName added to export to determine the asset in which to get the fill image
    •New: %OBJECT%.FillFrame added to export and used in conjunction with imagesheet tp specifiy the frame.
    •New: %OBJECT%.StrokeColorA added to provide the alpha element.
    •New: %OBJECT%.FillColorA added to provide the alpha element.
    •NOTE: Only the G2Test example was created to work with the Graphics 2.0 build of Corona SDK, the other examples will need to be exported in G2 mode.

  30. Thomas

    i just purchased your product an it makes really fun to work with it. One question. Is it possible to copy all layers or the complete level from one level to the next. Sometimes there are only minimal changes in the next level to do and it would be very helpful to clone a level or at least layers.

  31. admin

    Level Director v2.5 now released (goto download page)!
    This release sees some useful UI changes and further support for Graphics2.0 and Storyboard.
    •Fix: Resolved error when objects removed from a TexturePacker spritesheet.
    •Fix: Delete asset fixed so it deletes linked objects across all layers.
    •New: Duplicate CTRL+Arrow key now works when multiple items are selected.
    •New: Duplicate level button added to make an exact copy of the current level.
    •New: Multi-Select/Deselect now possible when clicking objects in conjunction with the CTRL key.
    •Fix: Now correctly checks the Asset ‘Export’ property, so assets will only be exported if true, please check your assets!
    •Fix: LD_HelperG2.lua fixed to set anchor values for lines when drawing paths.
    •Fix: Anchor values exported correctly for European countries where dots and commas are swapped.
    •New: setLayerVisible(layerName) function added to LD_LoaderG2.lua so hide/show a layer.
    •Fix: isVisible property is now exported correctly for objects.
    •Fix: Fixed issue when manually typing in x,y coords, it would not take into account anchor values.
    •New: Image objects now store ‘assetName’ when exported which can be accessed later.
    •New: Export status has been improved to show progress when exporting large levels.
    •New: Export folder is now converted to a relative path.
    •Fix: Corona_TemplateG2, LD_LoaderG2 and LD_HelperG2 modified to work correctly with storyboard. Level and Layer display objects now moved to ‘view’ property so please be aware if using the getLayer() method as you will need to add ‘.view’.
    •Fix: removeLevel() method improved to clean up variables and objects.
    •AssetTest, Joints, Pong, V2Demo, Example1, PEDemo, BezierPhysics and PottyBird examples converted to Graphics 2.0.
    •New: Button display object added which uses TextureFill of Graphics2.0
    •New: Asset group collapsible status is now stored on the level so it remembers it when reloaded.
    •New: Send to Back/Front now works for multiple objects.
    •Fix: Bezier and Path Physics in LD_HelperG2.lua fixed to work with Graphics2.0.

  32. admin

    Level Director v2.6 Released
    •Fix: FollowPath reference fixed for copied objects.
    •New: Duplicate Layer button added to make a copy of the selected layer.
    •New: Support for ShoeBox sprite sheets added (use Sparrow xml export).
    •Fix: Asset User Properties now copied down to object.
    •Fix: When copying levels, layers and objects user properties were not copied correctly.
    •New: CTRL+A will select all objects on the current layer.
    •Fix: Button hidden if project is not Graphics2.0 enabled.

  33. Chuck

    Hi guys
    Not sure if this is the correct place to ask but I’m having a real issue trying to get the movement working correctly using level Director.

    By this I mean I can get the X-axis working fine so the level moves left and right according to my player movement speed, however I can’t for the life of me figure out how to get the layers to move according to my player’s Y-Axis?

    Any ideas? example below:

    local function move()
    myLevel:move( motionx, 0 )

    What is the code to calculate the player’s position so that he appears to remain in the middle of the screen?

    • admin

      Hi, do you have a motionY variable as you can specify this as the 2nd parameter e.g. Move(motionX, MotionY)?

      Depending on your movement you are simply specifying the delta for movement in the x,y axis.
      In your example the player will be on a layer with a parallax speed of 0 so it does not scroll when you call the move function.

      Let me know if you need anymore help.


      • Chuck

        Thanks for the quick response Alan – I do have a motionY variable however I need to calculate whether he’s going up or down based on my level design. I tried getting the linear velocity and setting it negative / relative to that however my player simply falls and the platform is no longer visible?

        It would be great if LD had an option to setFocus on a particular object and that would all be taken care of – I can’t work out the math to handle the Y-Axis properly :/

        basically just need the formula to work out the speed at which the level needs to move up or down based on the player’s position on the level?

        • admin

          Is your player supposed to be static though, and only the level moves?

          If you wanted to send me your code via the support email I can take a look for you, and maybe better understand what you need to achieve.

          • Chuck

            No, my player is meant to move and all I’m trying to achieve is that he is tracked (as if he had a camera / viewport) attached to him and tracking his movements whilst he remains centred on the screen.

            I was told on the corona forum this is not possible and the layer groups would need to be moved instead, which seems a little crazy to me… 😉

            I’m trying a few other options first, (unless you know a simple way to achieve the above) and if I don’t come right, I’ll send you what I have so far 🙂


          • admin

            Yes that is what I meant when I said the player does not move, so it stays in the centre of the screen and only the layers move.
            On your up and down buttons can you not just add/subtract to your motionY variable, checking for a max.
            In your enterframe function it is updating :move(motionX, motionY)

            If I get time I’ll try and create an example project.

  34. admin

    Level Director v2.7 released.
    Whats New?
    •Fix: FollowPath modified so it works for Corona Starter edition users.
    •Fix: Export modified so it works for Corona Starter edition users when not using Pro functions.
    •New: Camera Object added which acts as a non-visual place holder to obtain a position on the level.
    •New: LD_HelperG2 now attaches new functions to the level, slideCameraToPosition(), setCameraFocus(), setCameraBounds()
    •New: LD_HelperG2 adds a new property ‘isTracking’ which starts/stops tracking when the camera focus is set to an object.
    •New: ParallaxDamping property added to Level to smooth out scrolling (keep as 1 when tracking).
    •Fix: FollowPath export fixed for European regions (comma, dots swapped).
    •Fix: FollowPath event listeners were not removed correctly.
    •Modify: Free edition now allows up to 10 objects to be exported but with a warning message.
    •New: EmbossedText now supported and allows you to specify Highlight and Shadow colours.
    •Modify: Status panel changed to show Start and End points for Bezier, Polygon and Path objects.
    •New: Scroller example added to demonstrate 4 way scrolling, camera and collisions.
    •New: Scroller2 example added to demonstrate camera tracking.
    •Modify: Assets now sorted in group name order.
    •Fix: LD_LoaderG2 removeLevel() fixed to correctly remove all objects from a level and avoid memory leak.
    •New: Last visited file list added to file menu.
    •New: Button now includes ‘Over’ styling in addition to ‘Default’, these include Image, Corner radius, Fill Color, Stroke Width and Stroke Color.
    •Modify: LD_HelperG2 – Button code reworked so it don’t use fill method and therefore works for non Pro users.
    •Fix: Prevented Bezier, Path and Polygon from Flipping when entering a name containing X or Y.
    •New: Bezier, Path and Polygon containers now resize automatically when editing points.
    •Fix: Added missing physics GravityScale to export template and LD_HelperG2.
    •Modify: Export – moved object user properties to view level rather than root level.

  35. Alan can you help me, I have a game that I am almost done with. The only problem is that there is a black rectangle on the bottom left of the screen that i cannot figure out how to get off. Thank You. I still have your email, so If you agree I will send the entire project to you. Thanks Again

  36. Alright thanks man, I will.

  37. ML

    How to use animation do you have any tutorial ?

    • admin


      Nothing specifically, but which part do you need help with, loading spritesheets (with animations), setting up the animations or using the animations in LUA, or all of the above :o)?
      I do have plans for more tutorials so this would be a good addition.


      • ML

        All of the above.

        • admin

          Are your animations part of a fixed size sprite sheet or a texture packer sprite sheet?
          Have you looked at the AssetTest example project as this demonstrates how animations work.
          Once you have your spritesheet loaded in the assets window, click on the first asset and in the properties window locate the animation collection button.
          This will bring up the animation window where you can create all your animations for this sprite sheet.
          Click the new button and give it a name e.g. walking, the rest of the properties are per Corona.
          You can choose between ‘start frame’ and ‘frame count’ or simply enter in the ‘frames’ e.g. 1,3,5 you will also need to set a duration/delay.
          The default property indicates if this animation is the default one on load.

          Let me know if this helps.

          • ML

            I have add a fixed size sprite sheet but I don’t how to play animation.

          • admin

            Did my tips help at all?
            Were you able to find the animation dialog?
            Try loading the AssetTest example and view the animations for the dog and birds (located on the first frame of the spritesheets).

          • ML

            I hope that you can make some tutorial video for level director, thanks .

  38. Yes he will be making more videos soon he said. I think when he does people will understand his software more, and it will become much more popular

    • admin

      Yes, I have just obtained some new software to do screen recording so I can start work on some new videos soon.

  39. Great man I will keep an eye out.

  40. admin

    Level Director v2.8.0 Released!

    •Fix: Button over bug fixed
    •Update: MRU list is now stored in registry to prevent access denied problems on save.
    •New: The .ldf extension is now registered as a Level Director file so you can open them directly from file explorer.
    •Fix: The image sheet width and height are now exported correctly so dynamic scaling works.
    •Fix: Sprite Sheets are refreshed across all levels rather than current just in case they have been modified.
    •New: Gradient Fill added to Rectangle, Ellipse and Polygon objects.
    •New: An EmptyProject has been added to the examples folder which can be copied and used as a starting point when creating new projects.
    •New: Utility function removeLevel() now has an optional param ‘retainSpriteSheetTextures’ which if true will not unload the textures (This is useful if levels share the same assets).
    •Fix: Tooltip in Polygon Editor corrected.
    •Fix: Validate against invalid image formats.
    •New: Composer example created.
    •Fix: G2Test example, button click fixed.
    •Modify: Corona_TemplateG2.lua modified to export level as a table to avoid using modules(…, package.seeall).
    •Modify: setCameraFocus now has two optional parameters ‘trackX’ and ‘trackY’, default is true but you can set to false to disable tracking on the X or Y axis.
    •Modify: Improved Scroller2 example project.

  41. Eric Harvard

    Great I will purchase soon, I would never have known of this software if it wasn’t for my buddy Jaran.

  42. gmain

    what does parallax culling do? And is there a way pause an object moving on a path until scrolled on screen(in a parallax scroll).

    • admin

      Parallax culling is work in progress and the idea is to try and cull objects that are off screen.
      The first implementation is to destroy objects that scroll/move off screen. So providing;
      1) Layer repeat = false
      2) Layer Culling method = 2 (destroy)
      3) Scrolling in one direction
      Then the objects will be destroyed. This is useful for endless type games where you are always scrolling in one direction and once the object moves across the screen it is no longer required.
      It becomes very easy to spawn as many objects as you like and LD will get rid of them automatically for you.

      Like I say it is still work in progress which is why I haven’t really documented it but please feel free to try it.

      To pause a path try this:
      obj.pathParam.pause = true

      There is more info here : http://www.retrofitproductions.com/level-director/utility-library/

      • gmain

        Thanks for your helpful and timely response i always appreciate that i can get some help using this software.
        For future update it would be nice if dynamic scaling can be implemented somewhere along the line.

        • gmain

          so i tried that(obj.pathParam.pause = true) and i keep getting-> attempt to index field ‘pathParam'(a nil value)

          does it has something to do with LD_HelperG2 do i need to set the pathParam there?

          • admin

            Sorry, it should be ‘paused’ not ‘pause’

            Thanks for pointing out the issue with rotate, I’ll look into that.

            For dynamic scaling, this is something I considered but then discovered that the majority of users kind of do it anyway via texture packer and config.lua.
            TP can create all the scaled images for you and providing you have your config file set correctly, Corona will automatically select the correct scaled images.
            The trick is design your level for a specific platform where the images are 1x so it can scale accordingly for other platforms.
            How would you want LD to do it?

          • gmain

            it should be obj.pathParams.paused = true ….. after still getting error i looked at the helper file and realize the ‘s’ on Param was missing. Change it in the utility module section whenever you get a chance. Thanks!

          • admin

            Thanks for pointing that out, I updated the docs.

  43. gmain

    when i set an object to a path and i set rotate to true i get an error saying -> myproject/lib/LD_HelperG2.lua:1133:attempt to perform arithmetic on field ‘x'(a nil value)

    why is this am i missing something?

  44. admin

    Level Director v2.8.1 released.

    •Modify: Moved registry creation into install to prevent access denied errors.
    •Fix: Changed Composer example to use relative paths to prevent issue with not finding images.
    •Fix: Reworked physics on lines as Corona deprecated the ability to do so.
    •Fix: blendMode is now exported and template and helper files modified to use it.
    •New: Culling method added to layer. Working in progress but ‘destroy’ will remove objects when moved off screen.
    •Fix: Updated example projects to use new lib functions.
    •Fix: Follow path ‘rotate’ parameter was broken so LD_Helper_G2 changed to correct it.

  45. Patrick Aaron Moore

    (also posted on Corona LD Forums)


    I’ve been working with Corona for a while now and I recently got myself a copy of Level Director.

    I have been using it to make a side-scroller. I found that implementing Level Director greatly changed how I made my game (I am sure in the end for the better) but at the moment I often reach complications that may have to do with my understanding of the how the level object is loaded and how to access object properties after it is loaded.

    My current problem is as follows:

    I have at the moment a dpad ( a circle object that listens for touch events) that gives the 360 degree control depending on the input. I also have a jump button (circle object with a tap listener). At first this all worked fine and I was able to have the dpad and jump events happen at the same time as I one would in a game. A common problem (which i have found other posts about) is if I begin a touch event on my dpad and slide off the dpad and release outside of it then my “ended” phase is never reached and the dpad remains active.

    I attempted to use focus to solve the problem and it seemed to work but then i lost the ability to both jump and control the dpad simultaneously.

    The next solution I believe should work is that I created another larger and invisible circle behind my dpad and I want it to check for move events that happen outside the dpad and deactivate the dpad when this occurs.

    Similar to the process described here:


    The problem I seem to be having is that I can’t get the invisible circle to be behind my dpad. ie. when I enter a move event on my dpad it’s registering a moved event also on the invisible circle (i have isHitTestable turned to true for the invisible circle). I tried to move the invisible circle and dpad circles to different levels in my Controls layer in LD but it still did not work as I desired. For reference though does lower on the list of the layer mean closer to the front of the display?

    I basically need the dpad circle to have listener prominence over the circle behind it. So that the moved phase is only activated on the halo created by the intersection of my invisible circle and my dpad. Using the corona code toBack() does not work either because it fiddles with all the other objects such as my background and the like.

    Any help on my specific problem or a solution to the slide off problem in general would be greatly appreciated.


  46. admin

    Level Director v2.9 released!

    •Fixed: snap size to grid.
    •New: Asset files are no longer locked and a new refresh button has been added to the asset window to reload them.
    •New: LD_Helper – Added two new functions ‘layerObjects’ and ‘getAllObjects’ to help obtain objects within a level.
    •Fix: Allow negative scroll speeds.
    •Fix: Fixed crash when moving objects fast.
    •New: Added new button to export only the current level as opposed to all.
    •Fix: Some optimisations.
    •New: LD_Helper – Added new function ‘addObject’ to allow any display object to be added to the LD engine.

  47. admin

    Level Director v2.9.3 Released!

    • New: Support for non ASCII characters when exporting.
    • Fix: Loading some jpg files caused an ‘Out of Memory’ error.
    • Modify: Improved version checking to use internal settings rather than registry to avoid permission problems.
    • Fix: Version display fixed on splash screen.
    • Fix: Texture Fill now displays correct frame when part of a sprite sheet.
    • Modify: Levels are now ordered in alphabetical order.

  48. Still supporting ? If so, can you please do more tutorials. Its a great program, but some what difficult to get around and actually use. I’m currently stuck trying to do a parallax set up. It’s all enabled, but wont run on simulator. ?

    • admin

      Yes still supporting and yes some more tutorials would be useful I admit ;o)
      When you say it doesn’t run, do you get errors?
      If you send me your project to support@retrofitproductions.com I’ll be happy to take a look.

      • Okay, I was able to figure it out. Now i’m trying to figure out collisions, how to access the collision set up window with the assets. I’m definitely ready to buy this program, but I just need to make sure I learn it first. Its really confusing. Tutorials would definitely do it for us. Hope to see some soon.

        • admin

          Glad you figured it out.
          Just in case you haven’t seen them there are some tutorials here : http://www.retrofitproductions.com/level-director/tutorials/

          For the collision window, once you have set a ‘category bit’, you can then use the button next to the ‘mask’ property to set which other objects it can collide with.

          • “Object not set to a reference of an object”? im a beginner at this. I’m stuck.

          • “There are no objects with a category bit set”?

          • admin

            Could you clarify what you are trying to achieve?
            When you say collision are you trying to set the physic bodies which are used in collisions or set collision categories?

          • admin

            When using collision filtering each object/asset needs to be referenced by a category bit so you can identify which bits collide with what.
            Documentation can be found here : http://docs.coronalabs.com/legacy/guide/physics/collisionDetection/index.html

            Level Director gives you this message when you have not set any category bits against any objects.

          • Yes, what i’m trying to do is actual collision detection. So for example, I want a specific event to occur when ball collides with star. I assigned a cat bit to ball and tried assigning the mask bit but I keep getting “There are no objects with a category bit set”. I also tried giving both objects a category bit different of one another, but I keep getting the same message.

          • admin

            ok, I think the problem is when setting this at the object level (an instance of an asset) rather than at the asset level.
            Please could you go to tools->options->export and check the ‘Use physics at asset level’.
            Now on your assets, set the cat bits and masks.
            This will save you setting category bits for every instance of an object.

          • When i do that, the physics settings become gray and I cant modify them.

          • admin

            That’s correct because you need to set them at the asset level not the object level.
            Is there any reason why you would want to set physics at the object level, so for example if you have a ‘star’ asset and create 10 instances (objects) of it would you not want all 10 stars to inherit the asset properties?
            In this example without the ‘physics at asset level’ set you would have to set physics values for each star.

          • admin

            Did you manage to figure it out with regards to the asset properties?

  49. “Object not set to a reference of an object”? im a beginner at this. I’m stuck.

  50. Don

    Hi. Been using this for a while and was wondering if there is any update coming soon? New features? Etc.

    Thanks for great work!

    • admin


      I haven’t really done any new features mainly bug fixes and tweaks.
      My main focus is on a brand new version of level director which will also work on Mac OS.
      Out of interest what new features would you like you see?

  51. Gary

    I’m designing gameboard games, like chess for example, but with several twists. Is it possible to have an inventory of drag-and-drop assets for use during level design, that carry numerous functions with them when dragged so various effects can be pre-programmed into a particular asset, which will be triggered during game play depending upon what happens to the asset, such as a listener triggered, a collision, proximity to another asset, etc? Also, if I drag an asset into an individual square on a gameboard during level design, such as a chess piece, can the drag-and-drop asset be preprogrammed to always center in the square on the gameboard or be positioned anywhere else within the square it is dragged into? Where can I go to find more info about this?

    • admin

      Hi, if I understand your requirement correctly, within Level Director you can set ‘User Properties’ on assets which get exported so in theory you could create properties that would indicate an action or trigger.
      In your code you would just have to check if a user property exists for the asset and then do something.
      I hope this helps.

  52. admin

    Level Director v2.9.4 Released

    •Fix: Gravity Scale is now copied correctly during copy and paste.

    •New: LD_HelperG2.lua has new flag ‘_CHAIN_PHYSICS’ (default true) which when enabled will use chain edge physics on Bezier and Path objects.
    This provides a much smoother action when objects roll along them.

    •Fix: FollowPath rotation now honours original rotation value of object.

    •Fix: Button object ‘default’ state does not render correctly when rotated in LD.

    •Fix: Trap error when rendering open type fonts not supported by GDI+, Arial is used instead (export is ok).

  53. Matt Kirby


    I get this error frequently when open a saved file.

    Level Director
    Error loading file: path/to/file.jpg

    Is there anyway of fixing that? I haven’t moved the location of image files etc.


    • admin

      Hi Matt,

      I’ve emailed you details with regards to using the new Level Director X version, but if you would still like to use the old one then you can correct any file paths by using a text editor to open the .ldp file and locate and fix the paths. Are the images relative to your project?

      Any problems then please let me know.


  54. Mark

    Awesome tool! Your documentation and training videos are really a major value-add. Please, take the time to continue documenting usage scenarios. Suggestions:

    – building physics vehicles or ‘machines’ made from many jointed parts with proportional movement (wheels turning 1x makes a piston pump 3x)

    – creating complex paths with waypoints and interactive triggers

    – maybe a video where you just scroll through the helper code and talk about it

Leave a Reply

Your email address will not be published. Required fields are marked *