Laan's steps..

Feed Rss

DoSWF是一款针对Adobe Flash的加密、混淆软件。可以有效保护swf的图片、音频等资源以及ActionScript代码。多信息请查看页面:http://www.doswf.cn

闲来无聊做针对flash码农过关游戏~~ 由于自己从未设计过游戏,对flash知识掌握和熟悉程度也都不是特别全面,如有设计不到之处,还请各位高手留言,谢谢。

DoMemory是一款帮助ActionScript开发者方便、快捷地使用Alchemy特性的小工具。

http://www.doswf.com/domemory_/snapshot_cn.png

关于Alchemy

Alchemy是Adobe 2008年发布的一个项目,可以将c,c++代码直接转换为可在Flashplayer中执行的ABC数据。其中关键的技术是ApplicationDomain.domainMemory以及一系列特殊的指令集——通过这些特殊的指令集,可以直接快速地读写二进制数据,即ApplicationDomain.domainMemory。

DoMemory工作原理

DoMemory并不能将您的swf文件中对二进制ByteArray的操作直接转换为Alchemy特殊指令加ApplicationDomain.domainMemory的逻辑。DoMemory是需要配合类库(这里下载)来使用:

//将需要处理的二进制数据指定给ApplicationDomain.domainMemory
if (bytes.length < ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH) {
	bytes.length = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH;
}
ApplicationDomain.currentDomain.domainMemory = bytes;
			
var sum:Number = 0;
while (po < len) {
	//使用类库操作二进制数据
	sum += Memory.getByte(po);
	po += 1;
}
			
trace(sum);

然后将编译后的swf文件使用DoMemory进行处理。DoMemory会识别Memory类的操作并使用Alchemy中对应的特殊指令来替换以提高运行速度。

下载:

Windows Mactonish

昨天发现腾讯soso的地图竟然出街景了,在国内算是第一家了。如果google没被和谐的话,(此处省略1000字~~~)

好奇的宅男,请猛击这里:http://maps.soso.com,不过目前只有几个城市的街景。

全景方面的,确实不太了解,有兴趣的可看看这篇比较专业的分析评价:http://www.chinapano.com/article.asp?id=61

技术方面,还是用俺们的Flash来实现的。这个还是相当有技术含量的。不过美中不足的是bug比较多。

一般这样即可:
<java jar=”${MXMLC.JAR}” fork=”true” failonerror=”true” maxmemory=”512m”>

不过使用Flex task的话又没有该参数项,可以这样设置:
from:http://soenkerohde.com/2008/06/change-eclipse-ant-settings-when-you-run-out-of-memory/
In Flex open menu: Run->External Tools->Open External Tools Dialog…
Select the build script you want to change on the left
Select the JRE tab on the right
Set the following as VM arguments: -Xms768m -Xmx1024m -XX:MaxPermSize=512m
These values work for me but you might want to change it to match your environment and project size.

Flash Tracer是一款用于Flash平台(ActionScript3.0)的调试工具,包括Flash、Flex、Adobe AIR以及移动平台。Flash Tracer可以调试本地及远程应用程序。主要功能包括显示对象观察、属性查看及修改、本地及远程trace日志、ActionScript执行。

Flash Tracer Snapshot

密码保护: 记录关于豆瓣电台的一些事

07.14.2011, 要查看留言请输入您的密码。, flash, my works, by .

这是一篇受密码保护的文章。您需要提供访问密码:

air2.5的自动升级文件有升级了,模板如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<update xmlns=”http://ns.adobe.com/air/framework/update/description/2.5″>
<versionNumber>1.1</versionNumber>
<url>http://example.com/updates/sample_1.1.air</url>
<description>This is the latest version of the Sample application.</description>
</update>

air1.5的自动升级文件描述模板如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<update xmlns=”http://ns.adobe.com/air/framework/update/description/1.0″>
<version>1.1</version>
<url>http://example.com/updates/sample_1.1.air</url>
<description>This is the latest version of the Sample application.</description>
</update>

详细信息:http://help.adobe.com/zh_CN/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7ff2.html

的时候,我们使用as3的swf文件加载as2的swf文件,同时还需要告诉as2的swf一些数据。蛋疼下~~
最传统的办法就是使用localconnection了。不过很杯具的是,你得让两个swf文件约定一个连接名。好了,这样的话,你的swf如果被运行多份怎么办?那就随机一个连接名嘛——还是回到问题本身了:怎么把这个连接名在as3和as2中共享。

这里只分享下简单数据的共享,比如一个随机数字。有了这个随机数字,as2和as3就能确定一个连接名,比如_laan_123456,建立LocalConnection连接,就解决共享复杂数据的需求了。

1.最简单的方式请使用这个类库>>,如下使用:

//在as3 swf中,将数据分享给avm1
laan.smart.as2.ShareDataToAS2.shareData(“keyName”, “value”);
//两个都是字符串类型。有了json,复杂数据类型也就不是问题了。

//在as2文件中,如下获取数据
var value:String = this["keyName"];

这种方法最简单了,而且结合json也能解决复杂数据的共享需求。不过千万要注意跨域。就是说如果as3和as2文件不在同一域下,是无法分享数据的。如果跨域了,建议你使用loader.loadBytes来加载as2文件。这样就完全没问题了。

2.使用url传递参数:

//在as2加载地址
var as2URL:String = "http://www.laan.so/a.swf";

//添加参数
as2URL += "?data=1234567";

loader.loader(new URLRequest(as2URL));

这种方式的缺点就是由于data的不一样,导致无法使用浏览器的缓存数据。特别是as2文件比较大时,很浪费带宽,也很考验用户耐心。当然,大量数据也是有问题的。

3.使用一些属性传递数据。因为as2加载到as3中后,就是一个AVM1Movie对象了。这样你就可以通过设置AVM1Movie的数据来传递数据了。比如opaqueBackground、alpha等等。前提是,as2和as3同一域,或者以开放域as3域了:
天地会有一个类似的帖子:http://bbs.9ria.com/viewthread.php?tid=62985&highlight=as2%2Bas3
as3代码:

//为了不影响as2的显示,alpha值保证在0.99以上。肉眼也难看出来滴~~
//0.99后面就是要携带的数据了
var lcNumber:Number = 0.99 + uint(Math.random() * 10000) / 1000000;
loader.contentLoaderInfo.alpha = lcNumber;

一定要注意Number数据类型的精度问题啊~~ 疑惑的可试试如下代码:

var n:Number = 0.991234567;
trace(n);//输出的和0.991234567可能会相差很多很多

as2代码:

var num:Number = _root._alpha;
if (num < 100) {
	var as3Data:String = String(num).substr(3, 100);
 	_root._alpha = 100;
}

目前研究到的就这几种方案了。欢迎补充…

从 AIR 2 开始,可以使用 ADT 创建本机应用程序安装程序,以用于分布 AIR 应用程序。例如,您可以在 Windows 中构建一个 EXE 安装程序文件,用来分发 AIR 应用程序。您可以在 Mac OS 中构建一个 DMG 安装程序文件,用来分发 AIR 应用程序。您可以在 Linux 中构建一个 DEB 或 RPM 安装程序文件,用来分发 AIR 应用程序。

随本机应用程序安装程序安装的应用程序称为扩展的桌面配置文件应用程序。如果应用程序描述符文件不支持桌面扩展配置文件,则不能使用 ADT 为 AIR 应用程序打包本机安装程序。可以使用应用程序描述符文件中的supportedProfiles 元素限制此配置文件。请参阅设备配置文件supportedProfiles

您可以通过两种基本方式构建 AIR 应用程序的本机安装程序版本:

  • 可以根据应用程序描述符文件及其他源文件构建本机安装程序。(其他源文件可能包括 SWF 文件、HTML 文件及其他资源。)
  • 还可以根据 AIR 文件或 AIRI 文件构建本机安装程序。

要在其中使用 ADT 的操作系统必须与要生成本机安装程序文件的操作系统相同。因此,要为 Windows 创建 EXE 文件,请在 Windows 中运行 ADT。要为 Mac OS 创建 DMG 文件,请在 Mac OS 中运行 ADT。要为 Linux 创建 DEB 或 RPG 文件,请在 Linux 中运行 ADT。

在创建本机安装程序以分发 AIR 应用程序时,该应用程序将获得下列功能:

  • 可以使用 NativeProcess 类启动并与本机进程交互。有关详细信息,请参阅下列内容之一:

  • 它可以使用 File.openWithDefaultApplication() 方法,打开任何默认系统应用程序定义为将其打开的文件,而无论文件为哪种类型。(对没有随本机安装程序安装的应用程序具有限制。有关详细信息,请参阅语言参考中的 File.openWithDefaultApplication() 条目。)

但是,当将其打包成本机安装程序时,会失去 AIR 文件格式的某些优点。单个文件不能再分发到所有台式计算机。内置更新功能(和 updater 框架)无效。

用户双击本机安装程序文件时,将安装 AIR 应用程序。如果计算机中尚未安装所需的 Adobe AIR 版本,安装程序将从网络下载该版本并首先安装。如果没有获取正确的 Adobe AIR 版本的网络连接(如有必要),则安装将失败。此外,如果 Adobe AIR 2 中不支持该操作系统,则安装将失败。

注: 如果希望在已安装的应用程序中可以执行某个文件,请确保在打包应用程序时该文件在文件系统上可执行。(在 Mac 和 Linux 上,如果需要,可以使用 chmod 来设置可执行标记。)

从应用程序源文件创建一个本机安装程序

要在应用程序的源文件以外构建一个本机安装程序,请在一个命令行中使用带有以下语法的 -package 命令:

adt -package AIR_SIGNING_OPTIONS-target native [WINDOWS_INSTALLER_SIGNING_OPTIONS] installer_fileapp_xml [file_or_dir | -C dir file_or_dir | -e file dir ...] ...

此语法与用于打包 AIR 文件(不包括本机安装程序)的语法类似。但存在几点差异:

  • 可以将 -target native 选项添加到命令中。(如果指定 -target air,则 ADT 生成 AIR 文件,而不是本机安装程序文件。)
  • 可以将目标 DMG 或 EXE 文件指定为 installer_file
  • 或者,您可以在 Windows 上再添加一组签名选项,如语法清单中的 [WINDOWS_INSTALLER_SIGNING_OPTIONS] 所指示的那样。在 Windows 中,除了对 AIR 文件进行签名,还可以对 Windows 安装程序文件进行签名。使用与对 AIR 文件进行签名相同类型的证书和签名选项语法(请参阅ADT 代码签名选项)。可以使用相同的证书对 AIR 文件和安装程序文件进行签名,也可以指定不同的证书。当用户从 Web 下载已签名的 Windows 安装程序文件时,Windows 将根据证书标识文件源。

有关 ADT 选项(而不是 -target 选项)的详细信息,请参阅对桌面 AIR 安装文件进行打包

以下示例创建 DMG 文件(Mac OS 的本机安装程序文件):

adt -package -storetype pkcs12 -keystore myCert.pfx -target native myApp.dmg application.xml index.html resources

以下示例创建 EXE 文件(Windows 的本机安装程序文件):

adt -package -storetype pkcs12 -keystore myCert.pfx -target native myApp.exe application.xml index.html resources

以下示例创建 EXE 文件并对其进行签名:

adt -package -storetype pkcs12 -keystore myCert.pfx -target native -storetype pkcs12 -keystore myCert.pfx myApp.exe application.xml index.html resources

从 AIR 文件或 AIRI 文件创建本机安装程序

可使用 ADT 基于 AIR 文件或 AIRI 文件生成本机安装程序文件。要基于 AIR 文件构建本机安装程序,请在一个命令行中使用带有以下语法的 ADT -package 命令:

adt -package -target native [WINDOWS_INSTALLER_SIGNING_OPTIONS] installer_file air_file

此语法与用于根据 AIR 应用程序的源文件创建本机安装程序的语法类似。但存在几点差异:

  • 为 AIR 应用程序指定一个 AIR 文件(而不是应用程序描述符文件或其他源文件)作为源。
  • 不要为 AIR 文件指定签名选项,因为已对该文件进行签名

要基于 AIRI 文件构建本机安装程序,请在一个命令行中使用带有以下语法的 ADT -package 命令:

adt AIR_SIGNING_OPTIONS -package -target native [WINDOWS_INSTALLER_SIGNING_OPTIONS] installer_file airi_file

此语法与用于根据 AIR 文件创建本机安装程序的语法类似。但存在几点差异:

  • 指定一个 AIRI 文件作为源。
  • 为目标 AIR 应用程序指定签名选项。

以下示例基于 AIR 文件创建 DMG 文件(Mac OS 的本机安装程序文件):

adt -package -target native myApp.dmg myApp.air

以下示例基于 AIR 文件创建 EXE 文件(Windows 的本机安装程序文件):

adt -package -target native myApp.exe myApp.air

以下示例基于 AIR 文件创建 EXE 文件并对其进行签名:

adt -package -target native -storetype pkcs12 -keystore myCert.pfx myApp.exe myApp.air

以下示例基于 AIRI 文件创建 DMG 文件(Mac OS 的本机安装程序文件):

adt -storetype pkcs12 -keystore myCert.pfx -package -target native myApp.dmg myApp.airi

以下示例基于 AIRI 文件创建 EXE 文件(Windows 的本机安装程序文件):

adt -storetype pkcs12 -keystore myCert.pfx -package -target native myApp.exe myApp.airi

以下示例创建一个 EXE 文件(基于 AIRI 文件)并使用 AIR 和本机 Windows 签名对该文件进行签名:

adt -package -storetype pkcs12 -keystore myCert.pfx -target native -storetype pkcs12 -keystore myCert.pfx myApp.exe myApp.airi

SmartTip类是用来做气泡提示,演示如下:

类库下载》》

使用方法:

1.创建tip:

SmartTip.createTip(target1_, "好好学习天天向上");

SmartTip.createTip方法接收四个参数:
target:DisplayObject 要提示的目标对象
content:* 提示的内容,必须是String或DisplayObject对象
location:String = null 提示在目标对象的方位。上下左右分别由SmartTip.TOP, SmartTip.BOTTON,SmartTip.LEFT,SmartTip.RIGHT定义。默认为下方提示。
style:Object = null 提示的样式数据。不设置时使用默认样式。

该方法返回一个SmartTip示例。

2.设置tip样式:
tip的默认样式数据为:

{
	arrowHeight:10,				//箭头高度
	arrowWidth:10,				//箭头宽度
	arrowIndentPercent:0,			//箭头偏移量
	backgroundGap:4,			//边框间隔
	backgroundCornerRadius:4,		//圆角
	backgroundIndentPercent:0,		//背景偏移量
	backgroundColor:0xffffff,		//背景颜色
	backgroundAlpha:1			//背景透明度
}

可以在使用SmartTip.createTip方法时,直接设置tip的样式:

//tip样式定义
var styleObj:Object = {arrowHeight:0,
			arrowWidth:0,
			arrowIndentPercent:0,
			backgroundGap:4,
			backgroundCornerRadius:4,
			backgroundIndentPercent:-100,
			backgroundColor:0xffffff,
			backgroundAlpha:0
			};

SmartTip.createTip(target, "好好学习", martTip.TOP, styleObj);

或者在之后通过调用setStyle方法来更改样式:

var myTip:SmartTip = SmartTip.createTip(target1_, "好好学习天天向上");

//设置样式
myTip.setStyle("backgroundColor", 0x000000);

3.让tip在点击舞台其它地方时自动关闭:

var myTip:SmartTip = SmartTip.createTip(target1_, "好好学习天天向上");

//设置在tip外围点击后自动关闭tip
myTip.closeOnClickOutside = true;//默认为true

4.设置tip停留一定时间后自动关闭

var myTip:SmartTip = SmartTip.createTip(target1_, "好好学习天天向上");

//设置在5秒后自动关闭
myTip.setAutoClose(5000);//时间以毫秒为单位

5.设置tip显示关闭按钮,让用户可点击该按钮关闭tip:

var myTip:SmartTip = SmartTip.createTip(target1_, "好好学习天天向上");

//设置在5秒后自动关闭
myTip.setAutoClose(5000);//时间以毫秒为单位

//设置tip显示关闭按钮。关闭按钮将在tip的右上角显示
myTip.showCloseButton = true;//默认为false

6.关闭tip:

var myTip:SmartTip = SmartTip.createTip(target1_, "好好学习天天向上");

//关闭tip
myRichTip.close();

7.SmartTip的常用静态控制方法:

//创建tip内容
var text:TextField = new TextField();
text.autoSize = TextFieldAutoSize.LEFT;
text.text = “好好学习天天向上”;

var myTip:SmartTip = SmartTip.createTip(target, text);

//根据tip内容关闭tip。如果内容为String时,不可通过该方法删除对应的tip
SmartTip.closeTipByContent(text):

//关闭目标对象的所有tip
SmartTip.closeTipsByTarget(target);