cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(1)

好久没写博客了,今天早上起来不知怎么的就打开了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();
}

好了,今天就简单的这两个文件了,下篇文章更新是什么时候我也不确定........

时间: 2024-07-28 17:02:27

cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(1)的相关文章

cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(6)

今天我们要讲三个类,这三个类应该算比较简单的 HelpLayer类 NumberLayer类 GetLocalScore类 HelpLayer类,主要放了两个图形精灵上去,一个是游戏的名字,一个是提示游戏怎么玩的,就一张图: NumberLayer类,涉及到自定义字体的制作,我们提取出来的资源里,有很多数字图片: 现在我们要把它们做成这样子的: 这个跟游戏图片资源差不多,做成这样就可以直接拿来用,省了很多事情,那怎么做了,这里我们要用到一个叫软件,具体使用方法和过程,我这里就不介绍了,大家直接戳

cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(5)

今天介绍的是管道层 PipeLayer.h PipeLayer.cpp 管道层主要实现的是管道从右边往左边平移,结束后移除,而且管道还要长短高低不一样,然后就是如何判断小鸟通过一个管道.先说管道的平移,这个很简单,用一个函数把两跟管道封装好,让它moveby或者moveto好了,平移结束后,用一个回调函数移除自己就够了,当然封装好管道后,我们要把每一个管道放到一个数组里,方便管理嘛:然后就是管道高低不一样这里用一张图表示: 最后就是小鸟通过管道判断,这里我们是判断一个完整的管道是否通过屏幕中心线

cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(7)

今天我们介绍最后两个类 GameOverLayer类 GameLayer类 GameLayer类是整个游戏中最重要的类,因为是整个游戏的中央系统,控制着各个类(层)之间的交互,这个类中实现了猪脚小鸟和它的敌人(管道和草地- . -)碰撞检测,说道物理引擎的碰撞检测,我也是第一次接触,也没多大难度,就直接调用了cocos2d-x的接口,这个类就是游戏的主场景,游戏就是在这里进行的. GameOverLayer类,游戏结束后一些分数的显示,还有就是奖牌的实现(楼主写的很简单......),这边比较有

cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(4)

今天要讲的使我们猪脚类 SpriteBird.h SpriteBird.cpp 猪脚类要注意的是三种状态的切换,和单点触控侦听的设置,还有就是小鸟在飞行的过程中,头部会上下的摆动,物理模型这里就不说了,小鸟头部的摆动是靠小鸟Y轴的速度来判定的,当小鸟向上飞的时候,速度是正的,所以头部摆动的旋转角度也是向上,当小鸟下落的时候,速度是负的,所以头部摆动的旋转角度是向下的. 小鸟的三种状态: 下面是代码 //SpriteBird.h #pragma once #include "cocos2d.h&q

cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(3)

今天介绍两个比较简单的类 GameBegin.h LandLayer.h 需要注意的有两点,一个是草地的滚动,还有一个是物理模型,都在LandLayer.h中实现,分析都在代码注释中. 先上GameBegin场景的效果图 这张图可以解析为 背景图的添加 游戏名字 小鸟以及小鸟飞行动画 按钮 草地(草地是会滚动的) //GameBegin.h #pragma once #include "cocos2d.h" class GameBegin:public cocos2d::Layer {

面向对象--多继承&派生类对象内存布局分析&各基类指针所指向的位置分析

背景 原文链接:ordeder  http://blog.csdn.net/ordeder/article/details/25477363 关于非虚函数的成员函数的调用机制,可以参考: http://blog.csdn.net/yuanyirui/article/details/4594805 成员函数的调用涉及到面向对象语言的反射机制. 虚函数表机制可以查看下面这个blog: http://blog.csdn.net/haoel/article/details/1948051 总结为: 其一

黑马程序员_类对象创建代码的执行顺序测试总结

class StaticCode { // 类的非静态成员变量(实例变量)定义语句: // 作用:用来存储对象的特有数据的成员变量. // 运行:当类对象被创建时就执行,按照顺序自上而下执行,和构造代码块平级.(即当有多个构造函数 // 代码块和多个非静态成员变量时,JVM按照自上而下的顺序来执行所有语句,包括构造代码块里的代码 // 和非静态成员的声明.) // 存储位置:非静态变量位于堆内存中的对象实体中. int num = 3; // 构造代码块 { System.out.println

java 类对象使用

在学习反射机制时,总结一下获得类对象方式: 第一种方式:通过类本身来获得对象 Class<?> classname = this.getClass(); 或者this.class 第二种方式:通过子类的实例获取父类对象 ClassName cn = new ClassName(); UserClass = cn.getClass(); Class<?> SubUserClass = UserClass.getSuperclass(); 第三种方式:通过类名加.class获取对象 C

C++实现根据类名动态生成类对象

在开发后台服务的过程中,我们常常需要从数据库中取数据,并将数据缓存在本地中,另外,我们的服务还需要有更新数据的能力:包括定时的主动更新以及数据库数据更新时服务收到通知的被动更新. 之前在需要用到以上功能的时候,模仿着组内通用的数据Cache部分的代码来写,十分方便,基本上只需要自己写两个类:一个是取数据并缓存数据的类XXXData,一个是扇出数据的类XXXFetcher. 在需要使用数据的时候,通过: FetcherFactory::getFetcher<XXXFetcher>() 即可获取一