一行代码省却十数行代码

想做一个乌鸦飞的效果,却发现一群乌鸦碰在一起老是会出现头上脚下的情况,感觉很是不好

于是想到了一个办法:

乌鸦的body 包含两个  fixture,一个在上,一个在下,上面的 fixture 密度设置的远远小于下面的fixture的密度,

这样的话,脚重头轻,便不会再出现头下脚上的情况了。

可事实总是让人无比蛋疼,即使将下面的密度设置为了上面密度的一百倍,问题还是没有得到解决~


思考了一下,或许是因为下面的fxiture面积太小,而上面的太大,还有可能就是施力点,或者是惯性什么的原因~

懒得去多想了,回想其以前还想看到过 body 包含 一个  SetFixtureRotation的方法

将该方法的值设置为 true,这个body便再也不会不听话的转来转去了



相关代码如下:

/** 生成乌鸦 body~ */

+(b2Body*) createCrow:(NSString*)firstFrameName 

               frames:(NSMutableArray*)frames 

                delay:(float)delay 

                batch:(CCSpriteBatchNode*)batch 

             position:(b2Vec2)position {

    

    BYSingle *single = [BYSingle getInstance];

    GCfg *gCfg = [GCfg getInstance];

    

   // 1.创建 sprite~

    CrowSprite *cSprite = [CrowSprite crow:firstFrameName 

                                   frames:frames 

                                    delay:delay 

                                    batch:batch];

   // 2.创建 body~

    b2BodyDef pirateBodyDef;

    pirateBodyDef.type =b2_dynamicBody;

    pirateBodyDef.position.Set(position.x, position.y);

    b2Body *aCrow = single.gameSceneWorld->CreateBody(&pirateBodyDef);

    aCrow->m_isCuttable =false;

    aCrow->m_iceType =crow;

    aCrow->SetUserData(cSprite);

//    aCrow->SetFixedRotation(YES);

    

   // 3.创建 fixture~

   b2PolygonShape shape;

   NodeStrParser *nsp = [[[NodeStrParseralloc] init] autorelease];

    NSString *crowShapeStr = [gCfg.cfgDic objectForKey:@"crowVertices"];

    NSArray *two = [crowShapeStr componentsSeparatedByString:@"z"];

    

   // 翅膀部分密度小

    vector<b2Vec2> *upper = [nsp parseNailStr:[two objectAtIndex:1]];

    b2Vec2 *upperVertices = &(upper->at(0));

    int upperSize = upper->size();

    shape.Set(upperVertices, upperSize);

    b2Fixture *upperFixture = aCrow->CreateFixture(&shape,0.0f);

    upperFixture->SetFriction(0.2f);

    upperFixture->SetRestitution(0.5f);

    upperFixture->m_isPirate =true// 有何意义?忘了~

    upper->clear();

    upper = NULL;

    

    //身子部分密度大(使乌鸦不至于倒着飞)~

    vector<b2Vec2> *lower = [nsp parseNailStr:[two objectAtIndex:0]];

    b2Vec2 *lowerVertices = &(lower->at(0));

    int lowerSize = lower->size();

    shape.Set(lowerVertices, lowerSize);

    b2Fixture *lowerFixture = aCrow->CreateFixture(&shape,3.0f);

    lowerFixture->SetFriction(0.2f);

    lowerFixture->SetRestitution(0.5f);

    lowerFixture->m_isPirate =true;

    lower->clear();

    lower = NULL;

    

    return aCrow;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值