FLASH AS3优化文档格式.docx
- 文档编号:16882200
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:30
- 大小:146.86KB
FLASH AS3优化文档格式.docx
《FLASH AS3优化文档格式.docx》由会员分享,可在线阅读,更多相关《FLASH AS3优化文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
每一帧,FlashPlayer更新并且渲染屏幕上的所有元素,同时运行所有的要完成的ActionScript任务。
帧速决定了FlashPlayer在每一帧上该花多长的时间,所以10帧每秒(10fps)的帧速意味着至少每帧100毫秒。
如果所有所需的任务在这样的一个时间段内完成了,那么FlashPlayer会一直等到本帧的剩余时间结束,才会开始下一帧。
另一方面,如果以某一特定的帧速,所有所需的任务需要很高的CPU消耗以致于不能在相应的时间段内完成,那么帧速会自动减缓来获取一些额外的时间。
一旦负荷减轻了,帧速又会自动加上去,返回到原来的设定值。
(在程序父窗口失去焦点或者移动到屏幕边界外面的情况下,FlashPlayer会自动地将帧速减小到4fps。
这样做是确保无论用户的焦点在哪里,都能保护系统资源。
)
所有的这些意味着实际上存在两种帧速:
一种是你最初设置的并且希望你的影片总是以这个速度运行,另外一种是它实际的运行帧速。
我们将称你自己设置的这个帧速叫做目标帧速,而它实际运行的速度称作实际帧速。
图中的CPU负荷是通过实际帧速和目标帧速的比值来进行计算的。
使用到的公式如下:
CPUload=(目标帧速–实际帧速)/实际帧速*100;
例如,如果目标帧速被设为50fps,但是影片实际的帧速为25fps,CPU负荷将会是50%,计算方法是(50-25)/50*100.
请注意这并不是运行这个影片所要使用的系统CPU资源的实际百分比,而是对真实值的一个初略的估计。
对于这里描述的优化过程,这个估计对与手边的任务而言已经是一个很好的度量。
为了可以获取到CPU的实际使用率,可以使用你的操作系统提供的工具。
例如,Windows中的任务管理器,现在看看我的任务管理器,它显示没有优化的影片正使用53%的CPU资源,而影片的图形上却显示CPU负荷为41.7%。
请注意:
本教程中的所有影片截图都是来自我个人电脑上的FlashPlayer版本。
这张图上的数字很可能在你的系统上显示的就不一样了,这主要依据你的操作系统,浏览器以及FlashPlayer版本。
如果你已经在不同的浏览器窗口中或者Flashplayer中打开了其它的Flash应用程序,那么在某些系统上它也可能影响到内存的使用大小。
当分析你的程序的性能时,一定要确保没有其它的Flash程序正在运行,因为它们可能影响到你的度量。
对于CPU负荷而言,影片无论什么时候移动到了屏幕的边界之外,它的值就会飙升到90%。
例如,如果你切换到另外一个浏览器或者将这一页往下翻,这是由更低的帧速造成的。
更低的帧速不是由需要消耗大量CPU资源的任务造成的,而是无论什么时候,当该应用程序不在你的视野之内时,Flash就会压制帧速。
第2步:
这些代码会让我的Flash工程变得更庞大吗?
这个影片的源代码在下面展示出来了并且只包含了一个类,类名叫做Flames,这个类也是文档类。
这个类包含了一组的属性来跟踪这个影片的内存以及CPU负荷历史,跟踪到的数据用来绘制图形。
内存和CPU负荷的统计信息是在Flames.getStatus()方法中计算并且更新的,图形是通过调用Flames.drawGraph()方法来进行绘制的。
为了创建这个火焰效果,Flames.createParticles()方法首先每秒生成成百上千个粒子,这些粒子存放在fireParticles数组中,这个数组在Flames.drawParticles()方法中进行循环,利用每个粒子的属性来创建这个效果。
花一些时间来学习这个Flames类,你是否已经能找到一些快速的改变,而这些改变对程序的优化有很大的帮助呢?
1packagecom.pjtops{
2importflash.display.MovieClip;
3importflash.events.Event;
4importfl.motion.Color;
5importflash.geom.Point;
6importflash.geom.Rectangle;
7importflash.text.TextField;
8importflash.system.System;
9importflash.utils.getTimer;
10
11publicclassFlamesextendsMovieClip{
12
13privatevarmemoryLog=newArray();
//storesSystem.totalMemoryvaluesfordisplayinthegraph
14privatevarmemoryMax=0;
//thehighestvalueofSystem.totalMemoryrecordedsofar
15privatevarmemoryMin=0;
//thelowestvalueofSystem.totalMemoryrecordedsofar
16privatevarmemoryColor;
//thecolorusedbytextdisplayingmemoryinfo
17
18privatevarticks=0;
//countsthenumberoftimesgetStats()iscalledbeforethenextframeratevalueisset
19privatevarframeRate=0;
//theoriginalframeratevalueassetinAdobeFlash
20privatevarcpuLog=newArray();
//storescpuvaluesfordisplayinthegraph
21privatevarcpuMax=0;
//thehighestcpuvaluerecordedsofar
22privatevarcpuMin=0;
//thelowestcpuvaluerecordedsofar
23privatevarcpuColor;
//thecolorusedbytextdisplayingcpu
24privatevarcpu;
//thecurrentcalculatedcpuuse
25
26privatevarlastUpdate=0;
//thelasttimetheframeratewascalculated
27privatevarsampleSize=30;
//thelengthofmemoryLog&
cpuLog
28privatevargraphHeight;
29privatevargraphWidth;
30
31privatevarfireParticles=newArray();
//storesallactiveflameparticles
32privatevarfireMC=newMovieClip();
//thecanvasfordrawingtheflames
33privatevarpalette=newArray();
//storesallavailablecolorsfortheflameparticles
34privatevaranchors=newArray();
//storeshorizontalpointsalongfireMCwhichactlikemagnetstotheparticles
35privatevarframe;
//themovieclipsboundingbox
36
37//classconstructor.Setupalltheevents,timersandobjects
38publicfunctionFlames(){
39addChildAt(fireMC,1);
40frame=newRectangle(2,2,stage.stageWidth-2,stage.stageHeight-2);
41
42varcolWidth=Math.floor(frame.width/10);
43for(vari=0;
i<
10;
i++){
44anchors[i]=Math.floor(i*colWidth);
45}
46
47setPalette();
48
49memoryColor=memoryTF.textColor;
50cpuColor=cpuTF.textColor;
51graphHeight=graphMC.height;
52graphWidth=graphMC.width;
53
54frameRate=stage.frameRate;
55
56addEventListener(Event.ENTER_FRAME,drawParticles);
57addEventListener(Event.ENTER_FRAME,getStats);
58addEventListener(Event.ENTER_FRAME,drawGraph);
59}
60
61//createsacollectionofcolorsfortheflameparticles,andstorestheminpalette
62privatefunctionsetPalette(){
63varblack=0x000000;
64varblue=0x0000FF;
65varred=0xFF0000;
66varorange=0xFF7F00;
67varyellow=0xFFFF00;
68varwhite=0xFFFFFF;
69palette=palette.concat(getColorRange(black,blue,10));
70palette=palette.concat(getColorRange(blue,red,30));
71palette=palette.concat(getColorRange(red,orange,20));
72palette=palette.concat(getColorRange(orange,yellow,20));
73palette=palette.concat(getColorRange(yellow,white,20));
74}
75
76//returnsacollectionofcolors,madefromdifferentmixesofcolor1andcolor2
77privatefunctiongetColorRange(color1,color2,steps){
78varoutput=newArray();
79for(vari=0;
steps;
80varprogress=i/steps;
81varcolor=Color.interpolateColor(color1,color2,progress);
82output.push(color);
83}
84returnoutput;
85}
86
87//calculatesstatisticsforthecurrentstateoftheapplication,intermsofmemoryusedandthecpu%
88privatefunctiongetStats(event){
89ticks++;
90varnow=getTimer();
91
92if(now-lastUpdate<
1000){
93return;
94}else{
95lastUpdate=now;
96}
97
98cpu=100-ticks/frameRate*100;
99cpuLog.push(cpu);
100ticks=0;
101cpuTF.text=cpu.toFixed
(1)+'
%'
;
102if(cpu>
cpuMax){
103cpuMax=cpu;
104cpuMaxTF.text=cpuTF.text;
105}
106if(cpu<
cpuMin||cpuMin==0){
107cpuMin=cpu;
108cpuMinTF.text=cpuTF.text;
109}
110
111varmemory=System.totalMemory/1000000;
112memoryLog.push(memory);
113memoryTF.text=String(memory.toFixed
(1))+'
mb'
114if(memory>
memoryMax){
115memoryMax=memory;
116memoryMaxTF.text=memoryTF.text;
117}
118if(memory<
memoryMin||memoryMin==0){
119memoryMin=memory;
120memoryMinTF.text=memoryTF.text;
121}
122}
123
124//render'
sagraphonscreen,thatshowstrendsintheapplicationsframerateandmemoryconsumption
125privatefunctiondrawGraph(event){
126graphMC.graphics.clear();
127varypoint,xpoint;
128varlogSize=memoryLog.length;
129
130if(logSize>
sampleSize){
131memoryLog.shift();
132cpuLog.shift();
133logSize=sampleSize;
134}
135varwidthRatio=graphMC.width/logSize;
136
137graphMC.graphics.lineStyle(3,memoryColor,0.9);
138varmemoryRange=memoryMax-memoryMin;
139for(vari=0;
memoryLog.length;
140ypoint=(memoryLog[i]-memoryMin)/memoryRange*graphHeight;
141xpoint=(i/sampleSize)*graphWidth;
142if(i==0){
143graphMC.graphics.moveTo(xpoint,-ypoint);
144continue;
145}
146graphMC.graphics.lineTo(xpoint,-ypoint);
147}
148
149graphMC.graphics.lineStyle(3,cpuColor,0.9);
150for(varj=0;
j<
cpuLog.length;
j++){
151ypoint=cpuLog[j]/100*graphHeight;
152xpoint=(j/sampleSize)*graphWidth;
153if(j==0){
154graphMC.graphics.moveTo(xpoint,-ypoint);
155continue;
156}
157graphMC.graphics.lineTo(xpoint,-ypoint);
158}
159}
160
161//renderseachflameparticleandupdatesit'
svalues
162privatefunctiondrawParticles(event){
163createParticles(20);
164
165fireMC.graphics.clear();
166for(variinfireParticles){
167varparticle=fireParticles[i];
168
169if(particle.life==0){
170delete(fireParticles[i]);
171continue;
172}
173
174varsize=Math.floor(particle.size*particle.life/100);
175varcolor=palette[particle.life];
176vartransperency=0.3;
177
178if(size<
3){
179size*=3;
180color=0x333333;
181particle.x+=Math.random()*8-4;
182particle.y-=2;
183transperency=0.2;
184}else{
185particle.y=frame.bottom-(100-particle.life);
186
187if(particle.life>
90){
188size*=1.5;
189}elseif(particle.life>
45){
190particle.x+=Math.floor(Math.random()*6-3);
191size*=1.2;
192}else{
193transperency=0.1;
194size*=0.3;
195particle.x+=Math.floor(Math.random()*4-2);
196}
197}
198
199fireMC.graphics.lineStyle(5,color,0.1);
200fireMC.graphics.beginFill(color,transperency);
201fireMC.graphics.drawCircle(particle.x,particle.y,size);
202fireMC.graphics.endFill();
203particle.life--;
204}
205}
206
207//generatesflameparticleobjects
208privatefunctioncreateParticles(count){
209varanchorPoint=0;
210for(vari=0;
count;
i++){
211varparticle=newObject();
212particle.x=Math.floor(Math.random()*frame.width/10)+anchors[anchorPoint];
213particle.y=frame.bottom;
214part
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FLASH AS3优化 AS3 优化