Android b2body未显示在b2world-Box2D中

Android b2body未显示在b2world-Box2D中,android,box2d,cocos2d-x,Android,Box2d,Cocos2d X,我在cocos2d-x2.2.1中使用box2d 使用这个简单的代码在屏幕上显示b2body,但使用 b2BodyDef myBodyDef; myBodyDef.type = b2_dynamicBody; myBodyDef.position.Set(_screenSize.width / 3, _screenSize.height / 3); myBodyDef.angle = 0; b2Body* dynamicBody = m_world->CreateBody(&my

我在cocos2d-x2.2.1中使用box2d

使用这个简单的代码在屏幕上显示b2body,但使用

b2BodyDef myBodyDef;
myBodyDef.type = b2_dynamicBody;
myBodyDef.position.Set(_screenSize.width / 3, _screenSize.height / 3);
myBodyDef.angle = 0; 
b2Body* dynamicBody = m_world->CreateBody(&myBodyDef);
b2PolygonShape boxShape;
boxShape.SetAsBox(10, 10);

PTM_RATIO = 40.0f;
m_debugDraw = new GLESDebugDraw(PTM_RATIO);
m_world->SetDebugDraw(m_debugDraw);

b2FixtureDef boxFixtureDef;
boxFixtureDef.shape = &boxShape;
boxFixtureDef.density = 1;
dynamicBody->CreateFixture(&boxFixtureDef);
我越来越

m_debugDraw = new GLESDebugDraw(PTM_RATIO);
我只是在做他们的参考项目,但我找不到为什么这个对象没有显示在屏幕上

如果我没有声明PTM_比率的值,它给出的错误是

Classes/HelloWorldScene.cpp:164: error: undefined reference to 'GLESDebugDraw::GLESDebugDraw(float)'
更新:1: 通过在我的android.mk文件中包含GLES_Render.cpp,可以清除与PTM_比率相关的错误

更新:2: 这是我的绘图方法代码

PTM_RATIO value was not declared in this scope.
更新:3: 我的最终代码:

我的android.mk文件

void HelloWorld::draw() {
//
// IMPORTANT:
// This is only for debug purposes
// It is recommend to disable it
//
CCLayer::draw();

ccGLEnableVertexAttribs (kCCVertexAttribFlag_Position);

kmGLPushMatrix();

m_world->DrawDebugData();

kmGLPopMatrix();
}
我就是这样定义这个世界的

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 \
               ../../Classes/GLES_Render.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
                /home/user/adt/cocos2dx/external/Box2D \
                /home/user/adt/cocos2dx/external


LOCAL_WHOLE_STATIC_LIBRARIES := cocos_testcpp_common
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,cocos2dx)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
$(call import-module,external/Box2D)
$(call import-module,external/chipmunk)
然后在一个菜单精灵点击回调方法,我用这个来显示一个b2body

m_world = new b2World(gravity);
m_world->SetAllowSleeping(true);
m_world->SetContinuousPhysics(true);
m_debugDraw = new GLESDebugDraw(PTM_RATIO);
m_world->SetDebugDraw(m_debugDraw);
uint32 flags = 0;
flags += b2Draw::e_shapeBit;
//  flags += b2Draw::e_jointBit;
/*flags += b2Draw::e_aabbBit;
 flags += b2Draw::e_pairBit;
 flags += b2Draw::e_centerOfMassBit;*/
m_debugDraw->SetFlags(flags);
请告诉我哪里做错了。我找不到它。谢谢

您的错误是:

b2BodyDef myBodyDef;
myBodyDef.type = b2_dynamicBody; //this will be a dynamic body
myBodyDef.position.Set(_screenSize.width / 3, _screenSize.height / 3);
//set the starting position
myBodyDef.angle = 0; //set the starting angle
b2Body* dynamicBody = m_world->CreateBody(&myBodyDef);
dynamicBody->SetType(b2_staticBody);
b2PolygonShape boxShape;
boxShape.SetAsBox(200, 200);

b2FixtureDef boxFixtureDef;
boxFixtureDef.shape = &boxShape;
boxFixtureDef.density = 1;
dynamicBody->CreateFixture(&boxFixtureDef);

看起来您的GLESDebugDraw没有定义。是否包含类头文件?

android.mk
中,您必须添加
GLESDebugDraw.cpp
,并在使用它的.cpp文件中包含
GLESDebugDraw.h

如果要调试draw,则必须在draw方法中只写入这些行

Classes/HelloWorldScene.cpp:164: error: undefined reference to 'GLESDebugDraw::GLESDebugDraw(float)'
在init方法或构造函数中

CCLayer::draw();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );

kmGLPushMatrix();

world->DrawDebugData();

kmGLPopMatrix();
试试这个,这是我的初始化方法

debugDraw = new GLESDebugDraw(PTM_RATIO);
world->SetDebugDraw(debugDraw);

uint32 flags = 0;
flags += b2Draw::e_shapeBit;
//  flags += b2Draw::e_jointBit;
/*flags += b2Draw::e_aabbBit;
    flags += b2Draw::e_pairBit;
    flags += b2Draw::e_centerOfMassBit;*/
debugDraw->SetFlags(flags);
这是我的
plbdy()

这是我更新世界的Box2d更新方法

plbdy()
{
b2BodyDef bdf ;

    bdf.type = b2_dynamicBody;

    b2PolygonShape shape;
    shape.SetAsBox(1,1);
    b2FixtureDef fd;
    fd.shape = &shape;
    fd.density = 1;

b2Body hero = _world->CreateBody(&bdf2);
    hero->CreateFixture(&fd);
}
撸撸撸撸撸


需要将GLES_Render.cpp添加到android.mk文件中。我已经添加到mk文件中,它可以与完整的debugdraw一起工作。下面是我在hello world中加入PTM_比率的地方

Try these make a simple body nothing more and then check body is created or not

我没有在我的android.mk中包含GLES_Render.cpp,因为我包含了与PTM_比率相关的“GLESDebugDraw”错误。但是我没有在屏幕上看到对象,定义PTM\U比率40使用这个我不知道为什么我没有在屏幕上看到任何东西。其他精灵也在显示,但box2d对象也没有显示更新后的ans。发布代码后,我将看到它包含在hello中的GLESDebugDraw.h。h也可以为您工作。请查看我的更新3我已更新代码。现在没有错误。但是对象也没有显示在我的android.mk中我没有包括GLES_Render.cpp,在我包括与PTM_比率相关的“GLESDebugDraw”错误之后。但是我没有在屏幕上看到这个对象。你可以在帖子中查看我的.mk文件,也可以更改GLES_渲染类。。。你可以用我的。。。下午我与您的电子邮件地址,我会把它通过
update(float dt)
{
int velocityIterations = 8;
    int positionIterations = 1;
_world->Step(dt, velocityIterations, positionIterations);
}
Try these make a simple body nothing more and then check body is created or not
    #ifndef __HELLOWORLD_SCENE_H__
    #define __HELLOWORLD_SCENE_H__

    #include "cocos2d.h"
    #include "Box2D/Box2D.h"
    #include "ContactListener.h"
    #include "GLES-Render.h"


    #define PTM_RATIO 32

    class HelloWorld : public cocos2d::CCLayer
    {
           public: