【cocos2dx-3.0beta-制作flappybird】尾随时代潮流,关于引擎升级
引擎 关于 升级 时代 制作 3.0 Beta cocos2dx
2023-09-14 09:10:16 时间
cocos2dx3.1版本号会被释放出,本来,我自己想要这个升级到官方的3.0版本号。只是无奈3.0坑的正式版不会做,偶数帧动画是正确及时的问题,果断放弃,随着广大淫民的支持。我已经升级到最新的代码cocos2dx3.1可得到。尽管cocos2dx3.1支持3d但是,我在这里没有什么3d型号。不然也能够加进去玩玩。
非常多人也去试过直接升级,只是原有的代码妥妥的出现了问题,我在升级的过程当初也发现了这些问题:
1.首先出现的一个问题就是一个语法错误:
auto contactListener = EventListenerPhysicsContact::create(); contactListener->onContactBegin = CC_CALLBACK_2(GameLayer::onContactBegin, this); this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(contactListener, this);
这里的第二句出现了语法错误,这个是由于引擎把碰撞检測的接口换掉了由原来的两个參数换成了一个參数,自然语法上就出现了错误,以下是改动后的代码:
auto contactListener = EventListenerPhysicsContact::create(); contactListener->onContactBegin = CC_CALLBACK_1(GameLayer::onContactBegin, this); this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(contactListener, this);
相同函数onContactBegin也须要做相同的改动:
bool GameLayer::onContactBegin(PhysicsContact& contact) { this->gameOver(); return true; }
2.第二个问题事实上非常多人已经发现了。就是小鸟的旋转角度不正常,这里仅仅须要加个减号进行修正就能够了:
void GameLayer::rotateBird() { float verticalSpeed = this->bird->getPhysicsBody()->getVelocity().y; this->bird->setRotation(- min(max(-90, (verticalSpeed*0.2 + 60)), 30)); }
3.第三个问题是碰撞检測不行了,这个事实上也非常easy。之前的cocos2d的碰撞系统集成并非非常完美。各类掩码都已经被设定好了,用默认的即可,可是如今须要自己设定了,改动例如以下:
首先定义游戏里面的三类拥有物理属性的东东:
typedef enum : uint8_t { ColliderTypeBird = 0x1, ColliderTypeLand = 0x1<<1, ColliderTypePip = 0x1<<2 } ColliderType;
设定到鸟。地面和管子上面:
// Add the bird this->bird = BirdSprite::getInstance(); this->bird->createBird(); PhysicsBody *body = PhysicsBody::create(); body->addShape(PhysicsShapeCircle::create(BIRD_RADIUS)); body->setCategoryBitmask(ColliderTypeBird); body->setCollisionBitmask(ColliderTypeLand & ColliderTypePip); body->setContactTestBitmask(ColliderTypePip); body->setDynamic(true); body->setLinearDamping(0.0f); body->setGravityEnable(false); this->bird->setPhysicsBody(body); this->bird->setPosition(origin.x + visiableSize.width*1/3 - 5,origin.y + visiableSize.height/2 + 5); this->bird->idle(); this->addChild(this->bird); ... // Add the ground this->groundNode = Node::create(); float landHeight = BackgroundLayer::getLandHeight(); auto groundBody = PhysicsBody::create(); groundBody->addShape(PhysicsShapeBox::create(Size(288, landHeight))); groundBody->setDynamic(false); groundBody->setLinearDamping(0.0f); groundBody->setCategoryBitmask(ColliderTypeLand); groundBody->setCollisionBitmask(ColliderTypeBird); groundBody->setContactTestBitmask(ColliderTypeBird); this->groundNode->setPhysicsBody(groundBody); this->groundNode->setPosition(144, landHeight/2); this->addChild(this->groundNode); ... body->addShape(shapeBoxDown); body->addShape(PhysicsShapeBox::create(pipUp->getContentSize())); body->setDynamic(false); body->setCategoryBitmask(ColliderTypePip); body->setCollisionBitmask(ColliderTypeBird); body->setContactTestBitmask(ColliderTypeBird); singlePip->setPhysicsBody(body);
基本上就以上三点改动,程序就行和曾经一样生龙活虎了,当然还有些小的warning,比方Object已经推荐不使用了。大家换成Ref就行了,我已经替大家改完了。
v3.1的代码见https://github.com/OiteBoys/Earlybird/tree/v3.1
版权声明:本文博主原创文章。博客,未经同意不得转载。
相关文章
- 2 ~ express ~ 模板引擎的配置与使用
- 解密jQuery内核 Sizzle引擎筛选器 - 位置伪类(一)
- 阿里云微服务引擎 MSE 5 月产品动态
- 阿里云微服务引擎 MSE 4 月产品动态
- MySQL内核月报 2014.12-MySQL· 踩过的坑·5.6 GTID 和存储引擎那会事
- 把mmapv1存储引擎存储的mongodb3.0数据库数据复制到WiredTiger存储引擎的mongodb3.2中
- nodejs v8引擎c++编译版本号升级教程
- 98.第十九章 MySQL数据库 -- MySQL数据库架构、存储引擎、服务器配置和状态(八)
- mongodb底层存储和索引原理——本质是文档数据库,无表设计,同时wiredTiger存储引擎支持文档级别的锁,MMAPv1引擎基于mmap,二级索引(二级是文档的存储位置信息『文件id + 文件内offset 』)
- Android12之OpenSL ES创建引擎对象slCreateEngine(十一)