cocos2dx实例开发之flappybird(入门版)

  次阅读 作者:智能小宝 来源:互联网 2015-09-27 15:28 我要评论(0)

cocos2dx社区里有个系列博客完整地复制原版flappybird的所有特性,不过那个代码写得比较复杂,新手学习起来有点捉摸不透,这里我写了个简单的版本。演示如下:

\vcyotcS/yda00NDOxLz+oaMK1+7W1bXEz+7Ev7mks8y94bm5yOfPwqO6CjxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20141027/2014102708283222.png" alt="\">

很简单,只有三个类,预加载类,游戏主场景类,应用代理类,新手刚入门喜欢将很多东西都写在尽量少的类里面。

游戏设计

游戏结构如下,游戏包含预加载场景和主场景,主场景中包含背景、小鸟、管道和各种UI界面。

\开发步骤

1,素材收集

从apk文件里提取出来一些图片和音频,并用TexturePatcher拼成大图,导出plist文件。

\2,预加载场景

新建一个LoadingScene,在里面添加一张启动图片,通过异步加载纹理并回调的方式把所有图片素材、小鸟帧动画以及音频文件都加入到缓存,加载完毕后跳转到游戏主场景。

//添加加载回调函数,用异步加载纹理

Director::getInstance()->getTextureCache()->addImageAsync("game.png", CC_CALLBACK_1(LoadingScene::loadingCallBack, this));

void LoadingScene::loadingCallBack(Texture2D *texture)

{

//预加载帧缓存纹理

SpriteFrameCache::getInstance()->addSpriteFramesWithFile("game.plist", texture);

//预加载帧动画

auto birdAnimation = Animation::create();

birdAnimation->setDelayPerUnit(0.2f);

birdAnimation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird1.png"));

birdAnimation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird2.png"));

birdAnimation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird3.png"));

AnimationCache::getInstance()->addAnimation(birdAnimation, "birdAnimation"); //将小鸟动画添加到动画缓存

//预加载音效

SimpleAudioEngine::getInstance()->preloadEffect("die.mp3");

SimpleAudioEngine::getInstance()->preloadEffect("hit.mp3");

SimpleAudioEngine::getInstance()->preloadEffect("point.mp3");

SimpleAudioEngine::getInstance()->preloadEffect("swooshing.mp3");

SimpleAudioEngine::getInstance()->preloadEffect("wing.mp3");

//加载完毕跳转到游戏场景

auto gameScene = GameScene::createScene();

TransitionScene *transition = TransitionFade::create(0.5f, gameScene);

Director::getInstance()->replaceScene(transition);

}

3,游戏主场景

3.1,背景和logo

用图片精灵即可

//添加游戏背景

Sprite *backGround = Sprite::createWithSpriteFrameName("bg.png");

backGround->setPosition(visibleOrigin.x + visibleSize.width / 2, visibleOrigin.y + visibleSize.height / 2);

this->addChild(backGround);

//logo

auto gameLogo = Sprite::createWithSpriteFrameName("bird_logo.png");

gameLogo->setPosition(visibleOrigin.x + visibleSize.width / 2, visibleOrigin.y + visibleSize.height / 2+100);

gameLogo->setName("logo");

this->addChild(gameLogo);logo在游戏开始后要隐藏掉。

3.2,小鸟//小鸟

birdSprite = Sprite::create();

birdSprite->setPosition(visibleOrigin.x + visibleSize.width / 3, visibleOrigin.y + visibleSize.height / 2);

this->addChild(birdSprite);

auto birdAnim = Animate::create(AnimationCache::getInstance()->animationByName("birdAnimation"));

birdSprite->runAction(RepeatForever::create(birdAnim)); //挥翅动画

auto up = MoveBy::create(0.4f, Point(0, 8));

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...