Open Beelzebubele opened 7 years ago
Right now Tiled always assumes that the top left corner of an object is its origin point.
Unfortunately it's worse than that. Shape objects have top-left corner origin, tile objects have bottom-left corner origin and tile objects on isometric maps have bottom-center origin. :-/
The long term solution should be two standard property values for objects that define the offset for their render coordinates in Tiled itself.
Yeah, such an offset is currently only supported at the tileset level. There's a patch that introduces it at the tile level (#1323). But of course it could be useful for non-tile objects as well.
A short term solution could be to simply add the custom property values to the coordinates on export. In my case I would like to use Tiled for GameMaker so it should be a pretty simple adjustment in the Game Maker Exporter Script.
Right, since GameMaker already supports changing the anchor point for each defined object, it would be useful to have the option to tell Tiled what that anchor point is, so that it can adjust the exported position accordingly. A custom property would be fine for this, and I imagine this property should be supported on both objects and tiles (applied to typed tile objects).
It could conceivably by possible to import a template group from the objects defined in a GameMaker project, but that would be quite a big project.
This is the only missing feature that prevents me from using Tiled for my Level Design.
Do I miss some workarounds other people use for their placement of objects? Or is the top-left-corner the common origin point for objects in level design even for such things like collectibles and npcs?
Do I miss some workarounds other people use for their placement of objects? Or is the top-left-corner the common origin point for objects in level design even for such things like collectibles and npcs?
The "workaround" in case Tiled's origin does not match that of your own project, is to convert positions while or after loading the map.
Sound like I need to write an extra programm/script for that purpose that edits the coordinates in the level file so I can have a proper preview in the game engine itself :/
@TrunXGIT Which game engine are you using?
GameMaker 1.4
Big thanks for implementing the originX and originY custom properties in the current developer build during our chat!
@bjorn
thanks for confirming that, i found this out last night deconstructing the xml... did this just occur in the development process of tiled by accident?
I found removing an object's gid, turning it therefore into a rectangle, moves it's position!
It is a shame there seems a lack of holistic purity in the file format, however can I say the editor itself is a real achievement, despite having to convert the data it still saves me some time.
I dunno if it's just YET ANOTHER TMX program
but I am currently updating my script (python) that deconstructs TMX, but in what (I THINK) is a better way.
https://github.com/DarkShroom/tmx_loader
I take it apart and in particular do not like 3 flip flags, so change this to rotation 0-3, flip 0-1 which i feel reflects the editor itself (the ZX controls)... i now will likely be correcting the object/rectangle contradiction.
i also like to reflect the names used in the editor itself not the XML format. I put custom properties in line with all the other ones (but overwritten by existing properties)
I dunno, the script is for me really as I am working on a framework in Love 2D, i don't like doing advanced things inside lua itself, i like the idea of making an intermediate format that is as dumb as possible.
Anyway that was my rant, good work on tiled, good program :)
thanks for confirming that, i found this out last night deconstructing the xml... did this just occur in the development process of tiled by accident?
Yes, more or less. It happened because tile objects were intended for graphical elements in a "top down" use-case, where an origin at the bottom made sense because of the sorting before rendering (by default objects render sorted by their y-coordinate). Similar for isometric maps, where tile objects just "stand" on the map whereas rectangle objects get isometric projection since they are "lying on the floor".
Essentially the tile objects are almost consistent with tiles on a tile layer (if you consider that tiles on a tile layer are aligned to the bottom-left of their cell).
I dunno, the script is for me really as I am working on a framework in Love 2D, i don't like doing advanced things inside lua itself, i like the idea of making an intermediate format that is as dumb as possible.
Ok, so you're writing some advanced Python script to keep the advanced stuff out of your Lua code? :-)
I take it apart and in particular do not like 3 flip flags, so change this to rotation 0-3, flip 0-1 which i feel reflects the editor itself (the ZX controls)... i now will likely be correcting the object/rectangle contradiction.
Indeed there is no "diagonal flip" key in Tiled because I think that would be confusing. On the implementation side though, just having three flip bits makes it easy to apply it to texture coordinates (though I don't benefit from this in Tiled, cause the rendering is done with QPainter).
Anyway that was my rant, good work on tiled, good program :)
Thanks! And thanks for sharing your script! :-)
no worries, yes exactly i need to keep the advanced stuff out of lua for my sanity :)
Unfortunately it's worse than that. Shape objects have top-left corner origin, tile objects have bottom-left corner origin and tile objects on isometric maps have bottom-center origin. :-/
I noticed that today and now documented that in my .tmx parser. Do you think this will change at any point? More importantly, is this in the tiled manual? I was reading it last night because I was very confused but figured it out today with trial and error.
Likewise, I also ran into this issue today. I'm using only Object Layers and I prefer to deal with object center positions in my game code. I wasn't surprised about the top-left origin and it wasn't hard to account for in my custom exporter, but having certain objects still be offset was a surprise.
Maybe there's a better way to work around it, I'm just checking if MapObject.tile exists and if so, I offset the Y-pos in the opposite direction.
@dandeto @rgrams For tile objects, you can configure their origin with the "Object Alignment" property of their tileset. It defaults to "Unspecified", in which case the old inconsistent behavior is used, but you can set it to "Top Left" to have tile objects have the same origin as the shape objects, or to another origin if you prefer (but shape objects will still have top left origin).
Regarding the documentation, this feature was added in Tiled 1.4 and is mentioned in the Tileset Properties section as well as at the Insert Tile tool and the TMX format docs.
Good to know, thanks.
Regarding the documentation: In my case, my first project after picking up Tiled was to write a custom exporter script, so instead of reading the manuals on how to use everything in the editor, I was coming at it from the scripting side, reading all the API docs. So it would be great if there could be links to that information from the API reference, probably under MapObject.x, .y, and .pos.
Before it gets forgotten I thought I will post it here.
A lot of engines use custom origin points (the anchor points) for the game objects. In isometric and 3/4 View (JRPG Perspective) games it makes sense to set the anchor points around the center of the feet. This makes it easier to render the scene in the right order and also apply shadows at these coordinates for example. In side scrolling games in which you often mirror sprites horizontally depending on its direction it makes sense to set the y-origin point to the center so when you mirror the sprite the object will not jump to another position.
Right now Tiled always assumes that the top left corner of an object is its origin point.
The long term solution should be two standard property values for objects that define the offset for their render coordinates in Tiled itself.
A short term solution could be to simply add the custom property values to the coordinates on export. In my case I would like to use Tiled for GameMaker so it should be a pretty simple adjustment in the Game Maker Exporter Script.
Here a chatlog from a few days ago:
Personally I would be fine with ignoring the rotation for now.