我正在使用box2d和cocos2d进行基于跳跃的游戏。我需要在平台上跳转角色。
有关如何使用box2d进行操作的任何想法吗?
答案 0 :(得分:2)
你试试这个:
//OBSTACLE_1:
{
CCSprite *sprite = [CCSprite spriteWithFile:@"hungObstacle1_C2H18.png"];
sprite.position = ccp(1568,704);
sprite.tag = 4;
[self addChild:sprite];
//SHAPE :
{
b2BodyDef bodyDefinition;
bodyDefinition.type = b2_dynamicBody;
bodyDefinition.position.Set(1568/PTM_RATIO, 704/PTM_RATIO);
bodyDefinition.userData = sprite;
body = world->CreateBody(&bodyDefinition);//body is a b2Body
// Create body shape
b2PolygonShape bodyShape;
//row 1, col 1
int num = 8;
b2Vec2 verts[] = {
b2Vec2(14.5f / PTM_RATIO, -27.0f / PTM_RATIO),
b2Vec2(19.5f / PTM_RATIO, -11.0f / PTM_RATIO),
b2Vec2(19.5f / PTM_RATIO, 11.0f / PTM_RATIO),
b2Vec2(16.5f / PTM_RATIO, 24.0f / PTM_RATIO),
b2Vec2(-14.5f / PTM_RATIO, 24.0f / PTM_RATIO),
b2Vec2(-19.5f / PTM_RATIO, 16.0f / PTM_RATIO),
b2Vec2(-19.5f / PTM_RATIO, -13.0f / PTM_RATIO),
b2Vec2(-12.5f / PTM_RATIO, -26.0f / PTM_RATIO)
};
bodyShape.Set(verts, num);
// Create shape definition and add to body
b2FixtureDef bodyFixtureDefinition;
bodyFixtureDefinition.shape = &bodyShape;
bodyFixtureDefinition.density = 5000.0f;
bodyFixtureDefinition.friction = 1.0f;
bodyFixtureDefinition.restitution = 1.0f;//*
fixture=body->CreateFixture(&bodyFixtureDefinition);
}
}
*注意:通过将恢复原状设置为1个身体将一直保持跳跃只需要很小的力量
答案 1 :(得分:0)
要模拟跳跃,您可以使用cpBodyApplyImpulse方法并沿直线方向施加力。假设你已经启用了重力,这应该提供精确的模拟,尽管你可能需要调整它。例如,这是我最近的一个项目的一行。
cpBodyApplyImpulse(charBody, cpv(0.0, -25 * scale), charBody->p);
这使得由charBody表示的精灵跳跃。