好久没写博客了,今天早上起来不知怎么的就打开了csdn,工作简历也投了好几家,都石沉大海,在学校也闲着没事,就打算把以前写的Flappy Bird里面的一些代码分析发出来。
Flappy Bird 网上也有很多的教程,我其中的有些代码也是参考网上的,不能算是完全原创吧,但是也有很大一部分代码都是按照我自己的想法,设计写出来的,接触cocos2d-x已经差不多有一年了,从以前的2x到现在的3x,改变了很多东西,作为一个新手我还有很多东西要去学习。
开始前有几点注意事项要说明:
1)我的Flappy Bird 资源使用方法和网上的有所不一样,具体参照我的以前的一篇博客。
2)部分代码参考http://blog.csdn.net/column/details/flappybird.html 尊重原作者
3)我也菜鸟,可能部分代码写的不怎么样,不严谨,请大家见谅(大家互勉嘛)
4)很多代码的分析都是在注释里,也有可能写在外面。
第一篇文章先介绍这个游戏中一些不怎么重要的类和头文件:
这个头文件主要是定义了一些经常使用的常量,方便测试和修改。
//define.h #pragma once #define BIRDANIMATION_0 "birdAnimation_0" //黄色小鸟动画 #define BIRDANIMATION_1 "birdAnimation_1" //蓝色小鸟动画 #define BIRDANIMATION_2 "birdAnimation_2" //红色小鸟动画 #define BIRD_FLY_FRE 0.1f //小鸟翅膀频率 #define LOADING_NUM 2 //loading 动画次数 #define LOADING_FRE 0.5f //loading 动画频率 #define BIRD_RADIUS 15 //鸟的半径 #define GRAVITY Point(0,-980) //重力加速度 #define VELOCITY Point(0,260) //小鸟点击向上飞速度 #define THROUGH_HEIGHT 120 //小鸟通过两个管子间的高度 #define PIPE_UP 1001 //向上管子的tag #define PIPE_DOWN 1002 //向下管子的tag #define PIPE_RANGE 200 //管子移动Y值的范围 #define PIPE_X 300 //管子的开始移动的X值 #define PIPE_Y -170 //管子开始移动的最小Y值 #define PIPE_TIME 3.0f //管子运动的时间 #define PIPE_VELOCITY Point(-360,0) //管子运动的距离及方向 #define LAND_VELOCITY 1/60 //草地的移动速度 #define PIPE_FRE 1.5f //管子出现的频率 #define BIRD_DIE_ROTATION 90 //小鸟死亡后的角度 #define SCORECARD_SHOW_TIME 0.6f //计分板出现动画时间 #define ADDSCORE_FRE 0.05f //加分频率 #define CHANGESCENE_TIME 0.5f //场景切换时间 #define MEDALS_0 5 //奖杯1分数 #define MEDALS_1 10 //奖杯2分数 #define MEDALS_2 15 //奖杯3分数 #define MEDALS_3 20 //奖杯4分数
//AppDelegate.h #include "AppDelegate.h" #include "HelloWorldScene.h" #include "WelcomeScene.h" USING_NS_CC; AppDelegate::AppDelegate() { } AppDelegate::~AppDelegate() { } bool AppDelegate::applicationDidFinishLaunching() { // initialize director auto director = Director::getInstance(); auto glview = director->getOpenGLView(); if(!glview) { //cocos2d-x 3.2 这个类也变了很多,下面这个语句是定义了窗口的名字,大小,和缩放比例 glview = GLView::createWithRect("FlappyBird",Rect(0,0,286,512),1.0f); director->setOpenGLView(glview); } //这个算是简单的分辨率适配.....其他的代码都是3.2自带的,这里就不解释了 glview->setDesignResolutionSize(268,512,ResolutionPolicy::EXACT_FIT); // turn on display FPS director->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this director->setAnimationInterval(1.0 / 60); // create a scene. it's an autorelease object //auto scene = HelloWorld::createScene(); auto scene=WelcomeScene::createScene(); // run director->runWithScene(scene); return true; } // This function will be called when the app is inactive. When comes a phone call,it's be invoked too void AppDelegate::applicationDidEnterBackground() { Director::getInstance()->stopAnimation(); // if you use SimpleAudioEngine, it must be pause // SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); } // this function will be called when the app is active again void AppDelegate::applicationWillEnterForeground() { Director::getInstance()->startAnimation(); // if you use SimpleAudioEngine, it must resume here // SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); }
cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(1)
原文地址:http://blog.csdn.net/u011373759/article/details/39226655