Cocos2d iphone Box2D调试测试
我对Box2d有问题。根据我在互联网上找到的教程,我在屏幕中心创建了一个对象(圆),旋转它以查看我是否设置好了Box2d。问题是圆是被创建的,但我不能旋转,尽管我完全遵循了在互联网上找到的教程。代码如下: 文件.h:Cocos2d iphone Box2D调试测试,cocos2d-iphone,box2d,box2d-iphone,Cocos2d Iphone,Box2d,Box2d Iphone,我对Box2d有问题。根据我在互联网上找到的教程,我在屏幕中心创建了一个对象(圆),旋转它以查看我是否设置好了Box2d。问题是圆是被创建的,但我不能旋转,尽管我完全遵循了在互联网上找到的教程。代码如下: 文件.h: b2World * _world; GLESDebugDraw * _debugDraw; 文件.mm: -(void)setupWorld { b2Vec2 gravity = b2Vec2(0.0f, 0.0f); bool doSleep = fa
b2World * _world;
GLESDebugDraw * _debugDraw;
文件.mm:
-(void)setupWorld {
b2Vec2 gravity = b2Vec2(0.0f, 0.0f);
bool doSleep = false;
_world = new b2World(gravity, doSleep);
}
-(void)setupDebugDraw {
_debugDraw = new GLESDebugDraw(PTM_RATIO*[[CCDirector sharedDirector] contentScaleFactor]);
_world->SetDebugDraw(_debugDraw);
_debugDraw->SetFlags(b2DebugDraw::e_shapeBit |b2DebugDraw::e_jointBit);
}
-(void)testBox2D {
CGSize winSize = [CCDirector sharedDirector].winSize;
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position = b2Vec2(winSize.width/2/PTM_RATIO,winSize.height/2/PTM_RATIO);
b2Body *body = _world->CreateBody(&bodyDef);
b2CircleShape circleShape;
circleShape.m_radius = 25.0/PTM_RATIO;
b2FixtureDef fixtureDef;
fixtureDef.shape = &circleShape;
fixtureDef.density = 1.0;
body->CreateFixture(&fixtureDef);
body->ApplyAngularImpulse(0.01);
}
-(void)updateBox2D:(ccTime)dt {
_world->Step(dt, 1, 1);
[self updateBox2D:dt];
}
-(void) draw {
glDisable(GL_TEXTURE_2D); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY);
_world->DrawDebugData();
glEnable(GL_TEXTURE_2D); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
}

在init中:
[self setupWorld];
[self setupDebugDraw];
[self testBox2D];
两个问题:
您是否递归调用了updateBox2D
?对我来说,这看起来像是一个无限循环,我很惊讶它没有使你的应用程序崩溃
相反,在CCScene
tick
方法中,您应该只调用一次(或几次,具体取决于您如何设置时间步长)
你的下一个问题是,你正在对你的身体施加一个小的冲动,但这只是一次性的冲动。。。角度脉冲仍然受到阻尼的影响,因此默认情况下,身体不会无限旋转。要保持身体旋转,需要将角度阻尼设置为零:
bodyDef.angularDamping = 0.0f;
两个问题:
您是否递归调用了updateBox2D
?对我来说,这看起来像是一个无限循环,我很惊讶它没有使你的应用程序崩溃
相反,在CCScene
tick
方法中,您应该只调用一次(或几次,具体取决于您如何设置时间步长)
你的下一个问题是,你正在对你的身体施加一个小的冲动,但这只是一次性的冲动。。。角度脉冲仍然受到阻尼的影响,因此默认情况下,身体不会无限旋转。要保持身体旋转,需要将角度阻尼设置为零:
bodyDef.angularDamping = 0.0f;