cocos2dx-3.2 之 闪电效果

前端之家收集整理的这篇文章主要介绍了cocos2dx-3.2 之 闪电效果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


参考闪电特效算法:http://krazydad.com/bestiary/bestiary_lightning.html

算法详细信息可参上述网址


下面直接上代码,这其实就是一个算法问题:

.h文件

  1. #ifndef __HELLO_LIGHTING_H__
  2. #define __HELLO_LIGHTING_H__
  3.  
  4. #include "cocos2d.h"
  5. USING_NS_CC;
  6.  
  7. class HelloLighting : public cocos2d::Layer
  8. {
  9. public:
  10. HelloLighting(void);
  11. ~HelloLighting(void);
  12.  
  13. virtual bool init();
  14. virtual void update(float delta);
  15. static cocos2d::Scene* createScene();
  16.  
  17. CREATE_FUNC(HelloLighting);
  18.  
  19. virtual void draw(cocos2d::Renderer *renderer,const cocos2d::Mat4& transform,uint32_t flags);
  20.  
  21. void drawLighting(float x1,float y1,float x2,float y2,float displace);
  22.  
  23. private:
  24. float curDetail;
  25. Point pos1;
  26. Point pos2;
  27. };
  28.  
  29. #endif //__HELLO_LIGHTING_H__

.cpp文件
  1. #include "HelloLighting.h"
  2.  
  3. HelloLighting::HelloLighting(void)
  4. {
  5. }
  6.  
  7.  
  8. HelloLighting::~HelloLighting(void)
  9. {
  10. }
  11.  
  12. cocos2d::Scene* HelloLighting::createScene()
  13. {
  14. Scene *scene = Scene::create();
  15. HelloLighting *layer = HelloLighting::create();
  16. scene->addChild(layer);
  17. return scene;
  18. }
  19.  
  20. bool HelloLighting::init()
  21. {
  22. if ( !CCLayer::init() )
  23. {
  24. return false;
  25. }
  26. auto winSize = Director::sharedDirector()->getWinSize();
  27.  
  28. pos1 = Point(100,winSize.height/2);
  29. pos2 = Point(winSize.width-100,winSize.height/2);
  30. curDetail = 5;
  31.  
  32. return true;
  33. }
  34.  
  35. void HelloLighting::update( float delta )
  36. {
  37.  
  38. }
  39.  
  40.  
  41.  
  42. void HelloLighting::draw(cocos2d::Renderer *renderer,uint32_t flags)
  43. {
  44. ccDrawColor4B(255,0);
  45. glLineWidth(1);
  46. drawLighting(pos1.x,pos1.y,pos2.x,pos2.y,200); //这里多画几条线就可以看到更多了
  47. }
  48.  
  49. void HelloLighting::drawLighting( float x1,float displace )
  50. {
  51. if (displace < curDetail)
  52. {
  53. ccDrawLine(ccp(x1,y1),ccp(x2,y2));
  54. }
  55. else
  56. {
  57. float mid_x = (x2+x1)/2;
  58. float mid_y = (y2+y1)/2;
  59. mid_x += (CCRANDOM_0_1() - 0.5) * displace;
  60. mid_y += (CCRANDOM_0_1() - 0.5) * displace;
  61. drawLighting(x1,y1,mid_x,mid_y,displace/2);
  62. drawLighting(x2,y2,displace/2);
  63. }
  64. }


直接加载这个场景就可以看到效果了,其实效果图跟运行效果还是有差别的,先来欣赏一下吧!

猜你在找的Cocos2d-x相关文章