How to Add Box2d in cocos2d-x project in simple way?

I successfully made cocos2d-x ios android project…Now i want to add box2d in my project i tried all the ways that are in forum like adding box2d library path in android.mk but it gave me error…so, anyone tell me how to add it easily? thanx in advance

bump

i did it…:wink:

i’d love to know how you did it.

i’m looking for an example of box2d implementation, it’s hard to find.

For android include Box2d path in android.mk

This is my android.mk:
///
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := game_shared

LOCAL_MODULE_FILENAME := libgame

LOCAL_SRC_FILES := hellocpp/main.cpp …/…/Classes/AppDelegate.cpp …/…/Classes/HelloWorldScene.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/…/…/…/Box2D $(LOCAL_PATH)/…/…/Classes

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static cocos_extension_static box2d_static
include $(BUILD_SHARED_LIBRARY)

$(call import-module,CocosDenshion/android) $(call import-module,cocos2dx) $(call import-module,extensions)
$(call import-module,external/Box2D)
/////

And for Ios just create cocos2dx_box2d project…thats it :smiley:

i copied an old sample cocos2d-x box2d project from a year ago, and i’m getting errors.

// Define the gravity vector.
b2Vec2 gravity;
gravity.Set(0.0f, –10.0f);

// Construct a world object, which will hold and simulate the rigid bodies.
world = new b2World(gravity, doSleep);

// Define the ground box shape.
b2PolygonShape groundBox;

SharedLibrary  : libhellocpp.so
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function b2PolygonShape::b2PolygonShape():jni/../../../libs/Box2D/Collision/Shapes/b2PolygonShape.h:89: error: undefined reference to 'vtable for b2PolygonShape'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function b2PolygonShape::~b2PolygonShape():jni/../../../libs/Box2D/Collision/Shapes/b2PolygonShape.h:26: error: undefined reference to 'vtable for b2PolygonShape'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:30: error: undefined reference to 'b2World::b2World(b2Vec2 const&, bool)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:54: error: undefined reference to 'b2World::CreateBody(b2BodyDef const*)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:60: error: undefined reference to 'b2PolygonShape::SetAsEdge(b2Vec2 const&, b2Vec2 const&)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:61: error: undefined reference to 'b2Body::CreateFixture(b2Shape const*, float)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:64: error: undefined reference to 'b2PolygonShape::SetAsEdge(b2Vec2 const&, b2Vec2 const&)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:65: error: undefined reference to 'b2Body::CreateFixture(b2Shape const*, float)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:68: error: undefined reference to 'b2PolygonShape::SetAsEdge(b2Vec2 const&, b2Vec2 const&)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:69: error: undefined reference to 'b2Body::CreateFixture(b2Shape const*, float)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:72: error: undefined reference to 'b2PolygonShape::SetAsEdge(b2Vec2 const&, b2Vec2 const&)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::Level1():jni/../../Classes/Level1Scene.cpp:73: error: undefined reference to 'b2Body::CreateFixture(b2Shape const*, float)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function .LTHUNK23:jni/../../Classes/Level1Scene.cpp:92: error: undefined reference to 'b2World::~b2World()'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::addNewSpriteWithCoords(cocos2d::CCPoint):jni/../../Classes/Level1Scene.cpp:190: error: undefined reference to 'b2World::CreateBody(b2BodyDef const*)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::addNewSpriteWithCoords(cocos2d::CCPoint):jni/../../Classes/Level1Scene.cpp:194: error: undefined reference to 'b2PolygonShape::SetAsBox(float, float)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::addNewSpriteWithCoords(cocos2d::CCPoint):jni/../../Classes/Level1Scene.cpp:201: error: undefined reference to 'b2Body::CreateFixture(b2FixtureDef const*)'
/usr/lib/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/Level1Scene.o: in function Level1::tick(float):jni/../../Classes/Level1Scene.cpp:219: error: undefined reference to 'b2World::Step(float, int, int)'
collect2: ld returned 1 exit status

can you please post your working sample so i can test my setup?

Before copying you have to include box2d in eclipse project…

it Looks like path error…did you include box2d in your project?

i’m working on including box2d.

part of my jni/Android.mk

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Box2D \
                            $(LOCAL_PATH)/../../Classes


LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static box2d_static 

include $(BUILD_SHARED_LIBRARY)

$(call import-module,cocos2dx/platform/ouya)
$(call import-module,extensions/ouya)
$(call import-module,Box2D)

my file system looks like this:
root-

  • cocos2dx
  • extensions
  • Box2D
  • project
  • Classes
  • proj.ouya
  • jni
  • Android.mk <— this file
  • Resources
  • Tests

never finished compiling

Compile++ thumb  : hellocpp_shared <= main.cpp
Compile++ thumb  : hellocpp_shared <= AppDelegate.cpp
In file included from jni/../../../Box2D/Box2D.h:36:0,
                 from jni/../../Classes/Level1Scene.h:5,
                 from jni/../../Classes/AppDelegate.cpp:4:
jni/../../../Box2D/Collision/Shapes/b2CircleShape.h:22:44: fatal error: Box2D/Collision/Shapes/b2Shape.h: No such file or directory
compilation terminated.
make: *** [obj/local/armeabi/objs-debug/hellocpp_shared/__/__/Classes/AppDelegate.o] Error 1

will you please post a sample project with box2d working and compiling?

My project is too long thats y i cant post it…

Your box2d folder is not it externals folder? if it is not in external folder in jni change this line “/…/…/…/Box2D to this”/…/…/Box2D"…and then clean and build…hope it will work…