我使用下面的代码将我的Box2D对象移动到屏幕中,但由于我的世界或其他东西的重力,我不知道为什么我的对象被迫向下移动,我是box2d的新手。
我想在没有重力的情况下将我的物体移动到整个世界。
-(void) tick:(NSTimer *)timer {
int32 velocityIterations = 8;
int32 positionIterations = 1;
world->Step(1.0f/60.0f, velocityIterations, positionIterations);
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != NULL)
{
UIView *oneView = (UIView *)b->GetUserData();
CGPoint newCenter = CGPointMake(b->GetPosition().x * PTM_RATIO,self.view.bounds.size.height - b->GetPosition().y * PTM_RATIO);
oneView.center = newCenter;
CGAffineTransform transform = CGAffineTransformMakeRotation(- b->GetAngle());
oneView.transform = transform;
}
}
}
我的加速度计代码如下。
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
b2Vec2 gravity;
gravity.Set( acceleration.x * 1.81, acceleration.y * 1.81 );
world->SetGravity(gravity);
}
如果有人解决,请求。
感谢。
答案 0 :(得分:2)
据我所知,你想移动你的对象设置它的位置。这是一个坏主意,因为它将提供与您的对象碰撞的物体的非物理行为。那是因为如果你只改变你身体的位置,物理引擎的速度仍然是零,并且会根据物体的零速度处理碰撞。
更好的解决方案是为对象使用b2_kinematicBody类型。然后你将能够控制它的运动,指定它的速度矢量,物理将按预期运行。由于它的类型,重力(并没有其他力)也不会应用于你的对象。
修改强>
//creation
b2BodyDef bDef;
bDef.type = b2_kinematicBody;
bDef.position.Set(5, 6);
b2Body *body = physWorld->CreateBody(&bDef);
//control
body->SetLinearVelocity(b2Vec2(3, 4));