网上找的一个关于水果忍者划痕的,效果还算凑合。其原理就是基于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();

}

Cocos2d-x 水果忍者划痕效果的更多相关文章

  1. Android上的水果忍者刀锋效果(JAVA实现)

    显示刀锋的View package com.wbhuang.myninjia; import java.util.ArrayList; import java.util.List; import an ...

  2. 前端优秀作品展示,JavaScript 版水果忍者

    <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版的切水果游戏由百度 JS 小组开发,采用 vml + svg 绘图,使用了 Rapha ...

  3. 作品展示,JavaScript 版水果忍者

    点这里 <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版的切水果游戏由百度 JS 小组开发,采用 vml + svg 绘图,使用了 R ...

  4. 基于html5 canvas和js实现的水果忍者网页版

    今天爱编程小编给大家分享一款基于html5 canvas和js实现的水果忍者网页版. <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版 ...

  5. JavaScript实现的水果忍者游戏,支持鼠标操作

    智能手机刚刚普及时,水果忍者这款小游戏可谓风靡一时.几年过去了,现在,让我们用纯JavaScript来实现这个水果忍者游戏,就算是为了锤炼我们的JavaScript开发技能吧. 大家可以通过这个链接在 ...

  6. L3-012 水果忍者 (30 分)

    2010年风靡全球的“水果忍者”游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以完成游戏规定的任务. ...

  7. java游戏制作之水果忍者

    水果忍者的原理很简单,主要就是采用随机的方式是画面上面出现水果. package Fruitninja; import java.awt.Dimension; import java.awt.Grap ...

  8. 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  9. 团体程序设计天梯赛 L3-012. 水果忍者

    /*对于一条满足条件的直线,向下移,直到触碰一条线段的下端点,仍然经过其它线段,该直线仍然满足条件 即以一条线段的下(上)端点作为直线上的一点,求为了经过一条线段的最小.最大斜率值(mink,maxk ...

随机推荐

  1. LNMP结合discuz的配置

    一.安装discuz 配置参照LAMP结合discuz的第一部分 不要忘记了 添加hosts~!!!! ===============我是分割线.========================== ...

  2. beego学习笔记(4):开发文档阅读(1)

    1.beego的设计是高度模块化的.每个模块,都可以单独使用.一共八大模块: cache;session;log;orm;context;httplibs;toolbox 2.beego的执行逻辑 3 ...

  3. 【PAT】1001. A+B Format (20)

    1001. A+B Format (20) Calculate a + b and output the sum in standard format -- that is, the digits m ...

  4. day5时间复杂度

    时间复杂度       (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道.但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花 ...

  5. java 接口请求返回通用json

    public class BaseResponseBody { // 不能添加属性 仅做泛型使用 } public class ResponseBase<T extends BaseRespon ...

  6. NHibernate示例

    1. 下载相关资源: 下载NHibernate.下载地址: http://nhforge.org/Default.aspx 下载微软Northwind示例数据库,下载地址:http://www.mic ...

  7. thinkphp5.0 配置格式

    ThinkPHP支持多种格式的配置格式,但最终都是解析为PHP数组的方式. PHP数组定义 返回PHP数组的方式是默认的配置定义格式,例如: //项目配置文件 return [ // 默认模块名 'd ...

  8. USACO 控制公司 Controlling Companies

    友情链接神犇520的博客 题目: 题目描述 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了 ...

  9. 如果修改GeneXus Android的一些源码文件(FlexibleClient)

    在使用GeneXus开发Android应用的过程中遇到了一个问题,使用tabs控件时发现默认高度过高,和UI设计要求的高度不一致,找了很久发现没有地方设置.后来联系了GeneXus中国厂商,得到了答复 ...

  10. XV6操作系统代码阅读心得(一):启动加载、中断与系统调用

    XV6操作系统是MIT 6.828课程中使用的教学操作系统,是在现代硬件上对Unix V6系统的重写.XV6总共只有一万多行,非常适合初学者用于学习和实践操作系统相关知识. MIT 6.828的课程网 ...