Page 89 of 92

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Sun Dec 05, 2021 10:24 pm
by ClaudeM
Hi markusm,

I am also new to LÖVE2D. I started with a very simple « click on the target » game from a video on YouTube. I then build Bulldozer in steps: I got a copy of Tiled (the editor), found a tile set I liked, made a map, and loaded it in a rudimentary game (it did almost nothing). I added things to it one at a time: sound, an object layer, and the bulldozer. I added LÖVE2D physics later; it took a long time to get the bulldozer moving well.

I then worked on collisions with physics. LÖVE2D uses the Box2D library; it is excellent and well known. This is a complex element of the game. I made the choice to use physics because later stages of the game will benefit from it (e.g., you cannot push too many rocks at a time). You may not need physics; one alternative is bump https://love2d.org/wiki/bump.lua.

When I started having difficulty with collisions, I made a smaller 8 x 8 map with only one rock. I added a lot of print statements to see what was happening. Print is your friend. If there is a lot of output, pipe it into a file you can examine more conveniently with something like the 'less' command.

The world.lua file you provided is quite different from the one I am using. I have not seen chunks before, but may not mean much since I am a beginner with Tiled editor. Here is a half-size screenshot of Tiled with my small testing map. I put the ground tiles in one layer and the rock on an object layer. You can see the dashed lines of the collision boxes; I added those to the tile-set.

There are other tricks with using Tiled. It took me a while to learn.

Good luck in your development.
Tiled_editor_half-size_20211205.png
Tiled_editor_half-size_20211205.png (322.49 KiB) Viewed 14291 times

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Sun Dec 05, 2021 10:27 pm
by ClaudeM
P. S. I tried using your map with the example in the STI GitHub page and also got a blank window. I suggest starting with that code.

https://github.com/karai17/Simple-Tiled-Implementation

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Sun Dec 05, 2021 10:34 pm
by Karai17
I don't believe infinite maps / chunked maps currently work with STI. You will need to change your map properties to have a fixed size.

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Mon Dec 06, 2021 12:46 am
by markusm
Thanks everybody for the feedback! I will try fixed sized maps.

And thanks Claude for giving me the Bulldozer example, looks like a fun game. Can I do something to debug the crash I have on my MacBook Pro ? Do not really know how to provide debug information with Love2D right now.

Thanks,

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Mon Dec 06, 2021 12:53 am
by Karai17
Is it a hard crash or are you getting the blue screen with white text? If the latter, you can post a screenshot of that as it should tell you where the error is occuring and give a stack trace for how that function got called. If the former, might want to pop into the LOVE Discord and @slime with more details.

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Mon Dec 06, 2021 3:27 am
by markusm
It's not a crash per se but the app hangs and the audio channel goes wild, have to kill the process in the task manager.

Ok, will join the discord and message @slime. Thanks.

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Wed Dec 08, 2021 2:07 am
by ClaudeM
Found the problem with rock object positions being off by a factor of two: vertices are relative to the object, do not add the position of the object. Here is the section of sti/plugin/box2d.lua

Code: Select all

            elseif o.shape == "polygon" then
                -- Recalculate collision polygons inside tiles
                if tile then
                    local cos = math.cos(math.rad(o.r))
                    local sin = math.sin(math.rad(o.r))
                    for _, vertex in ipairs(o.polygon) do
--                      vertex.x = vertex.x + o.x
--                      vertex.y = vertex.y + o.y
                        vertex.x, vertex.y = utils.rotate_vertex(map, vertex, o.x, o.y, cos, sin)
                    end
                end

                local vertices  = getPolygonVertices(o)
                local triangles = love.math.triangulate(vertices)

                for _, triangle in ipairs(triangles) do
                    addObjectToWorld(o.shape, triangle, userdata, tile or object)
                end 
Bulldozer_20211207.png
Bulldozer_20211207.png (41.22 KiB) Viewed 14204 times
Time to write the code to move the rock sprite to match the physics engine's position for the rock.

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Fri Dec 10, 2021 4:20 pm
by ClaudeM
Hi,

After looking more at the Box2D plugin code, I see that static elements of a tile can be associated with the main body (the first one created in box2d_init). For those, adding the tile position is required. The code must recognize this situation; there must be cooperation between the Box2D plugin and the way the map is designed in Tiled editor.

Is there an established convention? Would this work? Mark a tile layer as collidable and static while leaving the individual tiles un-marked; the code can detect this and do the right thing. The other case is an object layer with some collidable objects marked dynamic and some marked as static. Oh, the comments at the bottom of the Box2D plugin do not mention a static property. Should static objects be marked "dynamic: false" ? We can also say that the absence of the dynamic property means static.

Thoughts?

Thanks.

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Fri Dec 24, 2021 1:01 am
by ClaudeM
Hi Karai17,

Where in the map does the draw function get the x, y, and r ? I want to update dynamic object tiles (images) and tried updating the tileInstances table, but it has no effect. I looked at the main STI function (init.lua) and had a hard time following the code.

Thanks.

Re: Simple Tiled Implementation - STI v1.2.3.0

Posted: Fri Dec 24, 2021 5:59 pm
by Karai17
tiles get batched so you need to remove it from the batch, update the instance, then add it back to the batch