查看原图(大图)
鼠标按下时候生成200个粒子粒子向区别方向移动从而产生种像仙女散花感觉
下面是散开效果同样你可以为你效果添加很多元素包括引力重力摩擦力等等情况但这部分就靠自己还是需要自己想法出来
查看原图(大图)
简单做法代码很少涉及到运动方向做法效果看起来让我觉得惊讶不过换来代价是卡卡卡当我尝试换成1000个粒子时候
则会产生很多问题是由于生成对象太多了内存占用率很高你可以测试下生成效果很不错
基本思路:鼠标按下--生成定数量粒子粒子按随机方向行走行走定时候就需要立刻对其删除否则会产生内存问题
看看下面代码做法很简单只是觉得有种不错想法暂时先把他记录下来
粒子随机轨迹角度则需要通过Math.atan2 进行计算在flash里面这个思路方法可以为运动学创造带来很多方便有兴趣可以去测试下
其中:Ball 为通过库链接链接过来影片剪辑因此在创建这个时候可以在元件库里面 自行添加进去尝试更改粒子样貌这样效果会呈现出区别形态
这个只是个元件缩放元件大小产生效果也不样周边白色边加上些高光效果就能够发挥出不错夜光性
再对其进行修正粒子轨迹也可以是不按随机也可以按随机方向这样区别做法效果看起来会更加不错相信你会创建出很多很多绚丽特效而这些事情就需要去完善
1. package
2. {
3.
4.
5. import flash.display.MovieClip;
6. import flash.display.DisplayObject;
7. import flash.events.*;
8.
9. public Main extends MovieClip
10. {
11.
12. //private var list:Array= Array;//管理粒子
13. //private var speed:=5;
14. private var contain:MovieClip= MovieClip;//容器管理粒子
15. public function Main
16. {
17. init;
18. }
19. private function init:void
20. {
21. addChild(contain);
22. stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);
23. }
24. //生成粒子200个小球然后向区别方向移动速度不样角度也不样
25. private function MouseDownHandler(event:MouseEvent):void
26. {
27. for (var i:=0; i<200; i)
28. {
29. var ball:Ball= Ball;
30. contain.addChild(ball);
31. ball.x=mouseX;
32. ball.y=mouseY;
33. ball.vx=Math.random*4+2;//随机生成区别x速度
34. ball.vy=Math.random*5+2;//随机生成区别y速度
35. //ball.alpha=Math.random+0.1;
36. var angle:Number=Math.atan2(Math.random*400-ball.y,Math.random*550-ball.x);//随机个角度
37. ball.angle=angle;
38. ball.addEventListener(Event.ENTER_FRAME,BallMove);
39. //list.push(ball);
40. }
41. }
42. //每个粒子移动
43. private function BallMove(event:Event):void
44. {
45. event.currentTarget.xMath.cos(event.currentTarget.angle)*event.currentTarget.vx;
46. event.currentTarget.yMath.sin(event.currentTarget.angle)*event.currentTarget.vy;
47. //drawLine(mouseX,mouseY,event.currentTarget.x,event.currentTarget.y);
48. (event.currentTarget.y<0 || event.currentTarget.y>stage.stageHeight||
49. event.currentTarget.x<0 || event.currentTarget.x>stage.stageWidth
50. )
51. {
52. event.currentTarget.removeEventListener(Event.ENTER_FRAME,BallMove);
53. contain.removeChild(DisplayObject(event.currentTarget));
54. }
55. }
56. //绘制线条这个思路方法你可以尝试下
57. private function drawLine(x1,y1,x2,y2:Number):void
58. {
59. graphics.clear;
60. graphics.lineStyle(1,0xff0000);
61.
62. for (var i:=0; i<=contain.numChildren; i)
63. {
64. graphics.moveTo(x1,y1);
65. graphics.lineTo(contain.getChildAt(i).x,contain.getChildAt(i).y);
66. }
67. }
68. }
69. }
最新评论