LocalConnection跨域调用注意事项

除了设定必要的allowDomain, allowInsecureDomain之外,注意让LocalConnection.connect(…)名称以下划线开头。
帮助文档它说:

  • 如果 connectionName 字符串不以下划线开头,则 Flash Player 会添加一个包含超级域名称和一个冒号的前缀(例如 myDomain:connectionName)。虽然这可以确保您的连接不会与其它域中具有同一名称的连接冲突,但任何发送方 LocalConnection 对象都必须指定此超级域(例如 myDomain:connectionName)。如果将具有接收方 LocalConnection 对象的 SWF 文件移动到另一个域中,Flash Player 会更改前缀,以反映新的超级域(例如 anotherDomain:connectionName)。必须手动编辑所有发送方 LocalConnection 对象,以指向新超级域。
    这样下来在不同沙箱、域之间的swf就可以通过LocalConnection相互通信了。
  • 如果 connectionName 字符串以下划线开头(例如 _connectionName),Flash Player 不会向该字符串添加前缀。这意味着接收方和发送方 LocalConnection 对象都将使用相同的 connectionName 字符串。如果接收方对象使用 LocalConnection.allowDomain() 来指定可以接受来自任何域的连接,则可以将具有接收方 LocalConnection 对象的 SWF 文件移动到另一个域,而无需更改任何发送方 LocalConnection 对象。

也就是说:不以下划线开头的connectionName会被Flash加上前缀(以区分所在的域),结果就是你在代码里面看到的明明是发送和接收方connectionName完全相同,但就是无法通信。非常的纠结。

AS2.FocusManager在AS3中的问题

当在as3中加载一个含有组件(即含有FocusManager)的as2影片之后,一个焦点问题产生了:as3中的TextField就无法正常获取焦点了。具体的问题可参见:

  1. http://parallaxed.net/bugs/,文章描述:Flash FocusManager Compatibility Probledm
  2. http://flash.9ria.com/viewthread.php?tid=38712

parallaxed.net上找到的解决方法:

  1. _root.focusManager.enabled = false;
  2. _root.createEmptyMovieClip(“killFocusManager”, focusManager.getDepth()) ;

我只测试了第一种方法,是可以解决这个问题的。

htmlText in TextField

1. 当给一个TextField.htmlText赋值之后,注意,此时TextField的文字样式、布局就完全来以html的形式来渲染,所以htmlText中必须表现TextField已有样式、布局属性(例如:textColor、autoSize),为了达到这个目的TextField.htmlText会被自动加上两个标签:<p>、<font>。

//设置htmlText
textField.htmlText=”hello world”;
//输出
trace(textField.htmlText);

会输出类似的信息:

<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">hello world</FONT></P>

可以看到htmlText已经加上了<p>、<font>来表现TextField的字体、大小、颜色等。
(从上面的信息可以看得出来Flash Player的TextField.html应该是对“=”运算符进行了重写(override))
2. 如果在给TextField.htmlText赋值的内容中包含了<p>标签,TextField.htmlText的最终渲染将会忽略这些<p>标签。因为:TextField会自动为htmlText在“根部”加上<p>,而HTML中<p>是不能再嵌套<p>的。
3. 我们在控制TextField的样式中,除了TextField提供有限的几个属性borderColor、backgroundColor、textColor等,还可以通过TextFormat来设置。对于一个设置了TextFormat的TextField来说,它的htmlText中会被加上<textformat>标签来表现TextFormat中的属性。

//设置textformat
var tfm:TextFormat = new TextFormat();
tfm.leftMargin = 5;
textField.setTextFormat(tfm);
textField.htmlText = “hello world”;
//输出
trace(textField.htmlText);

会输出类似的信息:

<TEXTFORMAT LEFTMARGIN="5"><P ALIGN="LEFT"><FONT SIZE="12"  COLOR="#000000" LETTERSPACING="0" KERNING="0">fafafa</FONT></P></TEXTFORMAT>

不过有个问题:TextField.htmlText提供的属性只支持以下几个是属性:blockindent、indent、leading、leftmargin、rightmargin、tabstops。它没有color,没有font,没有size,没有italic……也就是说并不能完整表现TextFormat的所有属性,那么TextFormat中的color、font、size等这些属性会被加在htmlText中的哪里呢?答案是<p>和<font>标签。

//设置textformat
var tfm:TextFormat = new TextFormat();
tfm.font = “Verdana”;
tfm.leftMargin = 5;
textField.setTextFormat(tfm);
textField.htmlText = “hello world”;
//输出
trace(textField.htmlText);

会输出类似的信息:

<TEXTFORMAT LEFTMARGIN="5"><P ALIGN="LEFT"><FONT FACE=”Verdana” SIZE="12"  COLOR="#000000" LETTERSPACING="0" KERNING="0">fafafa</FONT></P></TEXTFORMAT>

我们看到标签中有FACE=”Verdana”的信息,这是来自TextField.textFormat的属性。
4. defaultTextFormat + htmlText之Bug。
当对一个TextField设置defaultTextFormat后,一个奇怪的问题出现了:如果你用鼠标点(选)后会发现TextFormat.defaultTextFormat变为null,之后再进来的htmlText就失去了defaultTextFromat的那些样式。简单的解决办法就是先把TextField.defaultTextFormat存到一个变量(tmp),设置TextField.htmlText之后,再吧TextField.defaultTextFormat = tmp。之后再设置的htmlText就有defaultTextFormat中的样式了。

JSFL取得当前编辑项的方法

之前写过一个JSFL脚本用于图片的9格打散(scale9Grid),一直找不到取得“当前编辑项”的方法,无奈之下就用了:

fl.getDocumentDOM().library.getSelectedItems();

也就是必须,在库中选中这个项才能运行这个JSFL
不过gskinner也实现了个同样功能的脚本,我才发现可以通过时间轴名字取得“当前编辑项”:

doc.library.items[doc.library.findItemIndex(doc.getTimeline().name)];

关联数据的更新机制

简单的记录下。

碰到个问题,就是客户端关联数据的更新问题。例如,游戏中的某个建筑必须是资源达到一定量,玩家才能建造的。也就是说“资源”数据与“建筑”数据是相关联的,某一时刻,资源量达到条件时,建筑必须变为可建造的状态。照理来讲,服务端发送给客户端时,“资源”数据与“建筑”数据都发送过来就OK了,但就项目目前的机制来讲,这种做法会导致服务端的负担太大、通信量太大、冗余。

只好尽可能让客户端来优化,尽量减少不必要的通信。简单的更新机制,假设B数据关联到A数据:

  1. 初始收到A、B数据时,建立数据之间的关联。
  2. 当收到A数据的更新时,把关联到A数据上的所有数据(B数据),设置B.needUpdate = true;
  3. 若B数据目前已处于被显示的状态,则向服务端请求B数据。
  4. 在访问B数据时,例如:打开建筑窗口时,若B.needUpdate==true,则向服务端请求B数据。
  5. 设置B.needUpdate = false;

嗯啊,看来客户端、服务端的设计优化永远得注意。

AirPackager

原文:http://chargedweb.com/labs/2010/02/20/airpackager-easy-air-to-exedmgrpm/
air beta 2提供了adt,这个AirPackager其实就是adt的GUI。

AirPackager is a small app that will help you generate exe/dmg/rpm files out of your air package in other words – it’s just a GUI for the adt.
To install the app you need the AIR2 beta2 runtime
Again, works only on windows.

Download AirPackager.exe

tInspector教程01

下载、设置tInspector

你可以在tInspectortInspector on Google Code主页上,下载到tInspector的代码。目前的版本是tInspector 1.0.4.5.zip,下载完成解压缩包,然后把tInspector/src目录的路径添加到Flash、FDT、Flex Builder……的类路径下。

解压tInspector代码压缩包:

新建一个.fla文件,打开“发布设置”,在Flash IDE里把tInspector/src目录添加到类路径中,同时建议去掉“警告模式”勾选(并不会影响编译的正确性,而且会编译得更快。另外,tInspector里面的代码有很多类似onMouseDown的写法,这些在Flash的编译器会被提出“警告”-_-!)。

使用tInspector

在刚新建的fla里面随便画个圆,设置个文档类,在类里面添加如下的代码:

package {
	import cn.itamt.utils.Inspector;
	import flash.display.Sprite;

	/**
	 * @author itamt@qq.com
	 */
	public class tInspectorDemo extends Sprite {
		public function tInspectorDemo() {
			//初始tInspector
			Inspector.getInstance().init(this, true, true, false, true);
			//开启
			Inspector.getInstance().turnOn();
		}
	}
}

你应该会看到大概这样的效果:
[kml_flashembed publishmethod="static" fversion="9.0.0" movie="http://tinspector.googlecode.com/svn/trunk/demo/tInspectorDemo_01.swf" width="550" height="400" targetclass="flashmovie"]
Get Adobe Flash player
[/kml_flashembed]
把鼠标移到绿色圆形上面,会有红色的矩形框,按下鼠标就会看到操作条,试试那几个按钮有什么效果吧。
如果你要关掉tInspector,那么在swf中,点击鼠标右键,然后”Inspector off”吧。

大多数时候,你只需要写这句代码:

Inspector.getInstance().init(this);

Inspector.init函数带了5个参数:

/**
 * @param root				所在根对象
 * @param withMenu			是否在右键菜单中显示操作选项
 * @param withKeys			使用键盘快捷键?
 * @param showPropPanelAtFirst		在开启时显示属性面板?
 * @param showStructPanelAtFirst	在开启时显示列表结构面板?
 */
init(root, withMenu, withKeys, showPropPanelAtFirst, showStructPanelAtFirst)

“感恩的心—抗旱救灾”捐款倡议书

“感恩的心—抗旱救灾”捐款倡议书

—正心堂10万元大捐赠,善心的您一起救灾吧!

(敬请转发转载,功德无量人天!)

“感恩的心—抗旱救灾”倡议书(正心堂10万元大捐赠)“感恩的心—抗旱救灾”倡议书(正心堂10万元大捐赠)

日前,中国西南5省市区正在遭受历史罕见的大旱。云南、广西部分地区的旱情已达到特大干旱的程度,贵州省秋冬连旱,出现80年一遇,甚至百年一遇的旱情。

值此灾荒,以“行愿方菩提,联合生莲花”为理念的“正心堂”再次发起“感恩的心—抗旱救灾”捐款倡议活动,正心堂全体同仁携诸爱心人士,率先捐赠2万元现金于红十字会、儿基会、思源工程基金会的三大抗旱行动,并愿无偿捐献价值8万元的《超越轮回》正版光盘,用于更好的鼓舞社会善心人士的慈心善行,以救灾荒

“感恩的心—抗旱救灾”倡议书(正心堂10万元大捐赠)“感恩的心—抗旱救灾”倡议书(正心堂10万元大捐赠)“感恩的心—抗旱救灾”倡议书(正心堂10万元大捐赠)

正心堂全体同仁及诸爱心人士发心捐赠2万元现金支持三大基金会的西南抗旱救灾项目!

“感恩的心—抗旱救灾”倡议书(正心堂10万元大捐赠)

“感恩的心”最小的志愿者,捐出自己攒下来的100元压岁钱,。支援灾区小朋友有水喝!

“感恩的心—抗旱救灾”活动具体如下:

1 参与时间:2010年4月1日~4月30日

2 参与方法:凡在活动时间内,全国任何地区的善心人士无论通过任何有效途径,只要为西南大旱捐款,凭相关捐款证明(10元起),皆可获得由“正心堂”免费赠送的等额价值《超越轮回》DVD,比如您捐赠儿基会“甘露行动”100元,正心堂将赠送您10套《超越轮回》正版光碟(包邮费),在随喜鼓励您慈善救助旱灾的同时,更是锦上添花的广传佛教文化,功德无量!

3 本次捐款正心堂不承担代捐工作,善心人士直接捐助灾区即可;正心堂《超越轮回》正版光盘免费大赠送纯属公益鼓励!源于正心堂一贯赤诚的慈善发心!

4 《超越轮回》光盘将于4月30日后,由“正心堂”统计数量,统一赠送,请大家务必将自己手中的捐款证明(银行汇单扫描件、捐赠发票、网银截图等)及有效邮寄地址及联系电话等准确信息于4月30日前发送至zhengxintang66@163.com .以便邮寄免费光盘;赠送时间不迟于2010年5月31日;
“感恩的心—抗旱救灾”倡议书(正心堂10万元大捐赠) “感恩的心—抗旱救灾”倡议书(正心堂10万元大捐赠)

“行愿方菩提,联合生莲花”是我们的公益理念!面对灾难,“感恩的心”义不容辞,为所当为!

正心堂只不过是一家制作发行佛教影视的微小企业,由几位为实现佛教文化当代弘传而日夜努力的青年佛子构成基本,受广大佛子和善心人士的关爱和支持,感恩不尽!一直以来由于我们慈善行愿支出不断,同时受盗版《超越轮回》的严重冲击,经济一直处于十分紧张的状态,从谈不上宽裕充足。但再艰难,毕竟我们还有水喝,还有饭吃,相比灾区何止天壤!

《梵网经》有云:一切男子是我父,一切女子是我母。同时,《华严经》中也有云:众生至爱者生命,诸佛至爱者众生。能救众生身命,则能成就诸佛心愿!

为父母解难,为所当为,何惧艰辛!

故而此次正心堂携手诸多善心人士,率先捐赠2万元现金及愿捐赠价值8万元的《超越轮回》,以为表态!在此也由衷的恳请大家为灾区父母慷慨解囊,以救旱荒!

您捐给灾区的越多,正心堂随喜赠送您的越多,一毛一渧,定有落处,于多于少,皆是功德。

并请您大力宣传 “感恩的心—抗旱救灾”活动,让更多的人参与这一殊胜善行!让我们既能从经济上支援受灾同胞,又能满足广大道友传播佛法、利益众生的善愿。

让所有的发心人共襄善举!让所有的有缘众生有所获益!

咨询电话:010—65585809 13552519519   网址:www.zhengxintang.com

咨询QQ:327634566   820837948

推荐活动:

1 儿基会—甘露行动(点击链接)

2 思源工程—思源-甘泉行动(点击链接)

3 红十字会—爱心雨行动(点击链接)

敬请转发转载,功德无量人天!

“感恩的心”救灾活动回顾(点击图片)“感恩的心—抗旱救灾”倡议书(正心堂10万元大捐赠)

“感恩的心”慈善联合行动

2010年佛涅槃日前

tInspector 1.0.4.5更新

tInspector

tInspector 1.0.4.5 主要增加了InspectorOutPuterManager类,用于自定义信息的输出(Outputer)。

tInspectorOutPuterManager

如上图所示,如果你想自定义图中黄色框、红色框标出的信息显示,那么你可以通过设置Inspector.structureView.outputerManagerInspector.liveInspectView.outputerManager来实现,structureView和liveInspectView都扩展自BaseInspectorView。

以下面的demo为例,tInspector在查看PushButton时显示PusPushButton.label属性

[kml_flashembed publishmethod="static" fversion="9.0.0" movie="http://tinspector.googlecode.com/svn/trunk/demo/tInspectorDemo.swf" width="550" height="400" targetclass="flashmovie"]

Get Adobe Flash player

[/kml_flashembed]

过几日来会写些tInspector的教程,详细介绍这些用法。