最终效果图:

环境版本:cocos2d-x-3.3beta0 使用内置的物理引擎

游戏主场景
//
//  HeroScene.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//
#ifndef __HeroScene_SCENE_H__
#define __HeroScene_SCENE_H__

#include "cocos2d.h"
#include "GameCtrl.h"
// 继承自 有颜色的Layer
class HeroScene : public cocos2d::LayerColor
{
private:
    // 屏幕尺寸
    Size winSize;
    // 数组 不同的层 对应不同的控制器
    cocos2d::Vector<GameCtrl*> gameCtrlArr;
    
public:
    // 宏定义的Create方法,内部会调用init方法
    CREATE_FUNC(HeroScene);
    // 供外界调用的 实例化场景的方法
    static cocos2d::Scene* createScene();
    // 初始化方法
    virtual bool init();
    // 时钟方法
    // 在场景的时钟方法中,更新\控制  每一个游戏控制器的时钟方法
    virtual void update(float dt);
};

#endif // __HeroScene_SCENE_H__


//
//  HeroScene.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//
#include "HeroScene.h"
#include "GameOverScene.h"

USING_NS_CC;
#pragma mark - 生命周期方法
Scene* HeroScene::createScene()
{
    // 使用cocos2d 内置的物理引擎
    auto scene = Scene::createWithPhysics();
    // 显示 调试用的 刚体 边线
//    scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
    // 调整重力加速度
    scene->getPhysicsWorld()->setGravity(Vec2(0,-1000));
    // 标准代码 通过静态的create方法创建Layer,添加到场景,并返回场景
    auto layer = HeroScene::create();
    scene->addChild(layer);
    return scene;
}
// 实例化特有的对象
bool HeroScene::init()
{
    // 创建一个白色的Layer
    if ( !LayerColor::initWithColor(Color4B(255,255,255)) ) return false;
    // 屏幕尺寸
    winSize = Director::getInstance()->getVisibleSize();
    log("winSize:%f,%f",winSize.width,winSize.height);
    
    // 创建2个 GameCtrl (2层)
    gameCtrlArr.insert(0,GameCtrl::create(this,30));
    if(rand()%2 == 0){
        gameCtrlArr.insert(0,250));
    }
    
    // 开启消息调度
    scheduleUpdate();
    // ********************************************
    // 物理碰撞检测 「PhysicsContact」
    auto listener = EventListenerPhysicsContact::create();
    // 开始碰撞 游戏结束
    listener->onContactBegin = [this](PhysicsContact & contact){
        // 取消 消息调度
        this->unscheduleUpdate();
        // 切换至Game Over场景
        Director::getInstance()->replaceScene(GameOverScene::createScene());
        return true;
    };
    // 向事件分发器,注册listener
    Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(listener,this);
    // ********************************************
    // 用户单点触摸 jump high 【TouchOneByOne】
    auto touchListener = EventListenerTouchOneByOne::create();
    // 开始触摸 原地 跳一下
    touchListener->onTouchBegan = [this](Touch * t,Event * e){
        // 每一个游戏控制器 都执行一下 方法
        for (auto it = gameCtrlArr.begin(); it!=gameCtrlArr.end(); it++)
        {
            // 解引用 就可以获得数组成员对象了
            // 如果 是点在自己的那一层 才执行 跳高动作
            if ((*it)->hitTestPoint(t->getLocation()))
            {
                (*it)->onUserTouch();
                break;
            }
        }
        return false;
    };
    // 向事件分发器,注册listener
    Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(touchListener,this);
    return true;
}

#pragma mark - 时钟方法
void HeroScene::update(float dt)
{
    // 在场景的时钟方法中,更新\控制  每一个游戏控制器的时钟方法
    for (auto it = gameCtrlArr.begin(); it!=gameCtrlArr.end(); it++)
    {
        // 解引用 就可以获得数组成员对象了
        // 每一个游戏控制器 开启时钟方法
        (*it)->startUpdate(dt);
    }
    
}



游戏结束时的场景
//
//  GameOverScene.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//

#include <cocos2d.h>
#include "MainScene.h"
using namespace cocos2d;
// 继承自 有颜色的Layer
class GameOverScene:public LayerColor {
    
private:
    Size winSize;
    
public:
    // 供外界调用
    static Scene* createScene()
    {
        auto s = Scene::create();
        auto l = GameOverScene::create();
        s->addChild(l);
        return s;
    };
    
    // 宏定义的Create方法,内部会调用init方法
    CREATE_FUNC(GameOverScene);
    
    // 初始化,自己用
    virtual bool init()
    {
        // 父类的init方法
        LayerColor::initWithColor(Color4B::WHITE);
        // 屏幕大小
        winSize = Director::getInstance()->getVisibleSize();
        // 创建一个Label
        auto label = Label::create();
        label->setString("Game Over");
        label->setSystemFontSize(40);
        label->setName("label");
        label->setColor(Color3B::BLACK);
        label->setPosition(winSize.width/2,winSize.height/2);
        // 添加到Layer
        addChild(label);

        
        // 添加一个事件,点击 Label,返回到主场景的事件
        // 2.触摸Label,开启 时钟updatePosition
        // 实例化一个触摸监听器 对象
        auto listener = EventListenerTouchOneByOne::create();
        // 当触摸开始时,绑定一个闭包函数;
        // 【】表示 要传入的外界对象,此处是this
        // ()表示参数
        listener->onTouchBegan = [this](Touch *t,Event *e){
            // 如果 点击 了label,才每隔一秒执行一次 更新位置方法
            Label *label =(Label *) e->getCurrentTarget()->getChildByName("label");
            if (label->getBoundingBox().containsPoint(t->getLocation())) {
                // 回到主场景
                // 创建场景,自动释放 it's an autorelease object
                auto scene = MainScene::createScene();
                // 替换场景
                Director::getInstance()->replaceScene(scene);
            }
            return false;
        };
        // 5、获取事件分发器,添加一个事件监听器,到this身上;即监听的是this对象【整个图层Layer】
        Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(listener,this);
        return true;
    };
    
    
};


一个游戏控制器实例 对应一层子游戏 核心
//
//  GameCtrl.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//

#ifndef ___1_cocos2d_x__GameCtrl__
#define ___1_cocos2d_x__GameCtrl__
#include <cocos2d.h>
// 全屏的边框
#include "Boundary.h"

#include "Hero.h"
#include "Block.h"
USING_NS_CC;
// 继承自 Ref,就自动拥有了 释放机制
class GameCtrl:public Ref
{
private:
    // 屏幕尺寸
    Size winSize;
    // 边界 边框,用成员变量记住,是因为 碰撞检测要用到
    Boundary * boundary;
    Hero * hero;
    
    // 重要~~~Layer就相当于HeroScene场景,因为所有的子精灵 全添加到Layer中,所以需要传入Layer
    // 成员变量记住(其他方法中要用到)
    Layer * _layer;
    float _positionY;
    
    // 临时变量,用于累计 记录 流逝的时间
    int temptimedelta;
    // 总共的时间间隔 (即 时间delta累计到 该间隔时,创建并添加一个障碍物)
    int totalIntervalTime;

    
private:
    // 每添加一个新的障碍物之后,需重置 用于累计 记录 流逝的时间 的变量
    void resetTemptimedelta();
    // 每隔 随机的时间,创建并添加一个障碍物
    void addBlock();
    
public:
    // 重要~~~这个Layer就相当于HeroScene场景,所以需要传入Layer
    // 参数 就是在屏幕的y值
    // 供外界
    static GameCtrl* create(Layer *layer,float positionY);
    // 自己初始化
    virtual bool init(Layer * layer,float positionY);
    // 供场景调用,让场景来 开启和关闭 游戏控制器 中的 时钟方法
    void startUpdate(float dt);
    

    // 当被用户触摸了 时侯调用,给英雄一个向上的速度
    void onUserTouch();
    bool hitTestPoint(Vec2 point);

    
    
};

#endif /* defined(___1_cocos2d_x__GameCtrl__) */


//
//  GameCtrl.cpp
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//

#include "GameCtrl.h"
// 重要~~~这个Layer就相当于HeroScene场景,所以需要传入Layer
// 参数 就是在屏幕的y值
// 供外界
GameCtrl* GameCtrl::create(cocos2d::Layer *layer,float positionY)
{
    auto gameCtrl = new GameCtrl();
    // 调用自己的init初始化,将参数 传递过去
    gameCtrl->init(layer,positionY);
    // 自动释放
    gameCtrl->autorelease();
    return gameCtrl;
}
// 自己初始化
bool GameCtrl::init(cocos2d::Layer *layer,float positionY)
{
    // 成员变量记住,其他方法中 要用到
    _layer = layer;
    _positionY = positionY;
    // 全屏
    winSize = Director::getInstance()->getVisibleSize();
    //**************************************
    // 1、添加游戏的边框、边界
    boundary = Boundary::create();
    // 居中 (注意 不同的控制器,可能在不同的层 其y值不同 高度也不同)
    boundary->setPosition(winSize.width/2,winSize.height/2+positionY);

    // 全屏
    boundary->setContentSize(winSize);
    // 添加到Layer
    layer->addChild(boundary);
    //**************************************
    // 2、添加地板 (不需要关联物理世界)
    auto ground = Sprite::create();
    ground->setColor(Color3B(0,0));
    ground->setTextureRect(Rect(0,3));
    //  (注意 不同的控制器,可能在不同的层 其y值不同)  3 和1.5
    ground->setPosition(winSize.width/2,1.5+positionY);
    // 添加到Layer
    layer->addChild(ground);
    //**************************************
    // 3、添加Hero
    hero = Hero::create();
    //  (注意 不同的控制器,可能在不同的层 其y值不同)
    hero->setPosition(50,hero->getContentSize().height/2+positionY);
    // 添加到Layer
    layer->addChild(hero);
    
    // 每添加一个新的障碍物之后,需重置 用于累计 记录 流逝的时间 的变量
    resetTemptimedelta();
    return true;
}

#pragma mark - 供外界场景调用
// 供场景调用,让场景来 开启和关闭 游戏控制器 中的 时钟方法
void GameCtrl::startUpdate(float dt)
{
    // 临时变量,用于累计 记录 流逝的时间
    temptimedelta++;
    // 总共的时间间隔 (即 时间delta累计到 该间隔时,创建并添加一个障碍物)
    if (temptimedelta >= totalIntervalTime)
    {
        // 每添加一个新的障碍物之后,需重置 用于累计 记录 流逝的时间 的变量
        resetTemptimedelta();
        // 每隔 随机的时间,创建并添加一个障碍物  
        addBlock();
    }
}
// 每添加一个新的障碍物之后,需重置 用于累计 记录 流逝的时间 的变量
void GameCtrl::resetTemptimedelta()
{
    temptimedelta = 0;
    totalIntervalTime = (rand()%120) + 100;
}

// 创建 并 添加 障碍物  (在随机的 时间 间隔 之后 )
void GameCtrl::addBlock()
{
    auto b = Block::create();
    _layer->addChild(b);
    // 注意 障碍物的y值是 和当前游戏控制器 自己的y值 相同的
    // 即 block的半高 + 当前控制器自己的y
    b->setPositionY(b->getContentSize().height/2 + _positionY);
}


#pragma mark - 触摸事件
// 当被用户触摸了 时侯调用,给英雄一个向上的速度
void GameCtrl::onUserTouch()
{
    hero->getPhysicsBody()->setVeLocity(Vec2(0,400));
}

bool GameCtrl::hitTestPoint(cocos2d::Vec2 point)
{
    return boundary->getBoundingBox().containsPoint(point);
}


边框、边界
//
//  Boundary.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//  边框、边界,其大小和winSize一样

#ifndef __Boundary__
#define __Boundary__



#include <cocos2d.h>

USING_NS_CC;

class Boundary:public Node {
public:
    // 宏定义 一个静态的create方法,内部会调用init方法
    CREATE_FUNC(Boundary);
    // 初始化方法
    virtual bool init();
};

#endif /* defined(__Boundary__) */


//
//  Boundary.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//  边框、边界,其大小和winSize一样

#include "Boundary.h"


bool Boundary::init(){
    // 父类的init方法,内部 直接返回一个true
    Node::init();
    
    // 960 * 640
    Size winSize = Director::getInstance()->getVisibleSize();
    // 设置Node大小 全屏
    setContentSize(winSize);
    
    // 设置物理刚体body,大小和winSize一样
    setPhysicsBody(PhysicsBody::createEdgeBox(winSize));

    return true;
}


Hero主角
//
//  Hero.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//  主角,继承自Sprite,奔跑的小人

#ifndef ___1_cocos2d_x__Hero__
#define ___1_cocos2d_x__Hero__

#include <cocos2d.h>

USING_NS_CC;

class Hero:public Sprite {
    
public:
    // 宏,静态的create方法,内部会调用init方法
    CREATE_FUNC(Hero);
    virtual bool init();

};


#endif /* defined(___1_cocos2d_x__Hero__) */


//
//  Hero.cpp
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//  主角,奔跑的小人

#include "Hero.h"

#include "FlashTool.h"


bool Hero::init()
{
    // 父类的init方法
    Sprite::init();
    // 执行 帧动画 一直奔跑 RepeatForever
    runAction(RepeatForever::create(FlashTool::animateFromJsonFile("Hero.json",0.2f)));

    // Json中的尺寸
    Size s = Size(44,52);
    // 精灵的大小
    setContentSize(s);
    
    // 设置物理世界的刚体body
    setPhysicsBody(PhysicsBody::createBox(s));
    // 刚体不允许 旋转
    getPhysicsBody()->setRotationEnable(false);
    // 重要~~~若想参与 碰撞,必须绑定一个碰撞标识
    getPhysicsBody()->setContactTestBitmask(1);
    
    return true;
}


障碍物
//
//  Block.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//

#ifndef ___1_cocos2d_x__Block__
#define ___1_cocos2d_x__Block__

#include <cocos2d.h>

USING_NS_CC;

class Block:public Sprite {
public:
    // 宏,内部会调用init方法
    CREATE_FUNC(Block);
    virtual bool init();
    // 时钟方法,内部会 让 障碍物不断地向左移动
    virtual void update(float dt);

};

#endif /* defined(___1_cocos2d_x__Block__) */


//
//  Block.cpp
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//

#include "Block.h"

bool Block::init()
{
    // 父类的init方法
    Sprite::init();
    // 屏幕大小
    Size winSize = Director::getInstance()->getVisibleSize();
    // 放在屏幕的外边
    setPositionX(winSize.width);
    // 黑色 障碍物
    setColor(Color3B(0,0));

    Size size = Size((rand()%20)+5,(rand()%30)+10);
    // 随机生成 不同大小的 障碍物
    setContentSize(size);
    // 黑色的方块区域
    setTextureRect(Rect(0,size.width,size.height));
    // ***************************************
    // 设置 物理刚体
    setPhysicsBody(PhysicsBody::createBox(size));
    // 不是动态的刚体 即:是静态的刚体
    getPhysicsBody()->setDynamic(false);
    // 重要~~~若想参与 碰撞,必须绑定一个碰撞标识
    getPhysicsBody()->setContactTestBitmask(1);
    // ***************************************
    // 开启时钟方法
    scheduleUpdate();
    return true;
}
#pragma mark - 时钟方法
// 时钟方法,内部会 让 障碍物不断地向左移动
void Block::update(float dt){
    
    this->setPositionX(getPositionX()-8);
    // 移动到屏幕外边时,就停止消息调度,并且移除
    if (getPositionX()<0)
    {
        unscheduleUpdate();
        removeFromParent();
    }
    
}


通过解析flash cc导出的Json文件+大图片,

生成一个Animate对象,用于执行序列帧动画


//
//  FlashTool.h
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//

#ifndef ___1_cocos2d_x__FlashTool__
#define ___1_cocos2d_x__FlashTool__

#include <cocos2d.h>

USING_NS_CC;

class FlashTool {
    
public:
    // 通过解析flash cc 导出的Json文件+大图片,生成一个Animate对象,用于执行序列帧动画
    static Animate * animateFromJsonFile(std::string jsonFile,float delayPerUnit);
};

#endif /* defined(___1_cocos2d_x__FlashTool__) */


//
//  FlashTool.cpp
//  01_cocos2d-x
//
//  Created by beyond on 14-10-6.
//
//

#include "FlashTool.h"
// Json解析 使用cocos2d 内置的rapidJson库
#include <json/document.h>

// 通过解析flash cc 导出的Json文件+大图片,用于执行序列帧动画
Animate * FlashTool::animateFromJsonFile(std::string jsonFile,float delayPerUnit)
{
    // 文档 对象
    rapidjson::Document doc;
    // FileUtils工具类 读入json文件
    std::string fileContent = FileUtils::getInstance()->getStringFromFile(jsonFile);
    // 
    fileContent.erase(0,fileContent.find_first_of('{'));
    // 标记默认为 0,开始解析
    doc.Parse<0>(fileContent.c_str());
    // 得到大图片的 图片名
    std::string imgFileName = doc["Meta"]["image"].GetString();
    
    auto &frames = doc["frames"];
    // 精灵帧缓存
    auto sfc = SpriteFrameCache::getInstance();
    // 容器用于 存放所有的 动画帧
    Vector<AnimationFrame*> animFrames;
    // 遍历,裁剪,创建,添加到容器
    for (auto m=frames.MemberonBegin(); m!=frames.MemberonEnd(); m++) {
        auto frameName = m->name.GetString();
        auto & frameProperties = m->value["frame"];
        auto & spriteSourceSize = m->value["spriteSourceSize"];
        
        auto sf = sfc->getSpriteFrameByName(frameName);
        if (!sf) {
            sf = SpriteFrame::create(imgFileName,Rect(frameProperties["x"].GetInt(),frameProperties["y"].GetInt(),frameProperties["w"].GetInt(),frameProperties["h"].GetInt()),m->value["rotated"].GetBool(),Vec2(spriteSourceSize["x"].GetInt(),spriteSourceSize["y"].GetInt()),Size(spriteSourceSize["w"].GetInt(),spriteSourceSize["h"].GetInt()));
            sfc->addSpriteFrame(sf,frameName);
        }
        animFrames.pushBack(AnimationFrame::create(sf,delayPerUnit,ValueMapNull));
    }
    // 生成用于Action的Animate
    Animation * animation = Animation::create(animFrames,delayPerUnit);
    return Animate::create(animation);
}


flash cc 导出的Json文件+大图片


{"frames": {

"hero0000":
{
	"frame": {"x":0,"y":0,"w":44,"h":52},"rotated": false,"trimmed": false,"spriteSourceSize": {"x":0,"sourceSize": {"w":44,"h":52}
},"hero0001":
{
	"frame": {"x":44,"w":42,"trimmed": true,"spriteSourceSize": {"x":2,"hero0002":
{
	"frame": {"x":86,"hero0003":
{
	"frame": {"x":0,"y":52,"hero0004":
{
	"frame": {"x":42,"h":52}
}},"Meta": {
	"app": "Adobe Flash Professional","version": "13.1.0.226","image": "Hero.png","format": "RGBA8888","size": {"w":128,"h":128},"scale": "1"
}
}

cocos2d_x_06_游戏_一个都不能死的更多相关文章

  1. 详解iOS游戏开发中Cocos2D的坐标位置关系

    这篇文章主要介绍了iOS游戏开发中Cocos2D的坐标位置关系,Cocos2D是专门用来开发iOS游戏的开源框架,文中示例代码采用Objective-C语言,需要的朋友可以参考下

  2. 剖析iOS开发中Cocos2d-x的内存管理相关操作

    这篇文章主要介绍了剖析iOS开发中Cocos2d-x的内存管理相关操作,Cocos2d-x是开发游戏的利器,需要的朋友可以参考下

  3. iOS开发中使用cocos2d添加触摸事件的方法

    这篇文章主要介绍了iOS开发中使用cocos2d添加触摸事件的方法,cocos2d是制作iOS游戏的利器,需要的朋友可以参考下

  4. ios – cocos2d 2.0-rc2:结束导演并重启

    我有一个使用UIKitmenues的cocos2d驱动游戏,所以我只使用一个viewcontroller的框架,这是游戏本身.此外,它只有一个场景.由于cocos2d2.0导演本身是一个UIViewController子类,所以我只需在用户点击一个开始按钮时将其推送到我的MenuViewController中:当用户启动第一个游戏时,第一次调用该方法时,这很好.当游戏结束时,我调用[[CCDire

  5. cocos2dx-master之Aciton一

    直接上代码:各种Action的练习MainAcitivity.javaGameLayout.java

  6. error LNK2019: 无法解析的外部符号 cocos2d

    加库什么的都没用起始场景没有添加层,就会出现这个提示errorLNK2019:无法解析的外部符号Scene*TollgateScene::createScene(){autoscene=Scene::create();autolayer=TollgateScene::create();scene->addChild(layer);returnscene;}建了个场景层就好了

  7. cocos2dx点击事件的分发问题

    我们工作室需要用cocos2dx来写项目,不过之前的分工有些不是很明确,每个人都使用cocos2dx中的点击事件封装了好几个按钮。所以造成了,游戏的基础框架中出现了N种风格的按钮,于是问题就来了:由于我们使用的cocos2dx中的触摸事件是单点,也就是说非手势的触摸事件。不过cocos2dx在ios和安卓平台上对于单点的响应有些不一致。

  8. Cocos2dx------详细介绍如何编写扫雷这个游戏含源码二

    资源图片http://yunpan.cn/cQ63WwezMEmWD(提取码:715f)棋盘绘制好了,接下来就是触摸了通过触摸上一层,使其显示下一层的情况触摸代码boolHelloWorld::ccTouchBegan(cocos2d::CCTouch*pTouch,cocos2d::CCEvent*pEvent){CCPointp=pTouch->getLocation();if(spLayer

  9. Cocos2d-3.x_重力加速器的使用

  10. cocos2d setTextureRect用法

    注意的一点就是setTextureRect的基准坐标是左上,也就是矩形的生成方式是左上向右下生成

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部