cocos2dx 2.x实现闪电效果(非画线版)

在网上搜索到一个直接用opengl画线实现的版本,但放在游戏中效果不太搭,要求用贴图的。我这个版本用的也是画线版的算法。

闪动的时候效果还可以,每段衔接的地方还是不太完美,各位有其他的建议的请联系我  blue-1986@hotmail.com

转载请注明出处 http://www.cnblogs.com/mrblue/p/4315091.html

效果图

//头文件

#ifndef __LIGINTNING_H__
#define __LIGINTNING_H__ #include "cocos2d.h"
#include <vector> class Lightning : public cocos2d::CCNode
{
public:
Lightning();
~Lightning(); public:
static Lightning* create(const std::string& strTextureFile, float fLength);
virtual bool init(const std::string& strTextureFile, float fLength); protected:
virtual void draw()/*override*/;
virtual void update(float fDelta)/*override*/; public:
void setTexture(cocos2d::CCTexture2D *texture);
void setLength(float fLength){ m_fLength = fLength; } protected:
void calculateVertex();
void addLightningSegment(float x1, float y1, float x2, float y2, float displace); protected:
std::vector<cocos2d::CCPoint> m_vecLightningTrackPoint;
std::vector<float> m_vecVertics;
std::vector<float> m_vecCoordinates;
cocos2d::CCTexture2D* m_pTexture;
float m_fLength;
}; #endif // __HELLOWORLD_SCENE_H__

  

//cpp

#include "Lightning.h"

USING_NS_CC;

using namespace std;

Lightning::Lightning()
:m_pTexture(NULL)
{
m_vecLightningTrackPoint.reserve();
m_vecVertics.reserve();
m_vecCoordinates.reserve();
} Lightning::~Lightning()
{
CC_SAFE_RELEASE(m_pTexture);
} Lightning* Lightning::create( const std::string& strTextureFile, float fLength )
{
Lightning * pRet = new Lightning();
if (pRet && pRet->init(strTextureFile,fLength))
{
pRet->autorelease();
}
else
{
CC_SAFE_DELETE(pRet);
} return pRet;
} bool Lightning::init(const string& strFile, float fLength)
{
CCNode::init(); setShaderProgram(CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTexture));
setLength(fLength);
setTexture(CCTextureCache::sharedTextureCache()->addImage(strFile.c_str())); scheduleUpdate(); return true;
} void Lightning::draw()
{
if(m_vecVertics.empty()||m_vecCoordinates.empty()) return; CC_NODE_DRAW_SETUP();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords ); ccGLBlendFunc( CC_BLEND_SRC,CC_BLEND_DST );
ccGLBindTexture2D( m_pTexture->getName() ); glVertexAttribPointer(kCCVertexAttrib_Position, , GL_FLOAT, GL_FALSE, , (GLvoid*)(&m_vecVertics[]));
glVertexAttribPointer(kCCVertexAttrib_TexCoords, , GL_FLOAT, GL_FALSE, , (GLvoid*)(&m_vecCoordinates[])); glDrawArrays(GL_TRIANGLE_STRIP, , m_vecVertics.size()/);
} void Lightning::addLightningSegment( float x1, float y1, float x2, float y2, float displace )
{
if (displace <=m_pTexture->getPixelsWide()/ )
{
m_vecLightningTrackPoint.push_back(ccp(x2,y2));
}
else
{
float mid_x = (x2+x1)/;
float mid_y = (y2+y1)/;
mid_x += (CCRANDOM_0_1() - 0.5) * displace;
mid_y += (CCRANDOM_0_1() - 0.5) * displace;
addLightningSegment(x1, y1, mid_x, mid_y, displace/);
addLightningSegment(mid_x, mid_y,x2, y2, displace/);
}
} void Lightning::update(float delta)
{
calculateVertex();
} void Lightning::calculateVertex()
{
m_vecLightningTrackPoint.clear();
m_vecLightningTrackPoint.push_back(CCPointZero);
addLightningSegment(,,m_fLength,,m_fLength/); m_vecVertics.clear();
m_vecCoordinates.clear(); for (size_t i=; i<m_vecLightningTrackPoint.size(); i++)
{
const auto& pt = m_vecLightningTrackPoint[i]; m_vecVertics.push_back(pt.x);
m_vecVertics.push_back(pt.y-m_pTexture->getPixelsHigh()/);
m_vecVertics.push_back(pt.x);
m_vecVertics.push_back(pt.y+m_pTexture->getPixelsHigh()/); m_vecCoordinates.push_back(i);
m_vecCoordinates.push_back();
m_vecCoordinates.push_back(i);
m_vecCoordinates.push_back();
}
} void Lightning::setTexture( cocos2d::CCTexture2D *texture )
{
CC_SAFE_RETAIN(texture);
CC_SAFE_RELEASE(m_pTexture);
m_pTexture = texture;
  ccTexParams params = {GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT};
m_pTexture->setTexParameters(&params);
}

代码下载

cocos2dx 2.x实现闪电效果(贴画版)的更多相关文章

  1. 仿360手机卫士界面效果android版源码

    仿360手机卫士界面效果android版,这个今天一大早在源码天堂的那个网站上看到了一个那个网站最新更新的一个源码,所以就分享给大学习一下吧,布局还挺不错的,而且也很简单的,我就不把我修改的那个分享出 ...

  2. cocos2d-x 2.0 拖尾效果分析

    转自:http://game.dapps.net/gamedev/game-engine/7281.html 在Cocos2d-x中,拖尾效果有一个专门的类CCMotionStreak来实现.下面我们 ...

  3. 【转】Cocos2d-x 2.0 拖尾效果深入分析

    Cocos2d-x 2.0 拖尾效果深入分析 另:本章所用Cocos2d-x版本为: cocos2d-2.0-x-2.0.2@ Aug 30 2012 http://cn.cocos2d-x.org/ ...

  4. 微博发布效果jq版

    大家都看过新浪微博的发状态功能,我模拟了一下类似的效果,包括发布时间,删除效果等.代码如下: <!DOCTYPE HTML> <html> <head> <m ...

  5. Cocos2d-x 水果忍者划痕效果

    网上找的一个关于水果忍者划痕的,效果还算凑合.其原理就是基于OpenGL绘制直线,因为版本号过老,此处笔者改动了一些方法,粘贴后可直接使用 适用于Cocos2d-x 2.2.1 .h文件里须要添�的代 ...

  6. cocos2dx实例开发之flappybird(入门版)

    cocos2dx社区里有个系列博客完整地复制原版flappybird的全部特性.只是那个代码写得比較复杂,新手学习起来有点捉摸不透,这里我写了个简单的版本号.演演示样例如以下: watermark/2 ...

  7. Cocos2d-x实现简单的翻牌效果

    触发器互联网影响找了很多.有自己的点重写一个复杂的sprite类来实现.简单的操作来对引擎的使用CCOrbitCamera实现,但是,也存在一些问题,后变反了. 我在用的仅仅是一个简单的翻牌效果,点击 ...

  8. [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版

    大家好,我是秦培,欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei. 在上一篇文章中,我们通过自己定义着色器实现了一个简单的在3D游戏中选取.显示物体轮廓的实例. 在文章 ...

  9. Cocos2d-x移植android增加震动效果

    cpp部分通过jni调用java静态函数 头文件: #include <jni.h> #include "cocos2d.h" #include "platf ...

随机推荐

  1. Python开发【第十二篇】:DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...

  2. Storm:最火的流式处理框架

    伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样.更加便捷,同时对于信息的时效性要求也越来越高.举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这 ...

  3. echo '.SUFFIXES: .cpp' >> ${OUTPUT_FILE}

    当前makefile或shell内支持文件后缀的类型列表,意思是文件支持.cpp结尾的类型,并且将他,输出到OUTPUT_FILE函数. 见网上有人说: “makefile中 .SUFFIXES: . ...

  4. TP框架整合Swagger UI接口文档

    1.下载swagger ui:http://swagger.io/swagger-ui/: 2.在应用目录里新建一个目录xxx:如图 3.解压后把dist目录的所有文件拷贝到新建的目录里面: 4.在新 ...

  5. 看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)

    一.Graphviz + CodeViz简单介绍 CodeViz是<Understanding The Linux Virtual Memory Manager>的作者 Mel Gorma ...

  6. elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系

    .plt的作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址 .rel.dyn重定向表,在程序启动时就需要重定位完成. .rel.plt保 ...

  7. redhat 下 rpm 指令

    1.如何安装rpm软件包rmp软件包的安装可以使用程序rpm来完成.执行下面的命令 rpm -i your-package.rpm 其中your-package.rpm是你要安装的rpm包的文件名,一 ...

  8. PHP读取word文档

    在PHP中读取和写入WORD文档的代码 <? php // 建立一个指向新COM组件的索引 $word = new COM(”word.application”) or die(”Can't s ...

  9. Apple Watch已向微信开放WatchKit接口?

    Apple Watch在北京时间凌晨1点的苹果发布会上首次对外公布了,一时间applewatch占据了各大媒体.早上也早早地看了相关新闻,其中福布斯中文网的一则消息分外引起@隔壁W叔叔的注意,“苹果同 ...

  10. Redis的一些坑

    转载请注明出处哈:http://carlosfu.iteye.com/blog/2254154 上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团 ...