好久没写博客了,今天早上起来不知怎么的就打开了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分数
下面这个类就不分析了,懂cocos2d-x的都懂
//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();
}
好了,今天就简单的这两个文件了,下篇文章更新是什么时候我也不确定........