cocos2dx 2.x实现闪电效果(贴画版)
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(¶ms);
}
cocos2dx 2.x实现闪电效果(贴画版)的更多相关文章
- 仿360手机卫士界面效果android版源码
仿360手机卫士界面效果android版,这个今天一大早在源码天堂的那个网站上看到了一个那个网站最新更新的一个源码,所以就分享给大学习一下吧,布局还挺不错的,而且也很简单的,我就不把我修改的那个分享出 ...
- cocos2d-x 2.0 拖尾效果分析
转自:http://game.dapps.net/gamedev/game-engine/7281.html 在Cocos2d-x中,拖尾效果有一个专门的类CCMotionStreak来实现.下面我们 ...
- 【转】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/ ...
- 微博发布效果jq版
大家都看过新浪微博的发状态功能,我模拟了一下类似的效果,包括发布时间,删除效果等.代码如下: <!DOCTYPE HTML> <html> <head> <m ...
- Cocos2d-x 水果忍者划痕效果
网上找的一个关于水果忍者划痕的,效果还算凑合.其原理就是基于OpenGL绘制直线,因为版本号过老,此处笔者改动了一些方法,粘贴后可直接使用 适用于Cocos2d-x 2.2.1 .h文件里须要添�的代 ...
- cocos2dx实例开发之flappybird(入门版)
cocos2dx社区里有个系列博客完整地复制原版flappybird的全部特性.只是那个代码写得比較复杂,新手学习起来有点捉摸不透,这里我写了个简单的版本号.演演示样例如以下: watermark/2 ...
- Cocos2d-x实现简单的翻牌效果
触发器互联网影响找了很多.有自己的点重写一个复杂的sprite类来实现.简单的操作来对引擎的使用CCOrbitCamera实现,但是,也存在一些问题,后变反了. 我在用的仅仅是一个简单的翻牌效果,点击 ...
- [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版
大家好,我是秦培,欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei. 在上一篇文章中,我们通过自己定义着色器实现了一个简单的在3D游戏中选取.显示物体轮廓的实例. 在文章 ...
- Cocos2d-x移植android增加震动效果
cpp部分通过jni调用java静态函数 头文件: #include <jni.h> #include "cocos2d.h" #include "platf ...
随机推荐
- Mysql利用mysql_multi配置一台主机多个实例(转)
在Mysql官方帮助文档中,详细记录中Mysql的启动方式,有mysqld_safe.mysql.server.mysql_multi这三种.关于mysql_multi的介绍: Mysqld_mult ...
- 使用ab压测网页结果分析
使用ab压测网页结果分析 下载工具:ab 图片来自:http://my.oschina.net/u/1246814/blog/291696?fromerr=JfLeu1jk
- 【帖子】怎么彻底删除kafka的topic,然后重建?
怎么彻底删除kafka的topic,然后重建? 网上都说用kafka-run-class.shkafka.admin.DeleteTopicCommand 命令删除topic,但是并没有成功,用kaf ...
- html 等页面防止中文出现乱码的终极解决方案
网页UTF-8中文乱码问题解决方法 网页UTF-8中文乱码问题解决方法只有经过多方面测试的东西才有质量的保证和说服力,之前一直都是在本地做开发,经过本地测试也是通过的,但一发布到远程服务器上就问题百出 ...
- jdk的安装及配置
前几天重新了下系统,所以JDK也要重新安装,顺带温故了安装及配置的过程,记录下来.(安装的版本是JDK1.7.0) 后面基本都是点下一步(i第一步选:开发工具),路径我改为E:/java/jdk 1. ...
- 使用MVVM框架(avalonJS)进行快速开发
背景 在运营活动开发中,因为工作的重复性很大,同时往往开发时间短,某些情况下也会非常紧急,导致了活动开发时间被大大压缩,同时有些活动逻辑复杂,数据或者状态变更都需要手动渲染,容易出错,正是因为这些问题 ...
- activti表结构
1.结构设计 1.1. 逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...
- MySQL源码分析以及目录结构 2
原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...
- OS X Framework Library not loaded: 'Image not found'的解决办法
参考:OS X Framework Library not loaded: 'Image not found' 1.首先将相应的framework手动复制到/System/Library/Framew ...
- VIM使用学习笔记 : 按键说明
VIM有三种模式: 一般模式 上下左右移动光标,删除字符或删除整行,复制粘贴 编辑模式 i I i O a A r R 进入编辑模式 命令模式 在一般模式种输入 : / ?,可 ...