Cocos2d-x 水果忍者划痕效果

Cocos2d-x 水果忍者划痕效果

网上找的一个关于水果忍者划痕的,效果还算凑合。其原理就是基于OpenGL绘制直线,因为版本号过老,此处笔者改动了一些方法,粘贴后可直接使用

适用于Cocos2d-x 2.2.1

.h文件里须要添�的代码:

 void draw();

     void drawLine();

     virtual void ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent);

     virtual void ccTouchesMoved(CCSet *pTouches,CCEvent *pEvent);

     virtual void ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent);

      std::list<CCPoint> pointList;


.cpp文件里

void HelloWorld::draw()

{

    drawLine();

}

void HelloWorld::drawLine()

{

    int tickSubCount = 10;

    int pointListKeepCount = 500;

    

    for (int i=0; i<tickSubCount ; i++)

    {

        if (pointList.size() >0)

        {

            pointList.pop_front();

        }

        else

        {

            break;

        }

    }

    while (pointList.size() > pointListKeepCount)

    {

        pointList.pop_front();

    }

    

    float max_lineWidth = 5;

    float min_lineWidth = 1;

    int   alpha_min = 10;

    int   alpha_max =  200;

    

    int  R = arc4random()%255;

    int  G = arc4random()%255;

    int  B = arc4random()%255;

    

    int pointListCount = pointList.size();

    std::list <CCPoint>::iterator it =pointList.begin();

    

 

    

    float pointIndex = 0;

    for(;it!=pointList.end();it++)

    {

        int distanceToMiddle = fabs(pointIndex-pointListCount/2);

        float percent = 1.0-(float)distanceToMiddle/(float)(pointListCount/2.0);

        float lintWidth = min_lineWidth + max_lineWidth*percent;

        int alpha = alpha_min +alpha_max*percent;

        

        ccc4(R,G,B,alpha );

        ccPointSize(lintWidth);

        ccDrawPoint( *it );

        

        pointIndex++;

    }

}

void HelloWorld::ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent)

{

    CCSetIterator it = pTouches->begin();

    CCTouch* touch = (CCTouch*)*it;

    CCPoint beginPoint = touch->getLocationInView();

    beginPoint = CCDirector::sharedDirector()->convertToGL(beginPoint);

    

    pointList.push_back(beginPoint);

}

void HelloWorld::ccTouchesMoved(CCSet *pTouches,CCEvent *pEvent)

{

    CCSetIterator it = pTouches->begin();

    CCTouch* touch = (CCTouch*)*it;

    

    CCPoint nextPoint = touch->getLocationInView( );

    nextPoint = CCDirector::sharedDirector()->convertToGL(nextPoint);

    

    CCPoint preMovePoint = touch->getPreviousLocationInView();

    preMovePoint = CCDirector::sharedDirector()->convertToGL(preMovePoint);

    

    float distance = ccpDistance(nextPoint, preMovePoint);

    if (distance > 1)

    {

        int d = (int)distance;

        for (int i =0; i < d; i++ )

        {

            float distanceX = nextPoint.x – preMovePoint.x;

            float distanceY = nextPoint.y – preMovePoint.y;

            

            float percent = i / distance;

            CCPoint newPoint;

            newPoint.x = preMovePoint.x + (distanceX * percent);

            newPoint.y = preMovePoint.y + (distanceY * percent); 

            

            pointList.push_back(newPoint);

        }

    }

}

void HelloWorld::ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent)

{

    pointList.clear();

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119182.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Django组件_django路由path

    Django组件_django路由path什么是Django中间件中间件(Middleware)是一个用来处理Django的请求(Request)和响应(Response)的框架级别的钩子,它是一个轻量、低级别的插件系统,用于在全局范围内改

    2022年7月31日
    7
  • 正则表达式全解析+常用示例「建议收藏」

    正则表达式全解析+常用示例「建议收藏」在开始写这篇文章之前,我的心里还是纠结的。我在问自己要不要写这篇东西,关于相似的内容网上多如牛毛,而且还不乏珍品,况且,就算我写了也不一定能写的好。但是现在你既然看到了,那说明我还是写了出来。就算是对自己学习的一个总结吧!同时也把常见的常用的正则表达式给收集整理出来,以便用到的时候不用满世界的找。关于正则表达式一直都是个让很多程序员都觉得很郁闷的一个东西,我觉得创造正则表达式的那个家伙简直就是

    2022年5月17日
    46
  • 中国蚁剑安装教程_剑形虹臭蚁的天敌

    中国蚁剑安装教程_剑形虹臭蚁的天敌中国蚁剑:https://www.freebuf.com/sectool/98681.htmlgithub地址:https://github.com/AntSwordProject我下载好的(这里的版本太旧了,去github下载吧):https://www.lanzous.com/b548184/密码:cbek教程:两个全部解压好(一个是源码,一个是启动文件)先…

    2025年8月25日
    5
  • sql语言总结合集

    sql语言总结合集

    2021年10月2日
    45
  • 设计模式(五)适配器模式Adapter(结构型)

    设计模式(五)适配器模式Adapter(结构型)设计模式(五)适配器模式Adapter(结构型)1.概述:接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器。………

    2022年7月25日
    11
  • 苹果无线网服务器绕过id,最新绕过苹果id方法[通俗易懂]

    苹果无线网服务器绕过id,最新绕过苹果id方法[通俗易懂]1.先将设备进入DFU模式,将你的iPhone关机,同时按住开关机键和Home键,当你看见白色的苹果Logo时,请松开开关机键,并继续保持按住Home键。2.使用Checkra1n进行越狱,越狱工具下载地址:checkra.in。3.在端口爱思上使用ssh,同时删除或者重命名Applications文件夹内的setup.app。4.执行killall-9SpringBoard.Boom注销后即…

    2025年11月24日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号