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

于是想到了一个办法:

乌鸦的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;

}


相关文章:

  • 2022-12-23
  • 2021-08-11
  • 2021-09-20
  • 2022-12-23
  • 2021-04-09
  • 2022-12-23
  • 2021-04-22
  • 2022-01-05
猜你喜欢
  • 2021-06-25
  • 2021-09-03
  • 2021-10-13
  • 2022-12-23
  • 2021-09-23
  • 2021-06-10
  • 2021-10-12
相关资源
相似解决方案