kripken / box2d.js

Port of Box2D to JavaScript using Emscripten
1.33k stars 196 forks source link

Calling GetNext on fixture always return some object #17

Open ttRevan opened 11 years ago

ttRevan commented 11 years ago

The next code snippet results in an infinte loop:

var fixture = body.GetFixtureList();
while (fixture) {
    aabb.Combine(aabb, fixture.GetAABB());
    fixture = fixture.GetNext();
}

As I understand, it happens because GetNext() and similar functions in turn calls some wrapping function, that always create some object (if none) to return:

function Z(b, d) {
    var e = d ? d.prototype.b : cW,
    f = e[b];
    if (f) {
        return f
    }
    d = d || Object;
    f = Object.create(d.prototype);
    f.a = b;
    f.c = d;
    return e[b] = f
}
Module.wrapPointer = Z;
sebastianovide commented 11 years ago

I have the same problem....

bunnyhero commented 11 years ago

Calling GetNext() on a body results in the same problem. A loop like the following will never exit:

for (var body = world.GetBodyList(); body; body = body.GetNext()) {
   // stuff
}
Joncom commented 11 years ago

Bit of a hack, but this seems to work:

for(var edge = this.body.GetContactList(); edge.ptr !== 0; edge = edge.get_next()) {}
bunnyhero commented 11 years ago

Nice, thanks!

bunnyhero commented 11 years ago

When looping through Bodies, .ptr resulted in an error. I had to use Box2D.getPointer(body) !== 0

Joncom commented 11 years ago

Yes, you are correct. And you've already discovered the workaround. Since there is a workaround, this issue is quite superficial. Just a heads up however, there are many deeper issues with this port which make it unusable for any non-experimental purposes. Box2DWeb is more reliable presently, albeit slightly older.

On 2013-06-30, at 5:16 PM, bunnyhero notifications@github.com wrote:

When looping through Bodies, .ptr resulted in an error. I had to use Box2D.getPointer(body) !== 0

— Reply to this email directly or view it on GitHub.

lzantal commented 11 years ago

Hi,

I also like the syntax better of this port. What other deeper issues there? I would prefer to include this port with RaptorGL instead of Box2DWeb. I'm happy to help out if you can give me some pointers.

Cheers

Laszlo http://twitter.com/LZAntal

On Jun 30, 2013, at 8:16 PM, Jonathan Commins notifications@github.com wrote:

Yes, you are correct. And you've already discovered the workaround. Since there is a workaround, this issue is quite superficial. Just a heads up however, there are many deeper issues with this port which make it unusable for any non-experimental purposes. Box2DWeb is more reliable presently, albeit slightly older.

On 2013-06-30, at 5:16 PM, bunnyhero notifications@github.com wrote:

When looping through Bodies, .ptr resulted in an error. I had to use Box2D.getPointer(body) !== 0

— Reply to this email directly or view it on GitHub. — Reply to this email directly or view it on GitHub.

Joncom commented 11 years ago

A bunch of functions do not properly return values. For example, body.GetMassData() returns an error always. In fact the b2MassData class is not bound, and thus is not available for use. This is not the issue however, because even if you were to use embind to make the class available, the function still does not appear to return valid data. Other important functionality like b2Manifold used when listening for collisions is also broken. There are actually quite a few classes which have not been bound. But who knows, maybe you won't need them...

On 2013-07-02, at 11:47 AM, lzantal notifications@github.com wrote:

Hi,

I also like the syntax better of this port. What other deeper issues there? I would prefer to include this port with RaptorGL instead of Box2DWeb. I'm happy to help out if you can give me some pointers.

Cheers

Laszlo http://twitter.com/LZAntal

On Jun 30, 2013, at 8:16 PM, Jonathan Commins notifications@github.com wrote:

Yes, you are correct. And you've already discovered the workaround. Since there is a workaround, this issue is quite superficial. Just a heads up however, there are many deeper issues with this port which make it unusable for any non-experimental purposes. Box2DWeb is more reliable presently, albeit slightly older.

On 2013-06-30, at 5:16 PM, bunnyhero notifications@github.com wrote:

When looping through Bodies, .ptr resulted in an error. I had to use Box2D.getPointer(body) !== 0

— Reply to this email directly or view it on GitHub. — Reply to this email directly or view it on GitHub. — Reply to this email directly or view it on GitHub.