zoukankan      html  css  js  c++  java
  • 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();

    }

  • 相关阅读:
    Mac 实用工具——迁移助理
    Mac OS 的终端工具 iTerm2 的使用及设置
    Python3的异常捕获和处理
    Python3 文件的重命名
    Linux下jetty的启动和停止
    MySQL使用select查询时,在查询结果中增加一个字段并指定固定值
    使用ThreadLocal请务必remove
    Vue基础-文本显示,v-html插入html代码
    nginx之location(root/alias)&& linux 上修改了nginx.conf 怎么重新加载配置文件生效
    CentOS7开启防火墙及特定端口
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3819484.html
Copyright © 2011-2022 走看看