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();

}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Spring返回text/plain出现中文乱码

    Spring返回text/plain出现中文乱码今天在RestTemplate调试的时候发现返回的中文出现了乱码,使用POST

  • 手机上网的方式_什么软件可以免费上网

    手机上网的方式_什么软件可以免费上网中国移动的GPRS上网是有两种接入方式CMWAP和CMNETCMWAP和CMNET的区别1.部分手机支持WWW开头的网站,中国移动开通的GPRS有两个接入点,CMWAP和CMNET,CMWAP就只能上WAP开头的网站,目前基本市面上的手机都支持这种上网方式2.CMNET也就可以浏览电脑的网页,也就是WWW开头的,部分高档手机支持WWW格式。CMWAP和CMNET收费1.收费问题:如果不

  • 基于Python的周立功CAN上位机(详细教程)

    基于Python的周立功CAN上位机(详细教程)

  • DeepLink的实现原理「建议收藏」

    DeepLink的实现原理「建议收藏」前言之前我们又是看源码又是研究动画,今天分享一个比较简单的技术点:DeepLink。DeepLink,深度链接技术,主要应用场景是通过Web页面直接调用Android原生app,并且把需要的参数通过Uri的形式,直接传递给app,节省用户的注册成本。简单的介绍DeepLink概念之后,我们看一个实际的例子:朋友通过京东分享给我一个购物链接:于是我通过微信打开了这条链接:…

  • db4o数据库文件_繁忙的Java开发人员指南db4o,使用db4o进行数据库重构

    db4o数据库文件_繁忙的Java开发人员指南db4o,使用db4o进行数据库重构存档日期:2019年5月13日|首次发布:2007年5月22日重构Java™代码比重构关系数据库要简单得多,但是幸运的是,对象数据库的情况并非如此。在《繁忙的Java开发人员db4o指南》的这一期中,TedNeward向您介绍了他最喜欢的对象数据库的另一个优点:db4o将重构简化到几乎没有用处。此内容不再被更新或维护。全文以PDF格式“按原样”提供。随着技术的飞速发展,…

  • 数据库中的having语句_sql的having语句

    数据库中的having语句_sql的having语句SQL语句HAVING的用法HAVING语句通常与GROUPBY子句及聚集函数COUNT,AVG,SUM,MAX,MIN语句联合使用,用来过滤由GROUPBY语句返回的记录集,通常跟在GROUPBY后边作用相当于WHERE。where子句后边是指定行所对应的条件,并且不能含有聚集函数,而HAVING后边是指定组所对应的条件,可以含有聚合函数。HAVING语句的存在弥补了WHERE关键字不能与聚集函数联合使用的不足。我们可以这样理解:where筛选的是行(一个元组),而having筛选的是组(多

发表回复

您的电子邮箱地址不会被公开。

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