您的位置:首页 > 移动开发 > Cocos引擎

【cocos2dx-3.0beta-制作flappybird】物理世界的美妙—游戏层的物理属性的设置

2014-03-20 21:25 471 查看

一、引言

Flappy Bird这款游戏,它的一个非常新颖的地方,就是充分利用了游戏世界的物理属性——小鸟不是水平飞行,而是同在物理世界里一样,受到重力的影响。所以其运动轨迹不是单一的直线,而是抛物线。



二、给小鸟附加物理属性

那么,我们如何为小鸟添加上物理属性呢?

事实上,强大的游戏引擎已经为我们做好了一切准备。且看如下代码:
//创建小鸟
this->bird = BirdSprite::getInstance();
this->bird->createBird();


//创建物理属性
PhysicsBody *body = PhysicsBody::create();
body->addShape(PhysicsShapeCircle::create(BIRD_RADIUS));
body->setDynamic(true);
body->setLinearDamping(0.0f);
body->setGravityEnable(false);


//将该物理属性附加到小鸟身上
this->bird->setPhysicsBody(body);


此外,游戏进行过程当中,每次点击屏莫的时候,给小鸟设置一个向上的初速度:
this->bird->getPhysicsBody()->setVelocity(Vect(0, 260));


在游戏的update函数中设置小鸟的旋转角度:
void GameLayer::rotateBird() {
float verticalSpeed = this->bird->getPhysicsBody()->getVelocity().y;
this->bird->setRotation(min(max(-90, (verticalSpeed*0.2 + 60)), 30));
}

三、给水管添加物理属性

与小鸟类似的,我们也需要对水管添加物理属性:
auto body = PhysicsBody::create();
auto shapeBoxDown = PhysicsShapeBox::create(pipDown->getContentSize(),PHYSICSSHAPE_MATERIAL_DEFAULT, Point(0, PIP_HEIGHT + PIP_DISTANCE));
body->addShape(shapeBoxDown);
body->addShape(PhysicsShapeBox::create(pipUp->getContentSize()));
body->setDynamic(false);
singlePip->setPhysicsBody(body);

四、小结

总体来说cocos2d-x3.0已经提供了很好的物理属性的支持了,所以给精灵添加物理属性也变得非常的简单了。

有关详细代码,还请移步到github:https://github.com/OiteBoys/Earlybird
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2dx flappybird 游戏
相关文章推荐