Hashasm Posted January 31, 2017 Share Posted January 31, 2017 HI, can some one suggest me how i can dynamically increase the size(increase the floors) of building which created in tiled map editor (exported in JSON format) from game and save or update my JSON. To increase the size of the building from game ,in which layer i have to create my building in titled map. * I wanted to increase floor by floor. *user should give the input in form ,like how many floors he want to add. Can someone help me out how can i achieve this Thank You. Quote Link to comment Share on other sites More sharing options...
Parasyte Posted February 5, 2017 Share Posted February 5, 2017 Hi, It sounds like you want to implement tile map editing inside melonJS. This would be an amazing contribution; it's something that hasn't been worked on yet. Hypothetically, it should just be a matter of maintaining a reference to the original JSON source, and updating that with the existing "setter" methods on the layer, tile, and map objects. For example, changing a tile on a layer is just a matter of calling the setTile method on the layer object. To update the JSON source as well, this method needs to be updated to poke the given tileId into the correct array location (based on provided coordinates) within the appropriate layer (defined by the layer object instance itself). The UI is totally up to you; whether it's a form (as you asked), or click-and-drag style drawing (as in Tiled). In the end, you're going to use API calls like the one I linked above. Best of luck! alcor 1 Quote Link to comment Share on other sites More sharing options...
Hashasm Posted February 8, 2017 Author Share Posted February 8, 2017 thankyou!!!! in such case the original json file(the map) should be updated after each event. Is that what you are saying?? So even if I try to update the map json using node, to see the effect in the game i will have to load the page again rite?? Quote Link to comment Share on other sites More sharing options...
Parasyte Posted February 8, 2017 Share Posted February 8, 2017 No, you can do dynamic updates to the in-memory representation of the map. Just be aware that this in-memory representation is a series of class instances in melonJS, which are built out of the original JSON source. But the original JSON source is not used after the initial load. The disconnect with saving the modified map out to JSON is the missing bits that the "setter methods" currently do not touch the JSON source. Does that make sense? It is a feature that can be added, that's all. Quote Link to comment Share on other sites More sharing options...
Hashasm Posted February 13, 2017 Author Share Posted February 13, 2017 where can i find the documentation for setter mothd and its syntax Quote Link to comment Share on other sites More sharing options...
Hashasm Posted February 13, 2017 Author Share Posted February 13, 2017 how can i get the json object of tilemap from browser memory. game.resources object is giving me only the path values. please help!! Quote Link to comment Share on other sites More sharing options...
obiot Posted February 13, 2017 Share Posted February 13, 2017 3 differents ways : if you want to have access to the loaded json, you can use the getJSON method from the loader : http://melonjs.github.io/melonJS/docs/me.loader.html#getJSON if you want to have access to the parsed & interpreted map, you can use the level director: http://melonjs.github.io/melonJS/docs/me.levelDirector.html and finally if you want to have access to the currently "loaded" map, you can use the getChildByXXX method from the world container object : http://melonjs.github.io/melonJS/docs/me.Container.html#getChildByName this will for example return you the instantiated layer : http://melonjs.github.io/melonJS/docs/me.TMXLayer.html now the usage depends a bit of what you exactly want to do ? do you want to change the level definition before a level is loaded ? or do you want to modify the level "in-game" ? Quote Link to comment Share on other sites More sharing options...
Hashasm Posted February 13, 2017 Author Share Posted February 13, 2017 thank you .i want to modify the level "in-game" Quote Link to comment Share on other sites More sharing options...
Anna Posted February 14, 2017 Share Posted February 14, 2017 @Parasyte.. regarding the in in-memory representation of the map .. so 'me.game.world.children' will give me all the object entities mentioned in the map. so i was trying to alter in dynamically after an event.. since me.game.world.children is return an array. I was trying to push new object to the same array. But its giving me error " TypeError: obj.update is not a function" .. is der any other way to alter it dynamically!! Quote Link to comment Share on other sites More sharing options...
obiot Posted February 14, 2017 Share Posted February 14, 2017 me.game.world.children is a private property, and you should not use it directly ! the proper way to add or remove child from a container (me.game.world is a container) is through the addChild and removeChild method : http://melonjs.github.io/melonJS/docs/me.Container.html#addChild http://melonjs.github.io/melonJS/docs/me.Container.html#removeChild also as you will see, addChild expect an object inheriting from the base me.Renderable class. as for modifying the level definition, you should rather directly get the me.Layer object, as I was explaining before the following code for example, will returns you all the container TMX Layer object (actually returns an array of me.TMXLayer) : me.game.world.getChildByType(me.TMXLayer) that you can manipulate through the getter/setter described in the documentation here : http://melonjs.github.io/melonJS/docs/me.TMXLayer.html Quote Link to comment Share on other sites More sharing options...
Parasyte Posted February 15, 2017 Share Posted February 15, 2017 In addition, use me.game.world.getChildByName() and friends to lookup the instantiated layers and game objects. When adding a child to the game world, make sure it is an instance of a class, and a not just a reference to the class itself. E.g. you need to use the new operator to create a new instance of the entity. There are many examples of this pattern, like the platformer tutorial, you'll find the following snippet: // add our HUD to the game world this.HUD = new game.HUD.Container(); me.game.world.addChild(this.HUD); An alternative is using the entity pool, which can help eliminate GC pauses by reusing instances. This snippet is from the Space Invaders tutorial: me.game.world.addChild(me.pool.pull("player"), 1); me.game.world.addChild(me.pool.pull("enemy", 50, 50), 2); Quote Link to comment Share on other sites More sharing options...
Anna Posted February 16, 2017 Share Posted February 16, 2017 Thankyou guys.. I understood !!!!!!!! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.