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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android入门教程1【学前准备】

    Android入门教程1【学前准备】Android入门教程学习Android的学前准备    我呢,不像别人,有自己的学习风格,我觉得在0基础的情况下去学一门语言,最重要的是什么,是计划,无目的这看看那看看的只会让你迷茫。废话不多说,直接跟我来学习Android吧。  一:学前准备要准备什么呢?我给大家一一列举一下:1.书籍  为什么要准备书籍呢?网上免费教程不多的是么?是的,网上是有,但有可能你今天看了一集教程就没有然后…

    2022年6月3日
    36
  • Python:利用python代码编程实现将视频的avi格式转换为MP4格式

    Python:利用python代码编程实现将视频的avi格式转换为MP4格式​Python:利用python代码编程实现将视频的avi格式转换为MP4格式目录利用python代码编程实现将视频的avi格式转换为MP4格式T1、ffmpeg命令在dos内实现T2、python代码编程实现利用python代码编程实现将视频的avi格式转换为MP4格式T1、ffmpeg命令在dos内实现ffmpeg-y-iF:\File_Anaconda\project_py37\RealTimeImageAnimation\output\FamilyBa_HuGe.a

    2022年10月17日
    1
  • vue3.0中关闭eslint(全部不检测)[通俗易懂]

    vue3.0中关闭eslint(全部不检测)[通俗易懂]前言:在项目中eslint检查是一个很棒的工具,但是在非正式场合,或者某些情况下,他会给我们带来很多不方便,这里分享下如何在新建项目后把他的eslint检查先关掉(正式项目不推荐关闭,因为良好的习惯是从每一行代码的规范开始)方法:打开我们的.eslintrc.js文件,把’@vue/standard’注释,然后把服务重启,重启,重启,重要的事情说三遍.eslintrc.jsmodule.exports={root:true,…

    2022年6月7日
    100
  • 备份数据库表结构_sql备份表和恢复表

    备份数据库表结构_sql备份表和恢复表##================================================================##需求场景:由于MySQL没有类似于SQLSERVER那样的系统表来存放备份记录,且大规模的MySQL服务器需要集中管理和查看。服务器出现性能问题或复制延迟时,需要先判断是否由数据备份引起。##===========================…

    2025年11月14日
    2
  • 浮点数的二进制表示

    浮点数的二进制表示

    2021年9月15日
    61
  • hdu 2176 取石子游戏

    hdu 2176 取石子游戏

    2022年2月5日
    45

发表回复

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

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