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();
}
Cocos2d-x 水果忍者划痕效果的更多相关文章
- Android上的水果忍者刀锋效果(JAVA实现)
显示刀锋的View package com.wbhuang.myninjia; import java.util.ArrayList; import java.util.List; import an ...
- 前端优秀作品展示,JavaScript 版水果忍者
<水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版的切水果游戏由百度 JS 小组开发,采用 vml + svg 绘图,使用了 Rapha ...
- 作品展示,JavaScript 版水果忍者
点这里 <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版的切水果游戏由百度 JS 小组开发,采用 vml + svg 绘图,使用了 R ...
- 基于html5 canvas和js实现的水果忍者网页版
今天爱编程小编给大家分享一款基于html5 canvas和js实现的水果忍者网页版. <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版 ...
- JavaScript实现的水果忍者游戏,支持鼠标操作
智能手机刚刚普及时,水果忍者这款小游戏可谓风靡一时.几年过去了,现在,让我们用纯JavaScript来实现这个水果忍者游戏,就算是为了锤炼我们的JavaScript开发技能吧. 大家可以通过这个链接在 ...
- L3-012 水果忍者 (30 分)
2010年风靡全球的“水果忍者”游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以完成游戏规定的任务. ...
- java游戏制作之水果忍者
水果忍者的原理很简单,主要就是采用随机的方式是画面上面出现水果. package Fruitninja; import java.awt.Dimension; import java.awt.Grap ...
- 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛 L3-012. 水果忍者
/*对于一条满足条件的直线,向下移,直到触碰一条线段的下端点,仍然经过其它线段,该直线仍然满足条件 即以一条线段的下(上)端点作为直线上的一点,求为了经过一条线段的最小.最大斜率值(mink,maxk ...
随机推荐
- Linux上java环境变量配置
1.java配置 配置环境变量在/etc/profile下增加 # set Java environment JAVA_HOME=/usr/share/jdk1.6.0_43 PATH=$JAVA_H ...
- Linux 硬盘挂载方法
linux 硬盘分区,分区,删除分区,格式化,挂载,卸载笔记 硬盘挂载操作工作步骤: 1.先查看目前机器上有几块硬盘,查看命令有两种: 命令1:# fdisk –l 命令2:# dmesg | gre ...
- spring-cloud-sleuth+zipkin追踪服务实现(二)
1. 简述 在上一节<spring-cloud-sleuth+zipkin追踪服务实现(一)>中,我们使用microservice-zipkin-server.microservice-z ...
- 解析kubernetes架构
一. 简介: kubernetes是一个开源的容器管理工具,是基于GO语言开实现的,轻量级和便携式的应用,可以把kubernetes cluster在linux主机上部署.管理和扩容docker容器的 ...
- EditText属性描述
android:layout_gravity="center_vertical"//设置控件显示的位置:默认top,这里居中显示,还有bottom android:hint=&qu ...
- Http 请求 GET和POST的区别
GET和POST还有一个重大区别,简单的说: GET产生一个TCP数据包;POST产生两个TCP数据包. 长的说: 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器 ...
- thinkjs REST API的跨域设置
用thinkjs也有一小段时间了,和其它国产框架一样,起初是处于观望态度.当然我最先的选择也不是thinkjs而是选的express,用到后面发现实现一个能让自己用着比较顺手的博客还是一件蛮困难或者说 ...
- OOD沉思录 --- 面向动作与面向对象 --- 避免全能类
面向过程的软件开发通过非常集中化的控制机制来分解功能,在程序设计中表现就是大量的条件判断,深层次的循环嵌套等. 这种模式下,我们可以通过分析方法的参数,局部变量及其访问的全局变量来得到方法对数据的依赖 ...
- 洛谷P4139 上帝与集合的正确用法 [扩展欧拉定理]
题目传送门 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”. ...
- Java面向对象封装和继承
面向对象 什么是面向过程.面向对象? 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.例如:公司打扫卫生( ...