Android b2body未显示在b2world-Box2D中
我在cocos2d-x2.2.1中使用box2d 使用这个简单的代码在屏幕上显示b2body,但使用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
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: