.h文件

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

    void SeveImage(cocos2d::Ref *pSender);
    void ClearImage(cocos2d::Ref *pSender);

    cocos2d::RenderTexture *m_pTarget;
    std::vector<cocos2d::Sprite *> m_pBrushs;
    cocos2d::Rect m_rRect;

.cpp文件

   Size size = Director::getInstance()->getWinSize();
    Vec2 origin = Vec2(size.width * .5f, size.height * .5f);
    //创建画布
    m_pTarget = RenderTexture::create(size.width, size.height , Texture2D::PixelFormat::RGBA8888);
    m_pTarget->setPosition(Vec2(size.width * .5f, size.height * .5f));
    addChild(m_pTarget, -);

    //创建触摸
    EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
    listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
    listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
    listener->setSwallowTouches(true);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

    //创建保存 清除按钮
    MenuItemFont::setFontSize();//字体大小..整个 MenuItemFont 类 修改
    MenuItemFont *seve = MenuItemFont::create("Seve Image  ", CC_CALLBACK_1(HelloWorld::SeveImage, this));
    MenuItemFont *clear = MenuItemFont::create("Clear", CC_CALLBACK_1(HelloWorld::ClearImage, this));
    Menu *menu = Menu::create( seve, clear, NULL );
    menu->alignItemsVertically();//垂直对齐
    menu->setPosition(Vec2(size.width - , size.height  - ));
    addChild(menu);

    //创建区域.只能在区域里画图
    m_rRect = Rect(origin.x - size.width * .25f, origin.y - size.height * .25f, size.width * .5f, size.height * .5f);
bool HelloWorld::onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent){
    Vec2 location = pTouch->getLocation();

    //当点中区域时才可以传递到moved
    if (m_rRect.containsPoint(location))
        return true;

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

    Vec2 begin = pTouch->getLocation();
    Vec2 end = pTouch->getPreviousLocation();

    //移动出了区域就return
    if (!m_rRect.containsPoint(begin) || !m_rRect.containsPoint(end))
        return;

    //开始画图  std::vector<cocos2d::Sprite *> m_pTarget
    m_pTarget->begin();//开始

    float distance = begin.getDistance(end);//间距
    )
    {
        int d = (int)distance;
        m_pBrushs.clear();

        ; i < d; i++)
        {
            Sprite *spr = Sprite::create("fire.png");
            spr->setColor(Color3B::RED);
            spr->setOpacity();
            m_pBrushs.push_back(spr);

            float difx = end.x - begin.x;
            float dify = end.y - begin.y;
            float delta = (float)i / distance;
            m_pBrushs[i]->setPosition(Vec2(begin.x + (difx * delta), begin.y + (dify * delta)));
            m_pBrushs[i]->setRotation(rand() % );
             / 50.0f) + 0.25f;
            m_pBrushs[i]->setScale(r);
            m_pBrushs[i]->setColor(Color3B(rand() %  + , , ));
            m_pBrushs[i]->visit();
        }
    }
    //结束画图
    m_pTarget->end();
}
void HelloWorld::SeveImage(cocos2d::Ref *pSender){
    log("Seve Image");
    //保存成功会有弹窗..但不知道保存到那个位置了...
    if(m_pTarget->saveToFile("123.png", kCCImageFormatPNG)){

        MessageBox("Print Screen OK!", "Hit");
    }
}
void HelloWorld::ClearImage(cocos2d::Ref *pSender){
    log("Clear");
    //清空画笔
    m_pTarget->clear(, , , );
}

cocos2dx 3.x 区域画图的更多相关文章

  1. 深入浅出CChart 每日一课——快乐高四第六课 二丫的青梅,返璞归真之普通窗体多区域画图

    有好些朋友给我反映,就是一个窗体中加入好几个CChartWnd之后.工作不正常.这个的确是这样,CChartWnd会接管原来窗体的消息循环,加入多个CChartWnd之后,就相当于出租房转手好几道,消 ...

  2. [Cocos2d-x For WP8]DrawPrimitives画图

    在Silverlight框架的WP8应用程序里面,我们画几何图形的时候会通过Line等等的类在用C#代码或者在XAML上画图,那么在Cocos2d-x For WP8里面我们一样也可以实现这样的功能. ...

  3. DrawTools(画图工具)原始版本

    上一篇文章一个优秀的C#开源绘图软件 DrawTools中详细的介绍了DrawTools的几种演化的较高版本的软件的特色与功能. 这篇文章,将介绍一下这款软件的成名版本, 下载地址DrawTool_O ...

  4. 生物信息-McScan(Python-jcvi)共线性画图

    比较基因组学中,共线性的分析的图无疑是最漂亮的. 共线性分析可以很好地解释进化关系和多倍化事件. 本文主要介绍的是唐老师的Python版McScan(jcvi工具包),这个包很强大,但是其功能在官网的 ...

  5. 常用的opengl函数(三)

    glBlendFunc 定义像素算法.   void WINAPI glBlendFunc(GLenum sfactor,GLenum dfactor); 参数编辑 sfactor 指定红绿蓝和 al ...

  6. html5的canvas绘制迷宫地图

    canvas标签一直是html5的亮点,用它可以实现很多东西.我想用它来绘画像迷宫那样的地图.借助到的工具有瓦片地图编辑器tiled(点击跳转到下载链接). 如图:如果你想要画像这样的迷宫地图,如果不 ...

  7. Qt中绘图坐标QPainter,Viewport与Window的关系

    在Qt中常常要自己重载一些paintEvent函数,这个时候往往忽略了两个很关键的API,那就是setViewport和setWindow. Viewport,顾名思义,反应的是物理坐标,就是你实际想 ...

  8. perl tk说明

    介绍: perl/Tk(也被称为pTK) 是一个模块和代码的收集,尝试 简单的配置Tk 8 部件工具包到强大的词素文文字, 动态内存,I/O, 和面向对象,它是一种解释脚本语言 来制作部件和程序 使用 ...

  9. 在VC6中基于dll开发插件用于各种图片显示(BMP/TGA/JPG/GIF/PNG/TIF/ICO/WMF/EMF/...)

    一.图片显示 图片显示的方法: 1.  直接写程序 2.  第3方库 3.  调用COM组件的IPicture接口 4.  使用MFC的CPictureHolder类 5.  使用GDI+的CImag ...

随机推荐

  1. Unity随机Prefab,自动前往某点处理

    对与U3D  AI,看了下,自己做了小功能,以备后用啊! 一,在某区域随机产生某个对象 C# 文件名称为RadomAPoint.cs using UnityEngine; using System.C ...

  2. js array.filter实例(数组去重)

    语法: 循环对数组中的元素调用callback函数, 如果返回true 保留,如果返回false 过滤掉,  返回新数组,老数组不变 var new_array = source_array.filt ...

  3. mySQL数据库三:命令行附录

    一:where 在上一篇,粗略的介绍了where,但是where后面可以跟其他的条件,现在我们来一一说明 1.between:在某两个值之间 我建立一个名为person的表,里面有id,name,ag ...

  4. 通过身份证分析出生年月日、性别、年龄的SQL语句

    ),) ) ),)<>'X' ) ) )<>'X' ),)),)),)) ),)),)),)) ) as int)) where [出生日期]<>'' #字符串格式 ...

  5. LeetCode——Product of Array Except Self

    Description: Given an array of n integers where n > 1, nums, return an array output such that out ...

  6. 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)

    主要参考资料:数据结构(C语言版)严蔚敏   ,http://blog.chinaunix.net/uid-25324849-id-2182922.html   代码测试通过. package 图的建 ...

  7. kubernetes创建yaml,pod服务一直处于 ContainerCreating状态的原因查找与解决

    最近刚刚入手研究kubernetes,运行容器的时候,发现一直处于ContainerCreating状态,悲了个催,刚入手就遇到了点麻烦,下面来讲讲如何查找问题及解决的 运行容器命令: kubectl ...

  8. 【BZOJ3156】防御准备 斜率优化

    [BZOJ3156]防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小 ...

  9. 分布式数据库主键id生成策略

    分布式数据库部署主要分为两种,一种是读写分离.这个需要弄主从数据库.主要是写的时候写主数据库,读的时候读从数据库.分散读取压力,对于读多写少的系统有利于 提高其性能.还有一种是分布式存储,这种主要是将 ...

  10. JS三级联动实例

    简单的HTML实例: <h4>选择省</h4> <div class="selectSheng"></div> <select ...