文档章节

cocos2d-x3.x 像素碰撞

piggybear
 piggybear
发布于 2015/02/16 10:31
字数 527
阅读 16
收藏 0
点赞 0
评论 0
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
using namespace cocos2d;

class HelloWorld : public cocos2d::Layer
{
public:
    // there's no 'id' in cpp, so we recommend returning the class instance pointer
    static cocos2d::Scene* createScene();

    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
    virtual bool init();  
    
    // a selector callback
    void menuCloseCallback(cocos2d::Ref* pSender);
    
    // implement the "static create()" method manually
    CREATE_FUNC(HelloWorld);
    
    
    cocos2d::EventListenerTouchOneByOne *_listener;
    cocos2d::Sprite *bulletForTower12;
    cocos2d::Sprite *m_imgMan;
    cocos2d::RenderTexture *m_pRenderTexture;
    cocos2d::Label *m_pLabTips;
    
    virtual bool onTouchBegan(Touch *touch, Event *unused_event);
    virtual void onTouchEnded(Touch *touch, Event *unused_event);
    
};

#endif // __HELLOWORLD_SCENE_H__
<pre name="code" class="cpp">#include "HelloWorldScene.h"

USING_NS_CC;

Scene* HelloWorld::createScene()
{
    // 'scene' is an autorelease object
    auto scene = Scene::create();
    
    // 'layer' is an autorelease object
    auto layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    
    m_imgMan = Sprite::create("tangfa09/tafang09-1-zidan0002.png");
    m_imgMan->setPosition(Vec2(400, 200));
    this->addChild(m_imgMan, 1);
    
    m_pRenderTexture = RenderTexture::create(m_imgMan->getContentSize().width, m_imgMan->getContentSize().height, Texture2D::PixelFormat::RGBA8888);
    m_pRenderTexture->ignoreAnchorPointForPosition(true);
    m_pRenderTexture->setPosition(Vec2(400, 200));
    m_pRenderTexture->setAnchorPoint(Vec2::ZERO);
    this->addChild(m_pRenderTexture, 0, 1);
    m_pRenderTexture->setVisible(false); //将绘制出来的图片隐藏
    
    
    _listener=EventListenerTouchOneByOne::create();
    _listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
    _listener->onTouchEnded=CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
    
    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(_listener, this);
    
    return true;
}

bool HelloWorld::onTouchBegan(Touch *touch, Event *unused_event)
{
    bool isTouched = false;
    
    auto touchPoint = touch->getLocationInView();
    auto glPoint = Director::getInstance()->convertToGL(touchPoint);

    if (m_imgMan->boundingBox().containsPoint(glPoint)) {
        
        Color4B color4B = {0, 0, 0, 0};
        
        Point nodePos = m_imgMan->convertTouchToNodeSpace(touch);
        unsigned int x = nodePos.x;
        unsigned int y = m_imgMan->getContentSize().height - nodePos.y;
        
        Point point = m_imgMan->getPosition();
        //开始准备绘制
        //绘制完成后清理画布的内容
        m_pRenderTexture->beginWithClear(0, 0, 0, 0);
        //绘制使用的临时精灵,与原图是同一图片
        auto pTempSpr = Sprite::createWithSpriteFrame(m_imgMan->displayFrame());
        pTempSpr->setPosition(Vec2(pTempSpr->getContentSize().width / 2, pTempSpr->getContentSize().height / 2));
        //绘制
        pTempSpr->visit();
        //结束绘制
        m_pRenderTexture->end();
        //通过画布拿到这张画布上每个像素点的信息,封装到CCImage中
        Image* pImage = m_pRenderTexture->newImage();
        //获取像素数据
        unsigned char* data_ = pImage->getData();
        unsigned int *pixel = (unsigned int *)data_;
        pixel = pixel + (y * (int)pTempSpr->getContentSize().width) * 1 + x * 1;
        //R通道
        color4B.r = *pixel & 0xff;
        //G通道
        color4B.g = (*pixel >> 8) & 0xff;
        //B通道
        color4B.b = (*pixel >> 16) & 0xff;
        //Alpha通道,我们有用的就是Alpha
        color4B.a = (*pixel >> 24) & 0xff;
        CCLOG("当前点击的点的: alpha = %d", color4B.a);
        
        if (color4B.a > 50) {
            isTouched = true;
        } else {
            isTouched = false;
        }
    }
    if (m_pLabTips) {
        m_pLabTips->removeFromParentAndCleanup(true);
        m_pLabTips = NULL;
    }
    
    return isTouched;
}

void HelloWorld::onTouchEnded(Touch *touch, Event *unused_event)
{
    if (m_pLabTips) {
        m_pLabTips->removeFromParentAndCleanup(true);
        m_pLabTips = NULL;
    }
    
    m_pLabTips = Label::createWithTTF("NO", "fonts/Marker Felt.ttf", 30);
    m_pLabTips->setAnchorPoint(Vec2::ZERO);
    m_pLabTips->setPosition(Vec2(300.0f, 100.0f));
    m_pLabTips->setColor(Color3B::YELLOW);
    this->addChild(m_pLabTips, 1);
}



本文转载自:http://blog.csdn.net/aa294194253/article/details/38709279

共有 人打赏支持
piggybear
粉丝 3
博文 237
码字总数 37552
作品 0
西安
技术主管
《Cocos2d-x实战 C++卷》上线了-源码-样章-感谢大家的支持

《Cocos2d-x实战 C++卷》上线了 感谢大家一直以来的支持! 全面介绍Cocos开发技巧,采用Cocos2d-x3.2版本,并且详细介绍跨平台移植已经多平台发布细节。 · 各大商店均开始销售: 京东:htt...

智捷课堂
2014/12/01
0
0
忍者无敌-实例讲解Cocos2d-x瓦片地图

实例比较简单,如图所示,地图上有一个忍者精灵,玩家点击他周围的上、下、左、右,他能够向这个方向行走。当他遇到障碍物后是无法穿越的,障碍物是除了草地以为部分,包括了:树、山、河流等...

智捷课堂
2014/09/19
0
1
游戏示例的源码有错误

我按《cocos2d-x 3.x 游戏开发之旅》这本书的一个游戏示例敲的代码,也从作者的网站上下了示例源码看了,没有发现代码的问题。 我是Xcode7.3,cocos2d-x3.x但是编译的时候出现了问题,开始的...

光明使者___
2016/06/05
311
0
(翻译)使用Cocos2D 2.X制作一个简单iPhone游戏教程——第1部分

原文地址:http://www.raywenderlich.com/25736/how-to-make-a-simple-iphone-game-with-cocos2d-2-x-tutorial Ray要说:经过一周的投票表决,大家希望我将此套Cocos2D经典入门系列教程从Coc...

长平狐
2013/12/26
140
0
在Tiled Map中使用碰撞检测

在这篇教程里,我们会讲解如何使用cocos2d和Tiled Map Editor创建一个基于tiled map的游戏.作为例子,我们会制作一个小游戏.游戏的主要内容是一个忍者在沙漠里寻找可口的西瓜吃. 这篇教程主要学...

长平狐
2012/08/29
1K
0
实例介绍Cocos2d-x物理引擎:碰撞检测

碰撞检测是使用物理引擎的一个重要目的,使用物理引擎可以进行精确的碰撞检测,而且执行的效率也很高。 在Cocos2d-x 3.x中使用事件派发机制管理碰撞事件,EventListenerPhysicsContact是碰撞...

智捷课堂
2014/09/26
0
1
quick-cocos2d-x物理引擎之chipmunk(二)

上一篇讲了quick-cocos2d-x使用chipmunk的使用流程,介绍了World,Body,Shape的建立,这一篇将讲解如何处理物体之间的碰撞。 一、监听事件 quick-cocos2d-x中的chipmunk碰撞处理是通过监听事件...

lonewolf
2013/11/02
0
0
Cocos2D泰然教程推荐学习步骤

文章转自泰然教程:http://article.ityran.com/cocos2dstudy 这是一个学习Cocos2D的非常好的学习指引。保存下来。 Cocos2D泰然教程推荐学习步骤 cocos2d学习Iven推荐步骤 校对:子龙山人 一、...

andyhe91
2014/10/10
0
0
Cocos2d-x3.0游戏实例《别救我》目录

这个5.1假期还真不错,有个小惊喜,那就是,我某个游戏今天的下载量爆表了,突破历史最高点~! 于是,我决定写一个新的游戏实例教程,以示庆祝~ 啊才怪啊~!这教程5.1之前就在写了,我还因此...

musicvs
2014/05/07
0
0
实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D

我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程,熟悉这些API的使用。这个实例运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在...

智捷课堂
2014/10/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iOS安全应该做哪些事情

1. 尽量使用HTTPS协议。 2. 密码提交的时候,密码使用SHA256加密后传输,MD5等经过哈希碰撞已经可以推算出原文。 3. 密码提交的时候,可以加盐。 4. 密码保存在本地的时候,尽量使用钥匙串保...

HOrange
10分钟前
0
0
react native 注意事项

1. 环境参考官网 android studio 必装 java jdk安装 1.8版本(环境建议自己一步一步配置,切记不要 apt ) 2.有改变编译内容发现 会白屏,然后APP消失,请卸载原来的测试 appinfo (连续两次...

304158
16分钟前
0
0
FOMO游戏代码解析

源代码在此处

怎当她临去时秋波那一转
21分钟前
1
0
EOS智能合约与DApp开发入门

EOS的是Block.One主导研发的一个区块链底层公链系统,它专门为支撑商业去中心化 应用(Decentralized Application)而设计,其代码开源。 比特币被称为区块链1.0,因为它开辟了数字加密货币的...

笔阁
33分钟前
1
0
编译cjson到dll

https://blog.csdn.net/mengzhisuoliu/article/details/52203724 编译完成后 是纯lua实现的json decode 的10倍以上...

梦想游戏人
43分钟前
0
0
JS基础- Date 对象

Date 对象 Date 对象用于处理日期和时间。 创建 Date 对象的语法: var myDate=new Date() 注释:Date 对象会自动把当前日期和时间保存为其初始值。 Date 对象属性 属性 描述 constructor 返...

ZHAO_JH
45分钟前
0
0
Python数据分析numpy(1)

Python开源的科学计算基础库 1.表示N维数组对象ndarray 2.线性代数、傅里叶变换、随机数生成 3.广播函数,整合c++、c 一.数据的维度 1.数据 2.数据维度 3.一维数据 (1)特点 (2)Python中的...

十年磨一剑3344
48分钟前
1
0
csv导入Hive脚本

from pyspark.sql import HiveContexthivec = HiveContext(sc) # 创建一个hivecontext对象用于写执行SQL,sc为sparkcontext# 拼接一个字段类型字符串str_s = 'label String,'...

gulf
50分钟前
0
0
TensorFlow 隐含层 拟合 异或运算

a⊕b = (¬a ∧ b) ∨ (a ∧¬b) 数据 X = [[0, 0], [0, 1], [1, 0], [1, 1]]Y = [[0], [1], [1], [0]] 单层网络只能拟合线性问题,由于异或是非线性问题,需要使用多层网络 输入和输出 [[...

阿豪boy
今天
0
0
SVN 教程

http://www.runoob.com/svn/svn-tutorial.html 记一次 svn 管理的项目迁移工作 之前A服务器上的项目版本管理工具是用的SVN,后来,之前管理linux服务器的员工离职了,这管理服务器的工作也就...

yeahlife
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部