flash 绘图API:剑归宗
2010-03-02 00:00:00 来源:WEB开发网下面乱剑一堆哈哈。这一个和之前一篇关于粒子爆效果原理是一样的,采用Math.atan2的方法处理运动方面很多角度问题。应用很广泛
第四步:对剑的分布进行改造
有时候可以改变对图形的分布位置也能够创造出不一样的东西。采用圆 采用二维矩阵,都可以实现到。
下面是另外一个版本,采用的复制的手法不一样,有时候采用
循环能够一次性看到全貌,但是有时候采用时间错开,会看到不一样的过程。Timer 类能够实现到时间错开的过程。我们可以对其进行改造看看效果如何
timer=new Timer(100);
timer.addEventListener(TimerEvent.TIMER,onTimer);
private function onTimer(event:TimerEvent):void
{
按时间间隔创建对象,能够看到创建的过程。
}
查看原图(大图)
下面为代码清单。
1. package
2. {
3. //剑归宗
4.
5. import flash.display.Sprite;
6. import flash.events.*;
7. import flash.display.DisplayObject;
8. import flash.utils.Timer;
9. import flash.geom.Point;
10.
11. public class Main extends Sprite
12. {
13. private var list:Array=new Array();
14. private var Speed:int=10;//飞行速度
15. private var contain:Sprite=new Sprite();
16. private var num:int=20;
17. private var timer:Timer;
18. private var count:int=-1;
19. private var key:Boolean=true;
20. private var key2:Boolean=true;
21. private var point:Point;//记录鼠标一个点
22. public function Main()
23. {
24. addChild(contain);
25. stage.addEventListener(MouseEvent.CLICK,onClick);
26. timer=new Timer(100);
27. timer.addEventListener(TimerEvent.TIMER,onTimer);
28. }
29. private function onTimer(event:TimerEvent):void
30. {
31. count++;
32. var mysword:Sword=new Sword();
33. contain.addChild(mysword);
34. //mysword.x=point.x+Math.cos(count*2*Math.PI/num)*150;
35. //mysword.y=point.y+Math.sin(count*2*Math.PI/num)*150;
36. mysword.x=50+Math.random()*60;
37. mysword.y=(count+1)*20;
38. list.push(mysword);
39. var angle:Number=Math.atan2(point.y-mysword.y,point.x-mysword.x);//角度
40. mysword.angle=angle;
41. //mysword.rotation=angle*180/Math.PI-90;
42. mysword.rotation=-90;
43. if (count==num)
44. {
45. timer.stop();
46. key=true;
47. count=-1;
48. point=null;
49. for (var i:int=0; i<=num; i++)
50. {
51. list[i].addEventListener(Event.ENTER_FRAME,Run);//进行运动
52. }
53. }
54. }
55. //创建一把剑
56. private function onClick(event:MouseEvent):void
57. {
58. if (key)
59. {
60. while (list.length>0)
61. {
62. list.pop();
63. }
64. timer.start();
65. key=false;
66. point=new Point(event.localX ,event.localY);//记录坐标点的位置
67. }
68. //for (var i:int=0; i<num; i++)
69. //{
70. //var mysword:Sword=new Sword();
71. //contain.addChild(mysword);
72. //mysword.x=mouseX+Math.cos(i*2*Math.PI/num)*150;
73. //mysword.y=mouseY+Math.sin(i*2*Math.PI/num)*150;
74. //list.push(mysword);
75. //var angle:Number=Math.atan2(mouseY-mysword.y,mouseX-mysword.x);//角度
76. //mysword.angle=angle;
77. //mysword.rotation=angle*180/Math.PI-90;
78. //mysword.addEventListener(Event.ENTER_FRAME,Run);//进行运动
79. //}
80.
81. }
82. //运动
83. private function Run(event:Event):void
84. {
85. var vx:Number=Math.cos(event.currentTarget.angle)*Speed;
86. var vy:Number=Math.sin(event.currentTarget.angle)*Speed;
87. event.currentTarget.x+=vx;
88. event.currentTarget.y+=vy;
89. if (event.currentTarget.x>stage.stageWidth||event.currentTarget.x<0||event.currentTarget.y<0||
90. event.currentTarget.y>stage.stageHeight
91. )
92. {
93. if (event.currentTarget!=null)
94. {
95. event.currentTarget.removeEventListener(Event.ENTER_FRAME,Run);
96. contain.removeChild(DisplayObject(event.currentTarget));
97. }
98. }
99. }
100. }
101. }
102.
103. import flash.display.Sprite;
104. //描绘一把剑
105. internal class Sword extends Sprite
106. {
107. private var pen:Sprite=new Sprite();
108. public var angle:Number=0;
109. private var array:Array=[ [50,0],
110. [50,50],
111. [20,50],
112. [20,60],
113. [45,60],
114. [45,300],
115. [65,330],
116. [75,300],
117. [75,60],
118. [105,60],
119. [105,50],
120. [70,50],
121. [70,0],
122. [50,0]
123. ];
124. public function Sword()
125. {
126. init();
127. }
128. private function init():void
129. {
130. addChild(pen);
131. pen.graphics.lineStyle(1,0xffffff);
132. pen.graphics.moveTo(array[0][0],array[0][1]);
133. for (var i:int=0; i<array.length; i++)
134. {
135. pen.graphics.lineTo(array[i][0],array[i][1]);
136. }
137. pen.graphics.drawCircle(60,-11,12);//绘制剑中心
138. pen.graphics.drawCircle(60,60,14);
139. pen.graphics.beginFill(0xff00ff);
140. pen.graphics.drawCircle(60,60,5);
141. pen.graphics.endFill();
142. pen.graphics.moveTo(60,60);
143. pen.graphics.lineTo(65,330);
144. pen.scaleX=pen.scaleY=0.3;
145. }
146. }
- ››FLASH不等于运算符!=的使用实例
- ››FLASH不全等运算符!==
- ››FLASH字符串分隔符运算符
- ››FLASH% 模运算符
- ››Flash+、++、+= 加法运算符
- ››Flash, 逗号运算符
- ››flash中的-、--、-=减法运算符
- ››Flash的-Infinity 常数、.点运算符、/ 除法运算符...
- ››Flash两种注释方法/*..*/ 和// 注释行分隔符运算符...
- ››Flash的/=除法赋值运算符、=赋值运算符、== 等于运...
- ››Flash之?: 条件运算符、^ 按位 XOR 运算符、^= 按...
- ››Flash的_framesloaded代码示例
更多精彩
赞助商链接