.h

#define IMAGE_MAX 2     //图片的个数..

//图片结构体 属性
struct IMAGE_DATA
{
    cocos2d::Sprite *m_pImage;
    bool m_bOpen;
    int m_iId;
};

    bool onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);
    void onTouchMoved(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);
    void onTouchEnded(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);

    //返回精灵的碰撞矩形
    cocos2d::Rect GetBackRect( cocos2d::Sprite *spr );
    //添加图片
    void AddImage(std::string name, cocos2d::Vec2 pos, int id);
    //添加背景
    void AddBack(std::string name, cocos2d::Vec2 pos, int id);
    //图片数组
    std::vector< IMAGE_DATA > m_vSpr;
    //背景数组
    std::vector< IMAGE_DATA > m_vBack;
    //通关判断
    bool m_bWin;
    //图片显示最上层
    int m_iOrder;
    //定时器
    void update(float dt);

.cpp

    //注册触摸
    EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
    listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
    listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
    listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
    listener->setSwallowTouches(true);

    Size size = Director::getInstance()->getWinSize();
    m_bWin = false;
    m_iOrder = ;
    //图片素材
    std::string image_name[] = {"HelloWorld.png", "white.png"};

    //图片随机出现位置
    srand((unsigned ));//随机种子
    std::vector< Vec2 > image_pos;
    ; i < IMAGE_MAX; i++)
    {
        );
        );
        image_pos.push_back(Vec2( x + size.width / , y + size.height /  ));
        log("x ==  %f, y == %f, x1 === %f, y1 === %f", image_pos[i].x, image_pos[i].y, x, y);
    }

    //需要拼接的背景以及位置
    std::string back_name[] = {"red.png", "blue.png"};
    Vec2 back_pos[] = {Vec2(size.width * .75f, size.height * .25f), Vec2(size.width * .75f, size.height * .75f)};

    ; i < IMAGE_MAX; i++)
    {
        //添加
        AddImage(image_name[i], image_pos[i], i + );
        AddBack(back_name[i], back_pos[i], i + );
    }

    //注册精灵监听
     ; i < m_vSpr.size(); i++)
    {
        )
            _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, m_vSpr[i].m_pImage);
        else
            _eventDispatcher->addEventListenerWithSceneGraphPriority(listener->clone(), m_vSpr[i].m_pImage);
    }
    //开启定时器
    scheduleUpdate();
void HelloWorld::AddImage(std::string name, Vec2 pos, int id){
    //新建图片
    IMAGE_DATA image;
    image.m_pImage = Sprite::create(name.c_str());
    image.m_pImage->setPosition(pos);
    addChild(image.m_pImage);
    image.m_bOpen = true;
    image.m_iId = id;
    m_vSpr.push_back(image);
}
void HelloWorld::AddBack(std::string name, Vec2 pos, int id){
    //新建背景图片
    IMAGE_DATA image;
    image.m_pImage = Sprite::create(name.c_str());
    image.m_pImage->setPosition(pos);
    addChild(image.m_pImage, -);
    image.m_iId = id;
    m_vBack.push_back(image);
}
bool HelloWorld::onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent){

    //获取当前点击的精灵
    Sprite* target = static_cast<Sprite*>(pEvent->getCurrentTarget());

    if (target->getBoundingBox().containsPoint(pTouch->getLocation()))
    {
        ; i< m_vSpr.size(); i++)
        {
            //点击的精灵触摸关闭 返回false
            if(target == m_vSpr[i].m_pImage && !m_vSpr[i].m_bOpen)
                return false;
        }

        m_iOrder++;
        //当前点击的精灵放到最上层
        target->setLocalZOrder(m_iOrder);
        return true;
    }

    return false;
}
void HelloWorld::onTouchMoved(cocos2d::Touch *pTouch, cocos2d::Event *pEvent){

    Sprite* target = static_cast<Sprite*>(pEvent->getCurrentTarget());

    ; i < m_vSpr.size(); i++)
    {
        //点击的精灵触摸关闭 退出
        if(target == m_vSpr[i].m_pImage && !m_vSpr[i].m_bOpen)
            return;

        ; j < m_vBack.size(); j++)
        {
            //判断图片是否碰撞到背景 ID是否相等 触摸是否关闭
            if (GetBackRect( m_vBack[j].m_pImage ).containsPoint(m_vSpr[i].m_pImage->getPosition()) && m_vBack[j].m_iId == m_vSpr[i].m_iId && m_vSpr[i].m_bOpen)
            {
                //碰撞到 把图片移动到背景上 触摸关闭
                m_vSpr[i].m_pImage->setPosition(m_vBack[j].m_pImage->getPosition());
                m_vSpr[i].m_bOpen = false;
                return;
            }
        }
    }

    //触摸的图片移动
    target->setPosition(target->getPosition() + pTouch->getDelta());
}
void HelloWorld::update(float dt){

    if (!m_bWin)
    {
        //全部触摸关闭..代表通关
        m_bWin = true;
        ; i < m_vSpr.size(); i++)
        {
            if(m_vSpr[i].m_bOpen == true){
                m_bWin = false;
            }
        }
    }

    if (m_bWin)
    {
        //过关
        log("cheng gong");
        unscheduleUpdate();
    }

} 
Rect HelloWorld::GetBackRect( Sprite *spr ){
  //返回精灵的碰撞矩形    Vec2 origin = spr->getPosition();
    Size size = spr->getContentSize();
    return Rect( origin.x - size.width * .1f, origin.y - size.height * .1f, size.width * .1f, size.height * .1f );
}

cocos2dx 3.x 拼图小游戏的更多相关文章

  1. JavaScript版拼图小游戏

    慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...

  2. 使用NGUI实现拖拽功能(拼图小游戏)

    上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...

  3. jQuery实现拼图小游戏

    小熊维尼拼图                                                                                    2017-07-23 ...

  4. jQuery拼图小游戏

    jQuery拼图小游戏 最后样式 核心代码部分 <script type="text/javascript" > $(function () { $("td& ...

  5. 在HTML页面中有jQuery实现实现拼图小游戏

    1.用jQuery实现拼图小游戏 2.首先获得td的点击事件.再进行交换位置 3.下面这种仅供参考 4.下面这些是HTMl标签 当这个世界变得越来越复杂的时候,内心最需保持一份简单一份纯真:

  6. 仿苹果电脑任务栏菜单&&拼图小游戏&&模拟表单控件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. swift 拼图小游戏

    依据这位朋友的拼图小游戏改编 http://tangchaolizi.blog.51cto.com/3126463/1571616 改编主要地方是: 原本着我仁兄的代码时支持拖动小图块来移动的,我參照 ...

  8. 教你用Python自制拼图小游戏,一起来制作吧

    摘要: 本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyt ...

  9. 打造专属自己的html5拼图小游戏

    最近公司刚好有个活动是要做一版 html5的拼图小游戏,于是自己心血来潮,自己先实现了一把,也算是尝尝鲜了.下面就把大体的思路介绍一下,希望大家都可以做出一款属于自己的拼图小游戏,必须是更炫酷,更好玩 ...

随机推荐

  1. vue2.0+element-ui(01简单点的单页面)

    前言: 在<Vue.js权威指南>刚出版的时候,自己就作为一名前端粉捧了一把场,可是真是应了那句“出来混,总是要还的“这句话了,那时候信心满满的买来书想要认真研究,最终却还是把它搁浅了.直 ...

  2. 【顽固BUG】Visual Studio 2015 + TestDriven.NET-3.8.2860_Personal_Beta 调用的目标发生了异常。

    前言 突然怎么弄也无法断点调试了 输出如下: ------ Test started: Assembly: Server5.V2.dll ------ 调用的目标发生了异常. 而且网站运行提示: -- ...

  3. Java中迭代器实现的原理

    一. 引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator();wh ...

  4. LeetCode——Missing Number

    Description: Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one t ...

  5. Linux性能监控——CPU,Memory,IO,Network

    版权声明:本文由刘爽原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/107 来源:腾云阁 https://www.qclou ...

  6. 【BZOJ4554】[Tjoi2016&Heoi2016]游戏 二分图最大匹配

    [BZOJ4554][Tjoi2016&Heoi2016]游戏 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个炸弹,看 ...

  7. 【BZOJ1854】[Scoi2010]游戏 二分图最大匹配

    [BZOJ1854][Scoi2010]游戏 Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当 ...

  8. 【ES6】001---module模块------【巷子】

    001.前言 什么是模块化开发?   为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 怎么会有这么多js文件 ...

  9. Linq初探

    1.什么是LINQ LINQ是语言集成查询(Language Integrated Query),这项技术是在.net 3.5就已经引入的技术,极大的方便了数据的查询,他可以支持数据库.XML.ADO ...

  10. HDU_2586_How far away ?

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...