ActionScript 3的 - AS3闪电/雷电/放电类

最后,我们来了!

最近有些延迟,是啊,我最近有很多的工作。

我已经准备了三个演示和发布(但远非完美的并且尚未记录)。的演示是FLA的...你可以找到时间轴代码在这篇文章后半部分和演示。在接下来的日子里,我会发布一些文件,所以直到那时只是看的演示代码unserstand之类的基本使用。

下载闪电

演示N°1:
该演示展示了两种不同的行为的类可以模仿:放电/或闪电。拖动球或近或远的线圈,看到不同的行为。


单击“开始”

演示N°2:
本演示展示的最大长度和maxLengthVary的性能。
将手指靠近插头有连续的电力。带来的手远离插头放电的概率降低。实现最大距离简单地将其关闭。


单击“开始”

演示N°3:
这个演示是一个很好的发布延迟的理由

一个漂亮的沙箱能直观的演示(一些)属性。

类的递归,能创造出很多的衰减效果。有一对属性能被传递给子对象的子对象。
例如,如果你设置了childrenMaxCount = 6为主要闪电,它有一个最大的6个直接子对象。它的子对象们将有一个childrenMaxCount值依赖的的主实例childrenMaxCount和childrenMaxCountDecay。
所以,如果你设置childrenMaxCount = 6,childrenMaxCountDecay = 0.5子对象们的主实例将有childrenMaxCount的= 3。
如果设置childrenMaxCount = 6,childrenMaxCountDecay = 0时,子对象们的主实例将有childrenMaxCount的的= 6(无衰减)。

此值可以是非常有用的,优化的执行速度会导致更小的分支并不需要很多的子对象或多个步骤的细节。


单击“开始”

好吧,我太累了,写了这么多。在接下来的日子里,我会发布一些文件。

演示的代码后休息。等待您的意见,我会在FatCow的网站,看看他们有什么好的托管计划。

演示代码仅仅是时间安排代码实例和试点的闪电类,很邋遢!请不要责怪

演示N°1:

  1. import com.oaxoa.fx.Lightning;
  2. import com.oaxoa.fx.LightningFadeType;
  3. const cx:uint=360;
  4. const cy:uint=320;
  5. var color:uint=0xffffff;
  6. var ll:Lightning=new Lightning(color, 2);
  7. ll.blendMode=BlendMode.ADD;
  8. ll.childrenDetachedEnd=true;
  9. ll.childrenLifeSpanMin=.1;
  10. ll.childrenLifeSpanMax=2;
  11. ll.childrenMaxCount=4;
  12. ll.childrenMaxCountDecay=.5;
  13. ll.steps=150;
  14. ll.alphaFadeType=LightningFadeType.TIP_TO_END;
  15. ball.useHandCursor=ball.buttonMode=true;
  16. dot1.mouseEnabled=dot2.mouseEnabled=false;
  17. dot1.alpha=.75;
  18. var glow:GlowFilter=new GlowFilter();
  19. glow.color=color;
  20. glow.strength=3.5;
  21. glow.quality=3;
  22. glow.blurX=glow.blurY=10;
  23. ll.filters=dot1.filters=dot2.filters=[glow];
  24. addChild(ll);
  25. ll.childrenProbability=.3;
  26. var p:Point=new Point();
  27. randomizePoint();
  28. function randomizePoint():void {
  29.         var angle:Number=-Math.random()*Math.PI;
  30.         var dist:Number=160+Math.random()*180;
  31.         p.x=cx+Math.cos(angle)*dist;
  32.         p.y=cy+Math.sin(angle)*dist;
  33. }
  34. addEventListener(Event.ENTER_FRAME, onframe);
  35. function onframe(event:Event):void {
  36.         
  37.         var rnd:Number=Math.random();
  38.         if(rnd<.05) randomizePoint();
  39.         var dx:Number=cx-ball.x;
  40.         var dy:Number=cy-ball.y;
  41.         var d:Number=Math.sqrt(dx*dx+dy*dy);
  42.         if(d<310) {
  43.                 dot2.visible=true;
  44.                 if(ll.childrenDetachedEnd) {
  45.                         ll.childrenDetachedEnd=false;
  46.                         ll.alphaFadeType=LightningFadeType.GENERATION;
  47.                         ll.killAllChildren();
  48.                 }
  49.                 
  50.                 ll.endX=dot2.x=ball.x;
  51.                 ll.endY=dot2.y=ball.y;
  52.         } else {
  53.                 dot2.visible=false;
  54.                 if(!ll.childrenDetachedEnd) {
  55.                         ll.childrenDetachedEnd=true;
  56.                         ll.alphaFadeType=LightningFadeType.TIP_TO_END;
  57.                         ll.killAllChildren();
  58.                 }
  59.                 ll.endX=p.x;
  60.                 ll.endY=p.y;
  61.         }
  62.         var ddx:Number=cx-ll.endX;
  63.         var ddy:Number=cy-ll.endY;
  64.         var aangle:Number=Math.atan2(ddy, ddx);
  65.         ll.startX=cx-Math.cos(aangle)*80;
  66.         dot1.scaleX=Math.sin(aangle);
  67.         ll.startY=cy;
  68.         dot1.x=ll.startX;
  69.         dot1.y=ll.startY;
  70.         ll.update();
  71. }
  72. ball.addEventListener(MouseEvent.MOUSE_DOWN, onmdown);
  73. function onmdown(event:MouseEvent):void {
  74.         ball.startDrag();
  75. }
  76. ball.addEventListener(MouseEvent.MOUSE_UP, onmup);
  77. function onmup(event:MouseEvent):void {
  78.         ball.stopDrag();
  79. }
复制代码

演示N°2: 

  1. import com.oaxoa.fx.Lightning;
  2. import com.oaxoa.fx.LightningFadeType;
  3. setChildIndex(fingers, 2);
  4. var iy:Number=fingers.y;
  5. addEventListener(MouseEvent.MOUSE_MOVE, onmove);
  6. fingers.x=fingers.y/2.5-10;
  7. function updatePositions():void {
  8.         ll.endX=fingers.x+fingers.dot1.x;
  9.         ll.endY=fingers.y+fingers.dot1.y;
  10.         ll2.endX=fingers.x+fingers.dot2.x;
  11.         ll2.endY=fingers.y+fingers.dot2.y;
  12. }
  13. function onmove(event:MouseEvent):void {
  14.         fingers.y=mouseY-150;
  15.         if(fingers.y320) fingers.y=320;
  16.         fingers.x=fingers.y/2.5-10;
  17.         updatePositions();
  18.         event.updateAfterEvent();
  19. }
  20. addEventListener(Event.ENTER_FRAME, onframe);
  21. function onframe(event:Event):void {
  22.         ll.update();
  23.         ll2.update();
  24. }
  25. var color:uint=0xddeeff;
  26. var ll:Lightning=new Lightning(color, 2);
  27. var ll2:Lightning=new Lightning(color, 2);
  28. ll.blendMode=ll2.blendMode=BlendMode.ADD;
  29. ll.childrenProbability=ll2.childrenProbability=.5;
  30. ll.childrenLifeSpanMin=ll2.childrenLifeSpanMin=.1;
  31. ll.childrenLifeSpanMax=ll2.childrenLifeSpanMax=2;
  32. ll.maxLength=ll2.maxLength=50;
  33. ll.maxLengthVary=ll2.maxLengthVary=200;
  34. ll.startX=dot3.x;
  35. ll.startY=dot3.y;
  36. ll2.startX=dot4.x;
  37. ll2.startY=dot4.y;
  38. var glow:GlowFilter=new GlowFilter();
  39. glow.color=color;
  40. glow.strength=3.5;
  41. glow.quality=3;
  42. glow.blurX=glow.blurY=10;
  43. ll.filters=ll2.filters=[glow];
  44. addChild(ll);
  45. addChild(ll2);
  46. updatePositions();
复制代码

演示N°3: 
(一堆随机的代码行书面,非常丑陋)
 

  1. import com.oaxoa.fx.Lightning;
  2. import com.oaxoa.fx.LightningFadeType;
  3. import com.oaxoa.components.ToolTip;
  4. import fl.controls.Button;
  5. import fl.data.DataProvider;
  6. import fl.events.SliderEvent;
  7. var color:uint=0xffffff;
  8. var ll:Lightning=new Lightning(color, 2);
  9. ll.blendMode=BlendMode.ADD;
  10. var glow:GlowFilter=new GlowFilter();
  11. glow.color=color;
  12. glow.strength=4;
  13. glow.quality=3;
  14. glow.blurX=glow.blurY=10;
  15. ll.filters=[glow];
  16. addChild(ll);
  17. ll.startX=cross1.x;
  18. ll.startY=cross1.y;
  19. ll.endX=cross2.x;
  20. ll.endY=cross2.y;
  21. setChildIndex(ll,0);
  22. ll.childrenMaxGenerations=3;
  23. ll.childrenMaxCountDecay=.5;
  24. addEventListener(Event.ENTER_FRAME, onframe);
  25. function onframe(event:Event):void {
  26.         ll.startX=cross1.x;
  27.         ll.startY=cross1.y;
  28.         
  29.         ll.endX=cross2.x;
  30.         ll.endY=cross2.y;
  31.         ll.update();
  32.         updateCircles();
  33. }
  34. import com.oaxoa.components.FrameRater;
  35. var fr:FrameRater=new FrameRater(0xffffff, true);
  36. addChild(fr);
  37. var ttip:ToolTip=new ToolTip();
  38. addChild(ttip);
  39. var tfmt:TextFormat=new TextFormat("_sans", 11, 0xffffff);
  40. cb0.addItem({label:"Choose a preset", value:0});
  41. cb0.addItem({label:"Fast discharge", value:1});
  42. cb0.addItem({label:"Fast discharge (Max length + max length variation)", value:2});
  43. cb0.addItem({label:"Fast discharge (slow-motion)", value:3});
  44. cb0.addItem({label:"Moving Thunderbolt", value:4});
  45. cb0.addItem({label:"Moving Thunderbolt (Max length + max length variation)", value:5});
  46. cb0.selectedIndex=0;
  47. cb0.addEventListener(Event.CHANGE, oncb);
  48. cb0.textField.setStyle("textFormat", tfmt);
  49. cb0.dropdown.setRendererStyle("textFormat", tfmt);
  50. cb1.addItem({label:"Discharge", value:false});
  51. cb1.addItem({label:"Lightning (detached end)", value:true});
  52. cb1.selectedIndex=1;
  53. cb1.addEventListener(Event.CHANGE, oncb);
  54. cb1.textField.setStyle("textFormat", tfmt);
  55. cb1.dropdown.setRendererStyle("textFormat", tfmt);
  56. cb2.addItem({label:"None", value:LightningFadeType.NONE});
  57. cb2.addItem({label:"Generation", value:LightningFadeType.GENERATION});
  58. cb2.addItem({label:"Tip to end", value:LightningFadeType.TIP_TO_END});
  59. cb2.selectedIndex=2;
  60. cb2.addEventListener(Event.CHANGE, oncb);
  61. cb2.textField.setStyle("textFormat", tfmt);
  62. cb2.dropdown.setRendererStyle("textFormat", tfmt);
  63. cb3.addItem({label:"None", value:LightningFadeType.NONE});
  64. cb3.addItem({label:"Generation", value:LightningFadeType.GENERATION});
  65. cb3.addItem({label:"Tip to end", value:LightningFadeType.TIP_TO_END});
  66. cb3.selectedIndex=2;
  67. cb3.addEventListener(Event.CHANGE, oncb);
  68. cb3.textField.setStyle("textFormat", tfmt);
  69. cb3.dropdown.setRendererStyle("textFormat", tfmt);
  70. function oncb(event:Event):void {
  71.         var t:ComboBox=event.currentTarget as ComboBox;
  72.         switch(t) {
  73.                 case cb0:
  74.                         setPreset(t.selectedItem.value);
  75.                         break;
  76.                 case cb1:
  77.                         ll.childrenDetachedEnd=t.selectedItem.value;
  78.                         ll.killAllChildren();
  79.                         break;
  80.                 case cb2:
  81.                         ll.alphaFadeType=t.selectedItem.value;
  82.                         ll.killAllChildren();
  83.                         break;
  84.                 case cb3:
  85.                         ll.thicknessFadeType=t.selectedItem.value;
  86.                         ll.killAllChildren();
  87.                         break;
  88.         }
  89. }
  90. slider.addEventListener(SliderEvent.CHANGE, onslider);
  91. slider2.addEventListener(SliderEvent.CHANGE, onslider);
  92. slider3.addEventListener(SliderEvent.CHANGE, onslider);
  93. slider4.addEventListener(SliderEvent.CHANGE, onslider);
  94. slider5.addEventListener(SliderEvent.CHANGE, onslider);
  95. slider6.addEventListener(SliderEvent.CHANGE, onslider);
  96. slider7.addEventListener(SliderEvent.CHANGE, onslider);
  97. slider8.addEventListener(SliderEvent.CHANGE, onslider);
  98. slider9.addEventListener(SliderEvent.CHANGE, onslider);
  99. slider10.addEventListener(SliderEvent.CHANGE, onslider);
  100. slider11.addEventListener(SliderEvent.CHANGE, onslider);
  101. slider12.addEventListener(SliderEvent.CHANGE, onslider);
  102. slider13.addEventListener(SliderEvent.CHANGE, onslider);
  103. function onslider(event:SliderEvent):void {
  104.         var t:Slider=event.currentTarget as Slider;
  105.         ttip.show(t.value.toString());
  106.         ttip.y=t.y-30;
  107.         switch(t) {
  108.                 case slider:
  109.                         ll.smoothPercentage=t.value;
  110.                         break;
  111.                 case slider2:
  112.                         ll.childrenAngleVariation=t.value;
  113.                         break;
  114.                 case slider3:
  115.                         ll.childrenMaxCount=t.value;
  116.                         break;
  117.                 case slider4:
  118.                         ll.wavelength=t.value;
  119.                         break;
  120.                 case slider5:
  121.                         ll.amplitude=t.value;
  122.                         break;
  123.                 case slider6:
  124.                         ll.speed=t.value;
  125.                         break;
  126.                 case slider7:
  127.                         ll.thickness=t.value;
  128.                         ll.killAllChildren();
  129.                         break;
  130.                 case slider8:
  131.                         ll.maxLength=t.value;
  132.                         break;
  133.                 case slider9:
  134.                         ll.maxLengthVary=t.value;
  135.                         break;
  136.                 case slider10:
  137.                         ll.childrenProbability=t.value;
  138.                         ll.killAllChildren();
  139.                         break;
  140.                 case slider11:
  141.                         ll.childrenLifeSpanMin=t.value;
  142.                         ll.killAllChildren();
  143.                         if(t.value>slider12.value) slider12.value=t.value;
  144.                         break;
  145.                 case slider12:
  146.                         ll.childrenLifeSpanMax=t.value;
  147.                         ll.killAllChildren();
  148.                         slider11.visible=t.value!=0;
  149.                         break;
  150.                 case slider13:
  151.                         ll.steps=t.value;
  152.                         ll.killAllChildren();
  153.                         break;
  154.         }
  155.         ll.render();
  156. }
  157. function setPreset(n:uint):void {
  158.         switch(n) {
  159.                 // fast discharge
  160.                 case 1:
  161.                         ll.childrenLifeSpanMin=1;
  162.                         ll.childrenLifeSpanMax=3;
  163.                         ll.childrenProbability=1;
  164.                         ll.childrenMaxGenerations=3;
  165.                         ll.childrenMaxCount=4;
  166.                         ll.childrenAngleVariation=110;
  167.                         ll.thickness=2;
  168.                         ll.steps=100;
  169.                         
  170.                         ll.smoothPercentage=50;
  171.                         ll.wavelength=.3;
  172.                         ll.amplitude=.5;
  173.                         ll.speed=.7;
  174.                         ll.maxLength=0;
  175.                         ll.maxLengthVary=0;
  176.                         
  177.                         ll.childrenDetachedEnd=false;
  178.                         cb1.selectedIndex=0;
  179.                         ll.alphaFadeType=LightningFadeType.GENERATION;
  180.                         cb2.selectedIndex=1;
  181.                         ll.thicknessFadeType=LightningFadeType.NONE;
  182.                         cb3.selectedIndex=0;
  183.                         
  184.                         break;
  185.                 // fast discharge (with max length+variation)
  186.                 case 2:
  187.                         ll.childrenLifeSpanMin=1;
  188.                         ll.childrenLifeSpanMax=3;
  189.                         ll.childrenProbability=1;
  190.                         ll.childrenMaxGenerations=3;
  191.                         ll.childrenMaxCount=4;
  192.                         ll.childrenAngleVariation=110;
  193.                         ll.thickness=2;
  194.                         ll.steps=100;
  195.                         
  196.                         ll.smoothPercentage=50;
  197.                         ll.wavelength=.3;
  198.                         ll.amplitude=.5;
  199.                         ll.speed=.7;
  200.                         ll.maxLength=440;
  201.                         ll.maxLengthVary=75;
  202.                         
  203.                         ll.childrenDetachedEnd=false;
  204.                         cb1.selectedIndex=0;
  205.                         ll.alphaFadeType=LightningFadeType.GENERATION;
  206.                         cb2.selectedIndex=1;
  207.                         ll.thicknessFadeType=LightningFadeType.NONE;
  208.                         cb3.selectedIndex=0;
  209.                         
  210.                         break;
  211.                 // fast discharge slowmo
  212.                 case 3:
  213.                         ll.childrenLifeSpanMin=1;
  214.                         ll.childrenLifeSpanMax=3;
  215.                         ll.childrenProbability=1;
  216.                         ll.childrenMaxGenerations=3;
  217.                         ll.childrenMaxCount=4;
  218.                         ll.childrenAngleVariation=110;
  219.                         ll.thickness=2;
  220.                         ll.steps=100;
  221.                         
  222.                         ll.smoothPercentage=50;
  223.                         ll.wavelength=.3;
  224.                         ll.amplitude=.5;
  225.                         ll.speed=.1;
  226.                         ll.maxLength=0;
  227.                         ll.maxLengthVary=0;
  228.                         
  229.                         ll.childrenDetachedEnd=false;
  230.                         cb1.selectedIndex=0;
  231.                         ll.alphaFadeType=LightningFadeType.GENERATION;
  232.                         cb2.selectedIndex=1;
  233.                         ll.thicknessFadeType=LightningFadeType.NONE;
  234.                         cb3.selectedIndex=0;
  235.                         
  236.                         break;
  237.                 // moving thumnder
  238.                 case 4:
  239.                         ll.childrenLifeSpanMin=.1;
  240.                         ll.childrenLifeSpanMax=2;
  241.                         ll.childrenProbability=1;
  242.                         ll.childrenMaxGenerations=3;
  243.                         ll.childrenMaxCount=4;
  244.                         ll.childrenAngleVariation=130;
  245.                         ll.thickness=3;
  246.                         ll.steps=100;
  247.                         
  248.                         ll.smoothPercentage=50;
  249.                         ll.wavelength=.3;
  250.                         ll.amplitude=.5;
  251.                         ll.speed=1;
  252.                         ll.maxLength=0;
  253.                         ll.maxLengthVary=0;
  254.                         
  255.                         ll.childrenDetachedEnd=true;
  256.                         cb1.selectedIndex=1;
  257.                         ll.alphaFadeType=LightningFadeType.TIP_TO_END;
  258.                         cb2.selectedIndex=2;
  259.                         ll.thicknessFadeType=LightningFadeType.GENERATION;
  260.                         cb3.selectedIndex=1;
  261.                         
  262.                         break;
  263.                 case 5:
  264.                         ll.childrenLifeSpanMin=.1;
  265.                         ll.childrenLifeSpanMax=2;
  266.                         ll.childrenProbability=1;
  267.                         ll.childrenMaxGenerations=3;
  268.                         ll.childrenMaxCount=4;
  269.                         ll.childrenAngleVariation=130;
  270.                         ll.thickness=3;
  271.                         ll.steps=100;
  272.                         
  273.                         ll.smoothPercentage=50;
  274.                         ll.wavelength=.3;
  275.                         ll.amplitude=.5;
  276.                         ll.speed=1;
  277.                         ll.maxLength=440;
  278.                         ll.maxLengthVary=75;
  279.                         
  280.                         ll.childrenDetachedEnd=true;
  281.                         cb1.selectedIndex=1;
  282.                         ll.alphaFadeType=LightningFadeType.TIP_TO_END;
  283.                         cb2.selectedIndex=2;
  284.                         ll.thicknessFadeType=LightningFadeType.GENERATION;
  285.                         cb3.selectedIndex=1;
  286.                         
  287.                         break;
  288.         }
  289.         ll.killAllChildren();
  290.         updateSliders();
  291. }
  292. function updateSliders():void {
  293.         slider.value=ll.smoothPercentage;
  294.         slider2.value=ll.childrenAngleVariation;
  295.         slider3.value=ll.childrenMaxCount;
  296.         slider4.value=ll.wavelength;
  297.         slider5.value=ll.amplitude;
  298.         slider6.value=ll.speed;
  299.         slider7.value=ll.thickness;
  300.         slider8.value=ll.maxLength;
  301.         slider9.value=ll.maxLengthVary;
  302.         slider10.value=ll.childrenProbability;
  303.         slider11.value=ll.childrenLifeSpanMin;
  304.         slider12.value=ll.childrenLifeSpanMax;
  305.         slider13.value=ll.steps;
  306. }
  307. ///////////////////
  308. var tf:TextFormat=new TextFormat();
  309. tf.color=0xffffff;
  310. cross1.addEventListener(MouseEvent.MOUSE_UP, onup);
  311. cross1.addEventListener(MouseEvent.MOUSE_DOWN, ondown);
  312. cross2.addEventListener(MouseEvent.MOUSE_UP, onup);
  313. cross2.addEventListener(MouseEvent.MOUSE_DOWN, ondown);
  314. cross1.buttonMode=cross2.buttonMode=cross1.useHandCursor=cross2.useHandCursor=true;
  315. function ondown(event:MouseEvent):void {
  316.         event.currentTarget.alpha=.2;
  317.         event.currentTarget.startDrag();
  318. }
  319. function onup(event:MouseEvent):void {
  320.         event.currentTarget.alpha=1;
  321.         event.currentTarget.stopDrag();
  322. }
  323. var circles:Shape=new Shape();
  324. addChildAt(circles, 0);
  325. function updateCircles():void {
  326.         circles.graphics.clear();
  327.         if(ll.maxLength>0) {
  328.                 circles.graphics.lineStyle(6, 0xffffff, .3);
  329.                 circles.graphics.drawCircle(cross1.x, cross1.y, ll.maxLength);
  330.                 circles.graphics.lineStyle(2, 0xffffff, .4);
  331.                 circles.graphics.drawCircle(cross1.x, cross1.y, ll.maxLength+ll.maxLengthVary);
  332.                 var steps:uint=5;
  333.                 for(var i:uint=1; i
复制代码




原文链接:http://blog.oaxoa.com/2009/07/27/actionscript-3-as3-lightning-thunderbolt-electric-discharge-class/

翻译词数:500

posted on 2013-09-13 10:54  猎妖手  阅读(624)  评论(0编辑  收藏  举报