2013-03-06 27 views
0

在我试图制作的游戏中,我有一个感谢box2d弹跳的精灵。这里是我当前的代码的外观:制作精灵在box2d中弹跳一个角度

-(id)init 
{ 
    ball = [CCSprite spriteWithFile:@"ball.png"]; 
    ball.position = ccp(150, winSize.height * 0.78); 
    [self addChild:ball]; 
    ball.tag = 2; 

b2BodyDef ballBodyDef; 
ballBodyDef.type = b2_dynamicBody; 
ballBodyDef.position.Set(150/PTM_RATIO, 450/PTM_RATIO); 
ballBodyDef.userData = ball; 
_body = _world->CreateBody(&ballBodyDef); 

b2CircleShape circle; 
circle.m_radius = 26.0/PTM_RATIO; 

b2FixtureDef ballShapeDef; 
ballShapeDef.shape = &circle; 
ballShapeDef.density = 0.5f; 
ballShapeDef.friction = 1.0f; 
ballShapeDef.restitution = 1.0f; 
_ballFixture = _body->CreateFixture(&ballShapeDef); 

b2Vec2 force = b2Vec2(160, 375); 
_body->ApplyLinearImpulse(force, ballBodyDef.position);} 

- (void)update:(ccTime) dt { 
if(_isPaused == FALSE) 
{ 
    _world->Step(dt, 10, 10); 
    for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) { 
     if (b->GetUserData() != NULL) { 
      CCSprite *sprite = (CCSprite *)b->GetUserData(); 
      if(sprite.tag == 2) 
      { 
       sprite.position = ccp(b->GetPosition().x * PTM_RATIO, 
           b->GetPosition().y * PTM_RATIO); 
       sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle()); 
      } 
     } 
    }} 

反弹本身工作正常,我的问题是存在这样的情况,其中,球会反弹在一条直线上可以这么说,无论垂直或水平不断而我试图避免的。所以我的问题是,我怎么能让我的球精灵以一个角度而不是一条直线反弹,这样它就不会在同一个方向无限地弹跳?

回答

0

你可以对身体或世界施加一个微小的力量或重力变化,“随机”或等间隔。