Page 2 of 3

Re: Lovely Physics Sandbox

Posted: Thu Aug 18, 2016 1:26 am
by Alexar
hey~~ glad to see that~~ I just tested you .love, it seems that the fps is a little low ? or the movement is not very smooth.
and here is something new

Re: Lovely Physics Sandbox

Posted: Thu Aug 18, 2016 2:43 am
by airstruck
Alexar wrote:it seems that the fps is a little low ? or the movement is not very smooth.
Try adjusting the "updates per second" slider, I left the default value very low but it should look smooth between 30 and 60. If that doesn't fix it please let me know. :)
and here is something new
I couldn't get it to run: Error: editor/interface.lua:0: bad argument #1 to 'unpack' (table expected, got nil)

Looking forward to seeing what you're working on, though. I hope the progress that's been made lately with serializable physics worlds will be useful to you in your latest project. I think worlds will be fully serializable when #1194 is resolved (I hope that will be soon; there's a patch there that should be good to go whenever someone finds time to review it).

Re: Lovely Physics Sandbox

Posted: Wed Aug 31, 2016 1:53 am
by Alexar
Did you notice that, sometimes the objects go missing if GC is on. not completely deleted, but remains the base class, but the class inherited. for example, a revolute joint, witch has a motor, after gc, the type of the joint remains revolute, but the function setMotorSpeed is gone. that's why?
in my opinion, the serialization of the world should not only readable to the engine, but also to human.

Re: Lovely Physics Sandbox

Posted: Wed Aug 31, 2016 7:27 am
by airstruck
Alexar wrote:Did you notice that, sometimes the objects go missing if GC is on. not completely deleted, but remains the base class, but the class inherited. for example, a revolute joint, witch has a motor, after gc, the type of the joint remains revolute, but the function setMotorSpeed is gone. that's why?
Yes, it's really weird and really rare. I'm not sure why it happens. It always seems to be methods of joints that disappear. I suspect this is happening on Love's end, but I haven't been able to recreate it reliably, so I haven't filed a bug report yet. If you (or anyone else) has any idea why this happens or how to recreate it, please let me know.
Alexar wrote:in my opinion, the serialization of the world should not only readable to the engine, but also to human.
This is up to the serialization library, I just dropped in knife.serialize but it could use a serialization library that does some kind of pretty-printing that's more geared toward debugging. Is there a pretty-printing serialization library that you like?

I intend to make the scenes scriptable by letting users give IDs and maybe "tags" to objects in the editor that would be saved along with the world. Then you would write code in a separate file named scene.lua stored in the save folder alongside world.lua. When you first create a world, the tool would save a skeleton of scene.lua. So world.lua would be generated by the tool, and you wouldn't touch that, but you'd edit scene.lua, which would require world.lua, and you could write collision callbacks, an update function, and so on in scene.lua, referencing any unique objects by their IDs and referencing groups of similar objects by their tags. I haven't totally worked out how I want to do everything, but I think it will go something like that. In the end I'm thinking you'd treat world.lua as a sort of black box (similar to UI code generated by UI design tools). It wouldn't hurt to make it human readable anyway, though.

Re: Lovely Physics Sandbox

Posted: Wed Aug 31, 2016 8:04 am
by bartbes
airstruck wrote:Yes, it's really weird and really rare. I'm not sure why it happens. It always seems to be methods of joints that disappear. I suspect this is happening on Love's end, but I haven't been able to recreate it reliably, so I haven't filed a bug report yet.
Is it possible the only reference to the class is a Fixture's userdata? In that case it may be issue #1177.

Re: Lovely Physics Sandbox

Posted: Wed Aug 31, 2016 8:22 am
by airstruck
bartbes wrote:Is it possible the only reference to the class is a Fixture's userdata?
I don't think it has anything to do with userdata, it also seems to happen when none of the physics objects have any userdata. This tool only uses userdata for a custom color plugin, and I'm sure I noticed it before that was added. I've had this happen maybe 5 times over the whole time I've been working on this thing.

I had a more descriptive explanation here but I'm removing it because It's been a while since I've seen the bug and I'm not sure I'm remembering it properly. I'll be working on this more over the next few weeks, and I'll put together a bug report if it happens again. I can't actually prove it's a bug in Love and not my own code at the moment, but the relevant part of my code is pretty straightforward and every time I looked into this I couldn't find any place for a bug like that to hide. My original plan was to eventually try to force the bug through some kind of stress test and then report it.

Re: Lovely Physics Sandbox

Posted: Mon Sep 05, 2016 1:36 am
by Alexar
I am testing if I use a global reference to every joint could fix the problem.

Code: Select all

local ref
local _newWorld = love.physics.newWorld
function love.physics.newWorld(...)
	ref = {}
	return _newWorld(...)
end
local function add(j)
	table.insert(ref, j)
	return j
end

local _gearjoint =  love.physics.newGearJoint
love.physics.newGearJoint=function(...)
	return add(_gearjoint(...))
end

Re: Lovely Physics Sandbox

Posted: Mon Sep 05, 2016 6:47 pm
by airstruck
Alexar wrote:I am testing if I use a global reference to every joint could fix the problem.
Are you seeing the same problem in Box2D Helper?

I'd like to make a small test case to isolate the problem. I guess it might go something like this:

- create a joint, and let any references to it go out of scope
- manually call collectgarbage to ensure the reference is collected
- get a new reference to the joint through World:getJointList
- ensure that the new reference is really not the same as the old reference (using tostring maybe)
- call some method of the joint, like setFrequency, and call world:update
- repeat everything in a loop and hope the problem occurs

Do you think that might work, or do you have any other ideas?

I think I've only seen the problem during undo/redo with this tool, which means a new world is being created from a saved state. That makes me think it might not have as much to do with the GC, and might have more to do with the joint somehow not being fully initialized when its methods are called. I've looked at that part of Love's code quite a bit and have no idea how it would happen, though. Maybe something weird with memoizer?

If anyone has any ideas about how to isolate this problem, please let me know. Again, the problem is that joints seem to "lose" the methods of their most specialized type, resulting in errors like "attempt to call method 'setFrequency' (a nil value)." This happens very rarely and, as far as I can tell, very unpredictably.

Re: Lovely Physics Sandbox

Posted: Sun Sep 11, 2016 11:02 am
by Blizzard47
Its just not working.......

The first screen with panels and stuff that's it.

I can't give any command.

Re: Lovely Physics Sandbox

Posted: Sun Sep 11, 2016 5:25 pm
by airstruck
Blizzard47 wrote:Its just not working.......

The first screen with panels and stuff that's it.

I can't give any command.
What version of Love are you using?