cocos2d&box2d(CCSprite绑定不规则刚体)

By | 2014/04/15

对于不规则的精灵我们可以借助PhysicsEditor来制作shape ,

对于地图可以使用Tiled软件制作瓷砖地图。

今天主要记录一下如何把CCSprite与不规则刚体进行绑定,然后一起移动

//初始化玩家

1.加载shape文件,在init方法中添加:

[code lang=”objc”]

[[GB2ShapeCache sharedShapeCache] addShapesWithFile:@"physicShape.plist"];  [/code]

2.初始化精灵和刚体及夹具

[code lang=”objc”]

#pragma mark 初始化玩家

-(void)initPlayer{

//创建对象层 获得对象的产生点

CCTMXObjectGroup *objects=[_gameMap objectGroupNamed:@"objects"];

NSMutableDictionary *spawnPoint=[objects objectNamed:@"StartPoint"];

//获得出生点坐标

float x=[[spawnPoint valueForKey:@"x"] floatValue];

float y=[[spawnPoint valueForKey:@"y"] floatValue];

_player=[CCSprite spriteWithFile:@"Player1.png"];

_player.position=ccp(x,y);

_player.anchorPoint=CGPointZero;   //设置描点为0,0  否则与刚体不能重合

b2BodyDef playerBodyDef;           //定义刚体结构体的定义

[self addChild:_player];

playerBodyDef.type=b2_dynamicBody;

playerBodyDef.fixedRotation=true;   //不会旋转

playerBodyDef.position.Set(x/PTM_RATIO, y/PTM_RATIO);

_playBody=world->CreateBody(&playerBodyDef);

_playBody->SetUserData(_player);

[[GB2ShapeCache sharedShapeCache] addFixturesToBody:_playBody forShapeName:@"Player1"];  //为刚体设置夹具

}

[/code]

3.在update函数中添加更新位置

[code lang=”objc”]

for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {

if (b->GetUserData() != NULL) {

CCSprite *sprite = (CCSprite *)b->GetUserData();

if (sprite != nil) {

b2Vec2 bodyPos = b->GetPosition();

CGPoint pos = CGPointMake(bodyPos.x * PTM_RATIO, bodyPos.y * PTM_RATIO);

float32 rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());

sprite.position = pos;

sprite.rotation = rotation;

}

}

}

[/code]

效果图:

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据