- 浏览: 1085064 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://uh.9ria.com/space.php?uid=109929&do=blog&id=7306
上一篇我已介绍了一优化方法(上篇),这节我们继续.
位图优化
一般最占用内存的部分就是位图,在我开发的MMO游戏中90%以上的的内存是由位图占据的,所以在位图的使用过程序要特别注意,不使用的位图一定要释放掉。在这里我提一些小的建议,以尽量控制位图的内存占用。
1. 能共享位图的尽量共享,具体做法就是用一个BitampData创建多个Bitamp对象。尽量不要去复制BitmapData对象.
2. 将滤镜应用于显示对象时,Flash Player 将在内存中创建两个位图,所以这需要大量内存。所以尽量不要去使用滤镜,一般可以用ps做好滤镜后生成位图给flash来使用.
3. 合理的使用位图缓存.对矢量图形做位图缓存,其实在把矢量图形变成位图,并使用该
位图进行呈现,此会显著提高呈现的性能,但需要占用大量内存。针对复杂的矢量内容使用位图缓存功能。
释放对象
释放对象其实只有一句话,就是不支有对象的引用,包括声音/视频流,socket,件事等等.我最多的一种情况是事件忘记移除导致对象无法回收,这并不是我不知道这一点,而是在写代码时的疏忽。如果你是一个人开发,你可能经常去profile你的代码,可能很容易找出哪个地方没被移除,但是如果你主程或者架构师你手下有很多少人在Coding,你怎么让他不遗忘移除事件呢,下面我来简单介绍一种方法一次性移除所有事件,避免一个一个移除带来的遗漏问题.
一般大家都用EventDispatcher来派发事件.现在我们就对addEventListener进行一个小小的改造即可.
package
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
public class MyEventDispatcher extends EventDispatcher{
private var events:Array
public function MyEventDispatcher(target:IEventDispatcher=null)
{
super(target);
events=[];
}
override public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void{
events.push({type:type,fun:listener})
super.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
override public function removeEventListener (type:String, listener:Function, useCapture:Boolean = false):void{
super. removeEventListener(type,listener, useCapture);
for(var i:int=0;i< ;i++){
if( events[i].type==type && events[i].fun==listenner){
events.splice(i,1)
}
}
}
public function dispose():void{
var ev:Object;
while(events.length){
ev=events.pop();
super.removeEventListener(ev.type,ev.fun);
}
}
}
}
所以你在使用EventDispatcher的地方全部使用MyEventDispatcher即可,在回收之前端调用一下dispose方法,就会内部移除所有事件.
还有很多方法可以做到这一点,以上方法只是一个抛砖引玉.
滥用强制垃圾回收
在Flashplayer debug版本提供了System.gc()接口,可以让虚拟机执行垃圾回收,但是flashplayer 普通用户版是没有这个接口的,于是有人想出使用异常还出发垃圾回收如:
function gc():void{
try{
(new LocalConnection).connect("foo");
(new LocalConnection).connect("foo");
}catch(e){
trace(System.totalMemory);
}
}
当然还有其他方法在这里我就不多举了.
Adobe为什么在普通用户版的flashplayer中取消对System.gc()接口的支持,adobe肯定不希望用户直接去触发垃圾回器,肯定是有理由的,下面我将对这个理由进行的浅薄分析.
垃圾回收器通过查找系统中的相互引用,从而检测出处于非活动状态的对象。将删除通过这种方式检测到的处于非活动状态的对象。也就说他要扫描可能持有对象的的所有变量,这一点所需的代价很大,尤其是在大型项目中.如果你经常去做这样的事,这会大大浪费你的CPU资源.
我做Flash开发已快5年了,我没有什么地方非要用到强制垃圾回收的地方.所以我要在这里提醒广大Flash开发者,在没有特术需求的时候不要使用强制垃圾回收,不要会了腾出一点内存空间而去强制垃圾回收,可能很多时候你是检芝麻丢西瓜,回收器的执行不是普通程序员管的事,Flashplayer会选择最合适的时候去调用.(原本这一节不是我要写的内容,原因是我看到在天地会主页很醒目的位置有一篇《AS3强制内存回收方法之二》,而且受到大家的广泛关注,所以我不想让这篇文章误导了一些新手,以上只是个人见解我希望大家一起讨论这个问题).(上篇)
(此文为原创,如有雷同纯属缘分)
上一篇我已介绍了一优化方法(上篇),这节我们继续.
位图优化
一般最占用内存的部分就是位图,在我开发的MMO游戏中90%以上的的内存是由位图占据的,所以在位图的使用过程序要特别注意,不使用的位图一定要释放掉。在这里我提一些小的建议,以尽量控制位图的内存占用。
1. 能共享位图的尽量共享,具体做法就是用一个BitampData创建多个Bitamp对象。尽量不要去复制BitmapData对象.
2. 将滤镜应用于显示对象时,Flash Player 将在内存中创建两个位图,所以这需要大量内存。所以尽量不要去使用滤镜,一般可以用ps做好滤镜后生成位图给flash来使用.
3. 合理的使用位图缓存.对矢量图形做位图缓存,其实在把矢量图形变成位图,并使用该
位图进行呈现,此会显著提高呈现的性能,但需要占用大量内存。针对复杂的矢量内容使用位图缓存功能。
释放对象
释放对象其实只有一句话,就是不支有对象的引用,包括声音/视频流,socket,件事等等.我最多的一种情况是事件忘记移除导致对象无法回收,这并不是我不知道这一点,而是在写代码时的疏忽。如果你是一个人开发,你可能经常去profile你的代码,可能很容易找出哪个地方没被移除,但是如果你主程或者架构师你手下有很多少人在Coding,你怎么让他不遗忘移除事件呢,下面我来简单介绍一种方法一次性移除所有事件,避免一个一个移除带来的遗漏问题.
一般大家都用EventDispatcher来派发事件.现在我们就对addEventListener进行一个小小的改造即可.
package
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
public class MyEventDispatcher extends EventDispatcher{
private var events:Array
public function MyEventDispatcher(target:IEventDispatcher=null)
{
super(target);
events=[];
}
override public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void{
events.push({type:type,fun:listener})
super.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
override public function removeEventListener (type:String, listener:Function, useCapture:Boolean = false):void{
super. removeEventListener(type,listener, useCapture);
for(var i:int=0;i< ;i++){
if( events[i].type==type && events[i].fun==listenner){
events.splice(i,1)
}
}
}
public function dispose():void{
var ev:Object;
while(events.length){
ev=events.pop();
super.removeEventListener(ev.type,ev.fun);
}
}
}
}
所以你在使用EventDispatcher的地方全部使用MyEventDispatcher即可,在回收之前端调用一下dispose方法,就会内部移除所有事件.
还有很多方法可以做到这一点,以上方法只是一个抛砖引玉.
滥用强制垃圾回收
在Flashplayer debug版本提供了System.gc()接口,可以让虚拟机执行垃圾回收,但是flashplayer 普通用户版是没有这个接口的,于是有人想出使用异常还出发垃圾回收如:
function gc():void{
try{
(new LocalConnection).connect("foo");
(new LocalConnection).connect("foo");
}catch(e){
trace(System.totalMemory);
}
}
当然还有其他方法在这里我就不多举了.
Adobe为什么在普通用户版的flashplayer中取消对System.gc()接口的支持,adobe肯定不希望用户直接去触发垃圾回器,肯定是有理由的,下面我将对这个理由进行的浅薄分析.
垃圾回收器通过查找系统中的相互引用,从而检测出处于非活动状态的对象。将删除通过这种方式检测到的处于非活动状态的对象。也就说他要扫描可能持有对象的的所有变量,这一点所需的代价很大,尤其是在大型项目中.如果你经常去做这样的事,这会大大浪费你的CPU资源.
我做Flash开发已快5年了,我没有什么地方非要用到强制垃圾回收的地方.所以我要在这里提醒广大Flash开发者,在没有特术需求的时候不要使用强制垃圾回收,不要会了腾出一点内存空间而去强制垃圾回收,可能很多时候你是检芝麻丢西瓜,回收器的执行不是普通程序员管的事,Flashplayer会选择最合适的时候去调用.(原本这一节不是我要写的内容,原因是我看到在天地会主页很醒目的位置有一篇《AS3强制内存回收方法之二》,而且受到大家的广泛关注,所以我不想让这篇文章误导了一些新手,以上只是个人见解我希望大家一起讨论这个问题).(上篇)
(此文为原创,如有雷同纯属缘分)
发表评论
-
HttpStatusConfig --一个HTTP 协议返回的 解析说明类
2012-04-18 16:40 0package guwanyuan.qicool.game ... -
HTTP/1.1协议规范(中文归纳版)
2012-04-18 16:39 2113一、介绍(introduction) ... -
[转] [Flash/Flex] 加载SWF性能VS影片剪辑性能
2012-03-15 22:29 0http://bbs.9ria.com/viewthread. ... -
关于富士通windows 7家庭普通板升级为windows 7旗舰版
2012-03-05 14:51 2015windows7普通家庭版不能一下升级到windows7旗舰版 ... -
水果忍者鼠标跟随特效制作[转载]
2012-03-01 16:06 2449实现这效果其实比较简单,主要是思路~! package ... -
请问如何才能让加载到一半的SWF不自动播放
2012-02-29 03:06 1538我用loader加载l=new Loader(); ... -
禁止输入文本可以粘贴
2012-02-10 13:15 2316//禁止输入文本粘贴动作 private static ... -
江湖情缘游戏里的跳的类
2012-02-08 23:55 0package com.app.role.montions ... -
[教程] 路点导航(Waypoint Navigation)
2011-12-31 00:51 0前言:这个不难,所以知道的童鞋不要喷,不知道的童鞋也不要怕,要 ... -
ARPG游戏引擎设计思路
2011-12-31 00:48 00.整体结构 下载 (32.92 KB ... -
Embed绑定XML与txt文本文件
2011-12-28 15:54 4648使用Embed标签可以将图片绑定到swf中并显示,那么我 ... -
Flash_Rich_Text_Editor(完美的富文本编辑器)
2011-12-27 17:55 0Flash_Rich_Text_Editor(完美的富文 ... -
弹弹堂测试
2011-12-08 04:21 0弹弹堂测试弹弹堂测试 -
一些DEMO
2011-11-28 17:42 0一些DEMO一些DEMO -
Matrix学习
2011-11-28 16:51 0Matrix学习 -
[转]三次贝尔曲线
2011-11-10 01:09 1923http://bbs.9ria.com/viewt ... -
[心得] 完美解决as3在ie中初始化时stageWidth和stageHeight为0的问题
2011-11-03 00:46 2939先看下面的一段脚本,这是比较经典的初始化脚本: pa ... -
五子棋算法详解
2011-10-31 04:14 0五子棋算法详解五子棋算法详解五子棋算法详解 -
[转]服务器端ActionScript语言参考
2011-10-31 00:29 0服务器端ActionScript语言参考 -
[转]FLASH与JS序列简单应用
2011-10-28 01:03 2088FLASH与JS序列简单应用 (一) 用swfob ...
相关推荐
STM32F系列是由意法半导体(STMicroelectronics)开发的高性能微控制器,采用ARM Cortex-M3内核,提供了一系列针对不同应用需求的微控制器产品,包括小容量、中容量、大容量及互联型产品。该系列微控制器以其卓越的...
本教程“Flash游戏开发教程”旨在引导初学者掌握如何利用Flash进行游戏制作,从基础到进阶,一步步创建属于自己的小游戏。 首先,我们从第1节开始,这一部分通常会介绍Flash的基础知识,包括界面布局、工具箱的使用...
STM8系列微控制器具备高性能、成本效益高以及易于开发等特性。本知识点主要介绍STM8系列微控制器中Flash程序存储器和数据EEPROM的操作方法。 首先,Flash程序存储器用于存储微控制器的程序代码,而数据EEPROM则用于...
《Flash高级动画教程》是一门深入探讨Flex开发技术和Flash高级应用的课程,旨在帮助游戏开发者以及其他视觉内容创作者提升他们的技能,使他们能够更好地理解和运用ActionScript 3.0来创建复杂的交互式动画和游戏。...
在本“Flash游戏开发实例系列:打小狗”的教程中,我们将深入探讨如何使用Adobe Flash进行游戏开发,特别是创建一个互动的、用户参与度高的小游戏——打小狗。Flash是一款广泛应用于创建动画、交互式内容和轻量级...
GD32微控制器基于ARM Cortex-M内核,提供了高性能、低功耗和丰富的外设接口。Cortex-M系列是ARM公司专为微控制器设计的一系列处理器核心,具有易于编程、高效执行、硬件浮点支持等特点,使得GD32在嵌入式领域具有...
该系列芯片具有高性能、低功耗、丰富的外设接口以及灵活的内存配置等特点。其中,Flash存储器是其重要组成部分,用于存放程序代码和数据,支持在系统编程(ISP)和在应用编程(IAP)。 **二、Flash存储器** Flash存储器...
《深入解析Flash中国象棋游戏开发》 Flash中国象棋游戏是一种基于Adobe Flash技术开发的互动娱乐项目,它充分利用了Flash强大的图形渲染能力和ActionScript编程语言的灵活性,为玩家提供了逼真的象棋对战体验。在...
### Flash开发面试题知识点解析 #### 1. 在复杂对象结构中查找特定实例 ...综上所述,Flash开发面试题涵盖了从基础的算法实现到高级的面向对象设计原则,以及项目管理和优化策略,这些都是Flash开发者必备的核心技能。
在嵌入式Linux系统中,内存管理是至关重要的,因为它直接影响到系统的稳定性和效率。针对“嵌入式Linux 内存...学习和掌握这些内容,不仅能够解决实际问题,还能为开发更高效率、更低功耗的嵌入式产品打下坚实基础。
《AD Flash MCU HT66F 系列单片机原理与实务-汇编语言实例说明》是一本深入探讨合泰(Holtek)公司AD Flash MCU HT66F系列的专著,主要关注单片机的基础理论、工作原理及其实用汇编语言编程技术。在深入理解这本书...
STM32F429系列是意法半导体(STMicroelectronics)推出的高性能微控制器,它基于ARM Cortex-M4内核,具有浮点运算单元(FPU),特别适用于嵌入式应用,如工业控制、医疗设备、消费电子等。在STM32F429中,内部Flash...
《Flash CS4 游戏开发教程》是一本深入讲解如何使用Adobe Flash CS4进行游戏开发的专业书籍,由张鹏撰写。这本书旨在引导读者掌握利用Flash平台创建互动游戏所需的各项技能和知识,涵盖从基础概念到高级技巧的全面...
在嵌入式系统开发领域,STM32系列微控制器因其高性能、低功耗及丰富的外设支持而广受好评。其中,STM32F101作为STM32F1系列的一员,其内置的Flash存储器成为了程序存储的关键组成部分。本文旨在深入探讨STM32F101的...
熟悉这些最佳实践,可以使你的Flash作品在不同平台和网络环境下运行得更加流畅。 总之,这个Flash CS3源代码集合是一个宝贵的教育资源,它可以帮助开发者从多个角度深入理解Flash技术,提升开发技能。无论你是初学...
STM32-F0、F1、F2分别代表了不同的性能等级和功能定位,F0是基础级,F1是经典级,F2是高性能级,它们都支持对NAND Flash的控制,但具体的硬件接口和驱动实现可能有所不同。 1. **NAND Flash结构与特性**:NAND ...
C8051F系列微控制器是Silicon Labs(芯科实验室)推出的一系列高性能混合信号微控制器,内置了Flash存储器,使得用户能够方便地进行现场编程和升级。Flash Programming V3.90.exe作为该系列微控制器的编程工具,具备...