用Flash Builder4.5.1发布了一个加载本地文件夹中的SWF文件,运行发现报错“Local-with-filesystem and local-with-networking SWF files cannot load each other.”,查后,知,可在当前工程属性的编译条件中加入-use-network=false
Tag Archive for Flex
无法加载本地SWF
关于ActionScript Project中Preloader的解决
在使用Flex建立as的Project后,总是会希望显示出加载的进度,用loaderInfo的ProgressEvent来监听是不成功的,那么可参照以下方法,来实现AS应用的两桢法。
首先,建立了一个ImageGrallery的Project,其中包括ImageGrallery.as与AdPlayer.as。
然后,修改当前应用的Compiler,在其中添入“-frames.frame ImageGallery ImageGallery -generate-frame-loader=true”,(About the application compiler options)。
接着,目标是希望AdPlay能加载ImageGrallery,AdPlayer的代码如下:
package { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.text.TextField; import flash.utils.getDefinitionByName; public class AdPlayer extends MovieClip { private var preText: TextField; public function AdPlayer() { stop(); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; preText = new TextField(); addChild(preText); addEventListener(Event.ENTER_FRAME, onEnterFrame); } public function onEnterFrame(event:Event):void { graphics.clear(); if (framesLoaded == totalFrames) { removeEventListener(Event.ENTER_FRAME, onEnterFrame); removeChild(preText); preText = null; nextFrame(); onInit(); } else { var percent: Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal; preText.textColor = 0xFFFFFF; preText.text = (percent * 100).toFixed() + " %"; preText.x = (stage.stageWidth * percent - preText.textWidth) / 2; preText.y = (stage.stageHeight - preText.textHeight) / 2; graphics.beginFill(0); graphics.drawRect(0, stage.stageHeight / 2 - 10, stage.stageWidth * percent, 20); graphics.endFill(); } } private function onInit() : void { var playerClass: Class = Class(getDefinitionByName("ImageGallery")); if (playerClass) { var playerInstance: Object = new playerClass(); addChild(playerInstance as DisplayObject); } } } }
设置AdPlayer.as为Default Application,运行后,嘿嘿,OK了。(运行)
注:如果想用ImageGrallery为主应用程序,那么ImageGrallery的程序可以如下:
package { import com.biztv.player.PlayerContext; import flash.display.Sprite; import flash.events.Event; [Frame(factoryClass="AdPlayer")] // 此处为关键 public class ImageGallery extends Sprite { protected var context: PlayerContext; public function ImageGallery() { addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); } private function onAddedToStage(event: Event):void { removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); initialize(this); } public function initialize(own: Sprite=null):void { removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); context = new PlayerContext(own); // 此处使用robotlegs框架 } } }
Flash Builder 4.5安装后
- 安装Flash Builder 4.5后,需要修改系统中的hosts文件,Windows是“C:\Windows\System32\drivers\etc\hosts”,Mac是“/etc/hosts”。
# 127.0.0.1 localhost # ::1 localhost 127.0.0.1 activate.adobe.com 127.0.0.1 practivate.adobe.com 127.0.0.1 ereg.adobe.com 127.0.0.1 activate.wip3.adobe.com 127.0.0.1 wip3.adobe.com 127.0.0.1 3dns-3.adobe.com 127.0.0.1 3dns-2.adobe.com 127.0.0.1 adobe-dns.adobe.com 127.0.0.1 adobe-dns-2.adobe.com 127.0.0.1 adobe-dns-3.adobe.com 127.0.0.1 ereg.wip3.adobe.com 127.0.0.1 activate-sea.adobe.com 127.0.0.1 wwis-dubc1-vip60.adobe.com 127.0.0.1 activate-sjc0.adobe.com
- 修改完后,打开Flash Builder,输入序列号:1424-4009-1836-4008-6385-6886
Robotlegs是什么?
上个月在M童的提议下,终于开始使用一个框架了,开始了解一下Robotlegs是什么?
Robotlegs 是一个用来开发Flash,Flex 和 AIR 应用的纯 AS3 微框架。它的核心是一组模块化的工具集以及界面集,用来信息沟通任务,减少重复的代码编写,以及管理应用程序中的依赖注入。除了这些核心工具集以外,Robotlegs还提供了一个比较规范的MVC+S(Model模型,View视图,Controller控件和Service服务)实现,来帮助开展工作。
一个典型的Robotlegs MVC+S应用程序包含以下几个部分:
- Context,实际上是一套自展机制,用来初始化Robotlegs所使用的依赖注入以及各种核心工具,一个应用程序是可以有多个 context 的,这对想要加载外部模块的应用程序很有用,因为在一个 context 里的 actor 只能在他们的 context 定义的范围之内相互通讯,所以在一个模块化的应用程序里,不同context 之间的通讯是完全可能的。
- Controller & Commands,Controller 层由 Command 类体现。Command 是用来执行应用程序单一单位工作的,无状态的,短生命周期的对象。Command 用于应用程序各层之间相互通讯, 也可能用来发送系统事件. 这些系统事件既可能发动其它的 Command, 也可能被一个 Mediator 接收,然后对一个 View Component 进行对应这个事件的工作。Command 是封装应用程序业务逻辑的绝佳场所。Command 应该只在处理框架事件时被执行, 而不应该被任何其他框架 actor 实例化或执行。
- View & Mediators,View 由 Mediator 类体现。继承 Mediator 的类管理应用程序中的 View Component 与应用程序中的其它对象之间的信息交流。一个Mediator 将会监听框架事件和 View Component 事件, 并在处理所负责的 View Component 发出的事件时发送框架事件。这样开发者可以将应用程序特有的逻辑放到 Mediator, 而避免把 View Component 耦合到特定的应用程序。
- Model ,用来在 model 层对数据进行封装并为其提供 API。Model 会在对数据模型进行某些工作之后发出事件通知。Model 通常具有极高的便携性。
- Service,一个 service 层的 Service 用来和“外面的世界”进行通讯。 Web service、文件存取或者其它任何应用程序范围之外的行为对 service 类都很适合。Service 类在处理外部事件时会广播系统事件。一个 service 应该封装和外部服务的交互且具有非常高的便携性。
Robotlegs 使用Flash的原生事件用于框架 actor 之间的通讯。 自定义事件类通常用于此用途,虽然使用现有的 Flash 事件同样可行。Robotlegs 不支持事件冒泡。使用自定义类允许开发者通过给事件添加属性来为框架 actor 之间通讯所用的系统事件提供强类型的负载。
所有的框架 actor 都可以发送事件:Mediator、Service、Model 和 Command。Mediator 是唯一接收框架事件的actor,Command 是在对框架事件的处理中被触发,一个事件既可以被一个 Mediator 接收, 也可以触发一个 command。model 和 service 不应该监听和处理事件,这样做会把它们紧耦合到应用程序特有逻辑而降低潜在的便携性和复用性。
ActionScript Project引用mx.effects
在Flash builder 4.1中,建立了一个SlideSample的ActionScript Project,想import mx.effects.Effect,但是当前工程中,SDK并没有加载framework.swc,手动在Library path中Add SWC,俺机器的路径为“D:\Program Files\Adobe\Adobe Flash Builder 4\sdks\4.1.0.16076\frameworks\libs\framework.swc”,如此这般,可以很成功的引入mx.effects中的效果。
应用编译后,发现报错:Resource Path Location Type Unable to resolve resource bundle “core” for locale “en_US”.等一堆的Error。
接着手动在这个工程的Library path中Add SWC,“D:\Program Files\Adobe\Adobe Flash Builder 4\sdks\4.1.0.16076\frameworks\locale\en_US\framework_rb.swc”。
嗯,到此,终于成功的使用了Flex中的效果。
TextFlow Error #1502
从昨天到今天,一直被困于Flex应用中报出的Error #1502的Bug,搞不明白简单的赋值,SDK报出这么个错误来,而且并不是每一个字符串进行此种赋值都会报错。
报错的语句是: textArea.textFlow = TextConverter.importToFlow(value, TextConverter.TEXT_LAYOUT_FORMAT);
暂时认为是因为导入的文本过长,超过TextArea对象的高,采用这种方法赋值,会引发生成滚动条,带出相关的Error吧。
改写为: // 先定义一个TextFlow变量,方便赋值时候传入 var importTextFlow: TextFlow = null; importTextFlow = TextConverter.importToFlow(value, TextConverter.TEXT_LAYOUT_FORMAT); // 将TextFlow变量的值,进行两次转变,先转为html格式的String类型,再转回为TextFlow类型后,赋值给textArea.textFlow textArea.textFlow = TextConverter.importToFlow(TextConverter.export(importTextFlow, TextConverter.TEXT_FIELD_HTML_FORMAT, ConversionType.STRING_TYPE), TextConverter.TEXT_FIELD_HTML_FORMAT);
采用如上写法后,奇怪般的好用了,呵呵,有时灵光一闪,还是有些作用的。
Adobe Flash Builder 4.0.1
7月初的一天,M童说他的Mac上已经升级为4.0.1,呵呵,我还以为Window上不会升级,还在琢磨着Adobo在搞什么,原来,我一直没有关注系统里的提示,4号,我终于没有无视提醒,升级了Flash Builder,还是有些小激动,不知道,升级了些什么,正式版出来后,感觉稳定多了。
Adobe Flash Builder 4 fixed issues
支持最新的Flash Player 10.1、Adobe AIR 2.0和Flex SDK 4.1,并解决了在4.0发行版中发现的多个问题。
在“New”菜单中新增加了“Flash Professional Project”、“MXML Item Renderer”和“MXML Skin”,呵呵。。有些意思。。
CatalogBook
感觉对于这个Book控件,我依旧头痛的很,自以为搞定了,可发现问题还是存着呢,也许是在改写过程中,一知半解产生的后果,自己的思路没有整理明白。
应该一点点耐着性子去解决。烦。
关于depth
某一天,我在Flex4中发现depth([depθ][dɛpθ])这个属性值,不明白什么作用,也懒于试,一直却好奇中…感觉自己保持着自己不爱钻研的优点…
幸运的是,懒人总是有懒人福,呵呵,今天我算是搞明白了,而且,有段程序,用这个属性值,控制起来方便多了,嘿嘿…
depth的作用是“确定容器内各项目的呈示顺序。Spark 容器根据项目的 depth 属性确定这些项目的顺序,具有最低深度的项目在后面,具有较高深度的项目在前面。具有相同深度值的项目按照添加到容器中的顺序显示。”
如果说Spark容器的话,那表示在Flex3应该没有这个属性值。就到这里了。
备受折磨于SDK
从Flash Build beta1到beta2改变了好些东东,因为对它有无限的期待,呵呵,我开始了beta2的跟随过程…
从自带的SDK到4.0.0.12589,应该是一个蛮有意思的改变,因为List用的比较多,所以感觉它也是一个总爱变化的类,在年后,下载了4.0.0.13875,依旧类的命名空间有些改变,主要是指mx类的,同时发现design模式对于Skin的支持很是不好,故而很是期待什么时候能出正式版本呢..或是比较好的SDK..
一路走来..感觉有些不容易..嘿嘿..