Friday, October 10, 2008

pybox2d r86 - Thin Line Segment Shapes

 


Thanks to shaktool, thin line segments are now available for Box2D! I've ported them to pybox2d, which you can see if you use svn r86. It's still in beta in the C++ form, so API changes can be expected.

This is great news for creating platformer games, and even terrain in general. No longer will you have to worry about tesselating non-convex shapes to get the slopes and such that you want. See the new testbed demos,
test_DynamicEdges.py
test_PyramidStaticEdges.py
test_StaticEdges.py

They are very simple to use, also:

(Assuming a b2Body, body, at the origin)
verts = [ (50.0,0.0), (-50.0,0.0) ]
edgeDef = box2d.b2EdgeChainDef()
edgeDef.setVertices(verts)
edgeDef.isALoop = False
body.CreateShape(edgeDef)

Creates a big, static line at the bottom of your world. If you want to make a dynamic one, simply use body.SetMassFromShapes() afterward. However, there are some problems with the dynamic versions (see the forum post)

Tuesday, September 16, 2008

pybox2d svn r70

Totally restructured the SVN. The full Box2D source is now included, making compiling from SVN very easy. Python 2.6rc1 is also verified working and the steps are in place for a release on that version.

On another note, I think the next actual Box2D release will be a long way off, given that Erin Catto is so busy. Perhaps once b2BuoyancyController makes its way into the C++ port, I'll make an interim release for win32 Python 2.4-6 and OS X.

I like the way pymunk has binaries for all platforms included in his redistribution version. I don't think I could do that with pybox2d, given that SWIG will create a different library for each Python version. Plus, the size would just be too big. Any thoughts?

Anybody out there? もしもし・・・?まっ、いいや。

Sunday, September 14, 2008

pybox2d svn r60

fluiDemo from Blaze My UFOCatcher Test 

svn r60 changelog:
Interface:
b2PolygonShape: getNormals_b2Vec2, getNormals_tuple added
b2Vec2.dot(v2) added.

Miscellaneous:
fluiDemo: Port of Blaze's fluid physics. Too slow in Python to be used in a game. More of a proof of concept. Mostly works, some kinks still there though.

UFOCatcher: Sprites working with Rabbyt, looks pretty but the grip is still not great.

Both require a copy of the data/pgu directories from trunk/testbed to work.


GetNormals() for b2PolygonShape was previously not wrapped, so it was inaccessible from Python. There was always box2d.b2Dot() available for use, but having it built into the b2Vec2 is perhaps more convenient: dotproduct = vec1.dot(vec2) instead of dotproduct = box2d.b2Dot(vec1, vec2).

The fluiDemo, ported from Blaze, is pretty fun to play with. Hopefully the last few bugs can be squashed. I'm sure it'll end up in Box2D itself eventually, at which point we'll be able to use it at full speed! It's just a proof of concept, really, or an extra example of how to use pybox2d.

As far as using Rabbyt for the UFOCatcher game/test, I didn't want to really add another dependency, but it was just too pretty to pass up. If I can find out a good way to get the grip joints working, maybe I'll make an actual little game out of it. I'd like to port it to the XO, but that'll require not using Rabbyt or OpenGL.

Tuesday, September 2, 2008

OLPC Physics Jam


The jam (which used pybox2d on the One Laptop per Child XO) finished up this past weekend. Their final presentations are here.

I'm rather partial to the Rollcats. :)

pybox2d svn r57



* Updated to Box2D SVN r173.
* Note that r173's Makefile needs to be modified to include b2LineJoint.cpp
* Line joints! Testbed ported, formatting updated.

Saturday, August 23, 2008

pybox2d svn r51


So, I figured I'd detail some of the changes made to pybox2d a bit more in detail here. Here's the changes in r51:

* RayCasts working!
* Fixed some cvar confusion:
Since you can't do dir(box2d.cvar), I added a (mostly complete) list in box2d.cvars:
for c in box2d.cvars:
print c, getattr(box2d.cvar, c)

will show plenty of information:
b2_pi 3.14159274101
b2_maxManifoldPoints 2
b2_maxPolygonVertices 8
b2_maxProxies 512
b2_maxPairs 4096
b2_linearSlop 0.00499999988824
b2_angularSlop 0.0349065884948
b2_toiSlop 0.0399999991059
b2_maxTOIContactsPerIsland 32
b2_maxTOIJointsPerIsland 32
b2_velocityThreshold 1.0
b2_maxLinearCorrection 0.20000000298
b2_maxAngularCorrection 0.139626353979
b2_maxLinearVelocity 200.0
...

pybox2d svn up until r50


(pictured: test_TheoJansen.py running on the Pyglet 1.1 testbed)

Recent changes up to r50:

setup.py: Allow for CXXFLAGS to be used (OS X -> Universal Binaries, Linux -> x64) (r47)
TestSegment works (thanks for the tip, neonnds!) (r35)
Backported the testbed to pyglet 1.1. (r50)
test_BreakableBody and TriangleMesh added (thanks nimodo!) (forum post)
OS X guide added (thanks neonnds!)
Added more comments, documentation, fixes. Various cleanups.

Everything should now be updated to Box2D r172 (r162 typo in commit log), with new Step function and slingshot in the testbed.