Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 09.02.2010, 14:37 Titel: Physikengine Box2D für FreeBASIC? |
|
|
Hi
Ich versuche seit gestern vergebens die Physikengine Box2D nach FreeBASIC zu porten.
Ich habe die box2d.dll und die libbox2d.dll.a aber ich bekomme die box2d.h nicht konvertiert.
Ich habe es mit SWIG versucht, der liefert jedoch nur leere Dateien. Vielleicht bin ich nur zu blöd, SWIG zu benutzen (obwohl ich damit schon mehrere Headers konvertiert habe).
Wäre nett wenn das jemand konvertieren könnte, oder mir eine vergleichbare Alternative 2D Phyisikengine, die einfach mit OpenGL zu verwenden ist, nennen kann. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 09.02.2010, 15:11 Titel: |
|
|
So wie ich das sehen, includiert die Headerdatei noch viele andere Header die du vorher alle übersetzen musst. Außerdem handelt es sich bei dem Code um C++, das wird SWIG überfordern. |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 09.02.2010, 15:13 Titel: |
|
|
Aber SWIG hat doch eine -c++ Option |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 09.02.2010, 20:41 Titel: |
|
|
Ja, aber in der Freebasicsprachdefinitionsdatei sind keine Übersetzungen für C++ Konstrukte definiert. |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 09.02.2010, 20:41 Titel: |
|
|
Viel Spass!
Code: |
Box2D_v2.0.1\Box2D\Source\Collision\b2BroadPhase.h
Box2D_v2.0.1\Box2D\Source\Collision\b2Collision.h
Box2D_v2.0.1\Box2D\Source\Collision\b2PairManager.h
Box2D_v2.0.1\Box2D\Source\Collision\Shapes\b2CircleShape.h
Box2D_v2.0.1\Box2D\Source\Collision\Shapes\b2PolygonShape.h
Box2D_v2.0.1\Box2D\Source\Collision\Shapes\b2Shape.h
Box2D_v2.0.1\Box2D\Source\Common\b2BlockAllocator.h
Box2D_v2.0.1\Box2D\Source\Common\b2Math.h
Box2D_v2.0.1\Box2D\Source\Common\b2Settings.h
Box2D_v2.0.1\Box2D\Source\Common\b2StackAllocator.h
Box2D_v2.0.1\Box2D\Source\Common\Fixed.h
Box2D_v2.0.1\Box2D\Source\Common\jtypes.h
Box2D_v2.0.1\Box2D\Source\Dynamics\b2Body.h
Box2D_v2.0.1\Box2D\Source\Dynamics\b2ContactManager.h
Box2D_v2.0.1\Box2D\Source\Dynamics\b2Island.h
Box2D_v2.0.1\Box2D\Source\Dynamics\b2World.h
Box2D_v2.0.1\Box2D\Source\Dynamics\b2WorldCallbacks.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Contacts\b2CircleContact.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Contacts\b2Contact.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Contacts\b2ContactSolver.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Contacts\b2NullContact.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Contacts\b2PolyAndCircleContact.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Contacts\b2PolyContact.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Joints\b2DistanceJoint.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Joints\b2GearJoint.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Joints\b2Joint.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Joints\b2MouseJoint.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Joints\b2PrismaticJoint.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Joints\b2PulleyJoint.h
Box2D_v2.0.1\Box2D\Source\Dynamics\Joints\b2RevoluteJoint.h
|
Das Problem ist, dass da auch viel virtuelle Funktionen dabei sind. Das kann man nicht so einfach nach C "flachklopfen". Da muss man schon Hand anlegen und im Einzelfall überlegen, wie man das mit ein paar Fallunterscheidungen und Rückgriff auf Klassen-Identifier in "normale" Methoden umbiegt. Geschätzter Zeitaufwand in Stunden: Mehr als 20 sicher.
VG!
Croco |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 12.02.2010, 15:11 Titel: |
|
|
*Wäääh*
Schade  |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 12.02.2010, 21:04 Titel: |
|
|
Na ja, einen Weg wüsste ich schon, wie du mit wesentlich weniger Aufwand dran kommst:
Du nimmst dir einen C++-Compiler (gpp unter Linux, mingw unter Windows) und baust dir einen s.g. Wrapper. Das sind "normale" Funktionen, die nichts anderes machen als wichtige Methoden der box2d aufrufen. Schematisch
Code: |
box2dclass box2d;
void my_foo(double x, double y)
{
box2d->foo(x,y);
}
|
Das Ganze kompilierst du zu einer DLL (bzw. so)-Lib und linkst es an Freebasic. Und hast damit sozusagen eine FB_BOX2D-Library geschaffen. Nicht mehr ganz das Original, aber es wird das tun, was du brauchst.
Zum Umgang mit DLL's: bzw. so's) hier
VG!
Croco |
|
Nach oben |
|
 |
|