Adobe AIR 应用程序图标

文件名

图像大小

用法

Default.png

320 x 480

iPhone,标准分辨率

Default@2x.png

640 x 960

iPhone,高分辨率

Default-Portrait.png

768 x 1004

iPad,纵向

Default-PortraitUpsideDown.png

768 x 1004

iPad,倒置纵向

Default-Landscape.png

1024 x 748

iPad,左横向

Default-LandscapeRight.png

1024 x 748

iPad,右横向

Default-example.png

320 x 480

标准 iPhone 上的 example://URL

Default-example@2x.png

640 x 960

高分辨率 iPhone 上的 example:// URL

Default-example~ipad.png

768 x 1004

纵向 iPad 上的 example:// URL

Default-example-Landscape.png

1024 x 748

横向 iPad 上的 example:// URL

via Adobe AIR 应用程序图标.

iOS Data Storage Guidelines 和 “do not back up”文件属性

iOS 5有了iCloud后,Apple更新了数据存储指导方针,以适应于iCloud存储,同时增加了“不要备份”文件属性,可以指定文件不备份和上传到iCloud

摘录如下,供大家参考:

iOS 数据存储指导方针


iCloud包括了备份,会通过Wi-Fi每天自动备份用户iOS设备。app的home目录下的所有东西都会被备份,除了应用Bundle本身、缓存目录和temp目录。已购买的音乐、应用、书籍、Camera Roll、设备设置、主屏幕、App组织、消息、铃声也都会被备份。由于备份通过无线进行,并且为每个用户存储在iCloud中,应用需最小化自己存储的数据数量。大文件会延长备份时间,并且消耗用户的可用iCloud空间。


为了确保备份尽可能快速高效,应用存储数据需要遵循以下指导方针:


1. 只有那些用户生成的文档或其它数据,或者应用不能重新创建的数据,才应该存储在<Application_Home>/Documents目录下,并且会被自动备份到iCloud。


2. 可以重新下载或生成的数据,应该存储在<Application_Home>/Library/Caches目录。例如数据库缓存文件、可下载文件(杂志、报纸、地图应用使用的数据)等都属于这一类。


3. 临时使用的数据应该存放在<Application_Home>/tmp目录。尽管这些文件不会被iCloud备份,应用在使用完之后需要记得删除这些文件,这样才不会继续占用用户设备的空间。


4. 使用”不要备份”属性来指定那些需要保留在设备中的文件(即使是低存储空间情况下)。那些能够重新生成,但在低存储空间时仍需保留,对应用正常运行有影响,或者用户希望文件在离线时可用的文件,需要使用这个属性。无论哪个目录下的文件(包括Documents目录),都可以使用这个属性。这些文件不会被删除,也不会包含在用户的iCloud或iTunes备份中。由于这些文件一直占用着用户设备的存储空间,应用有责任定期监控和删除这些文件。








iOS 5.0.1开始支持”do not back up”文件属性,允许开发者明确地指定哪些文件应该被备份,哪些是本地缓存可以自动删除,哪些文件不需要备份但不能删除。此外,对目录设置这个属性,会阻止备份该目录和目录中的所有内容。


注意”do not back up”属性只能用于iOS 5.0.1以后版本。之前版本的应用需要存储数据到<Application_Home>/Library/Caches目录才能避免被备份。由于老的系统忽略这个属性,你需要确保应用在所有iOS版本中,都遵循上面的iOS Data Storage Guidelines。


数据处理分类
com.apple.MobileBackup文件属性就是iOS 5.0.1引入的”do not back up”特性,用于指定文件或目录不需要备份(不管在文件系统的什么位置)。通过使用这个新的文件属性,并且将文件存放在指定的目录下,文件可以分为以下四种数据类型:s.


关键数据
这些是用户创建的数据,或其它不能重新生成的数据。应该存放在<Application_Home>/Documents目录下,并且不应该标记为”do not backup”属性。关键数据在低存储空间时也会保留,而且会被iCloud或iTunes备份。


缓存数据
可以重新下载或生成的数据,而且没有这些数据也不会妨碍用户离线使用应用的功能。缓存数据应该保存在<Application_Home>/Library/Caches目录下。缓存数据在设备低存储空间时可能会被删除,iTunes或iCloud不会对其进行备份。


临时数据
应用需要写到本地存储,内部使用的临时数据,但不需要长期保留使用。临时数据应该保存在<Application_Home>/tmp目录。系统可能会清空该目录下的数据,iTunes或iCloud也不会对其进行备份。应用在不需要使用这些数据时,应该尽快地删除临时数据,以避免浪费用户的存储空间。


离线数据
可以下载,或重新创建,但用户希望在离线时也能访问这些数据。离线数据应该存放在<Application_Home>/Documents目录或<Application_Home>/Library/Private Documents目录,并标记为”do not backup”属性。这两个位置的数据在低存储空间时都会保留,而”do not backup”属性会阻止iTunes或iCloud备份。应用不再需要离线数据文件时,应该尽快删除,以避免浪费用户的存储空间。ce.




设置Do Not Backup扩展属性
注意:”do not backup”扩展属性可以添加到任何文件或目录,在旧版本的系统中也能够设置。但旧系统仍然会备份这些文件,一旦设备更新到iOS 5.0.1,这些文件会被重新正确地配置。


使用下面方法来设置”do not back up”扩展属性。当你创建不需要备份的文件或目录时,向文件写入数据,然后调用下面方法,并传递一个文件URL。


设置扩展属性
#include <sys/xattr.h>
– (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    c*****t char* filePath = [[URL path] fileSystemRepresentation];

    c*****t char* attrName = “com.apple.MobileBackup”;
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;
}

Office2007使用小记

“今天用上了中文版的office2007,装上了Outlook,界面的美化了不少,加上了订阅RSS。
word里面界面修改了不少,但是加入了“贴心的”——编辑浮动面板,我是这样称呼的,不知道对不对,就是在编辑文字时,鼠标旁边会跟上一个常用的菜单,选择字体大小之类的常用按钮。

虽说在最上面比较难找到,但是就是鼠标旁边就比较容易找到了。[smile]

总之,用这个版本的时间还不长,没什么特殊的感受,尽快熟悉界面吧。

哦,忘了说了,这套office总共有三套皮肤哦,经典的蓝色,还有银色和黑色,感觉蓝色和黑色还不错,银色就一般般了。”

Adobe AIR 各平台限制列表

不同配置文件的功能

下表列出了所有配置文件中都不支持的类和功能。

类或功能 桌面 extended
Desktop
mobile
Device
tv extendedTV
Accelerometer (Accelerometer.isSupported) 检查
Accessibility (Capabilities.hasAccessibility)
回音消除 (Microphone.getEnhancedMicrophone())
ActionScript 2
CacheAsBitmap 矩阵
Camera (Camera.isSupported)
CameraRoll
CameraUI (CameraUI.isSupported)
捕获运行时捆绑
ContextMenu (ContextMenu.isSupported)
DatagramSocket (DatagramSocket.isSupported)
DockIcon (NativeApplication.supportsDockIcon) 检查 检查
拖放 (NativeDragManager.isSupported) 检查
EncyptedLocalStore (EncyptedLocalStore.isSupported)
Flash Access (DRMManager.isSupported)
GameInput (GameInput.isSupported)
Geolocation (Geolocation.isSupported) 检查
HTMLLoader (HTMLLoader.isSupported)
IME (IME.isSupported) 检查
LocalConnection (LocalConnection.isSupported)
Microphone (Microphone.isSupported) 检查
多频道音频 (Capabilities.hasMultiChannelAudio()) 检查 检查
本机扩展
NativeMenu (NativeMenu.isSupported)
NativeProcess (NativeProcess.isSupported)
NativeWindow (NativeWindow.isSupported)
NetworkInfo (NetworkInfo.isSupported) 检查
使用默认应用程序打开文件 有限制
PrintJob (PrintJob.isSupported)
SecureSocket (SecureSocket.isSupported) 检查 检查
ServerSocket (ServerSocket.isSupported)
Shader 有限制
Stage3D (Stage.stage3Ds.length)
舞台方向 (Stage.supportsOrientationChange)
StageVideo 检查
StageWebView (StageWebView.isSupported)
登录时启动应用程序 (NativeApplication.supportsStartAtLogin)
StorageVolumeInfo (StorageVolumeInfo.isSupported) 检查 检查
系统空闲模式
SystemTrayIcon (NativeApplication.supportsSystemTrayIcon) 检查 检查
Text Layout Framework 输入
Updater (Updater.isSupported)
XMLSignatureValidator (XMLSignatureValidator.isSupported)

表中各项具有以下含义:

  • 检查 — 在该配置文件中,某些设备支持该功能,但并非所有设备均支持该功能。在使用该功能之前,应在运行时检查是否支持该功能。
  • 有限制 — 支持该功能,但具有一些重要限制。有关更多信息,请参阅相关文档。
  •  — 该配置文件不支持该功能。
  •  — 该配置文件支持该功能。请注意,个别计算设备可能缺少某项功能所需的硬件。例如,并非所有手机均带有摄像头。

 

source: http://help.adobe.com/zh_CN/air/build/WS144092a96ffef7cc16ddeea2126bb46b82f-8000.html

[转]一些公式

原文链接:http://bbs.9ria.com/blog-84383-10307.html

基础三角函数的计算:
角的正弦值 = 对边 / 斜边
角的余弦值 = 邻边 / 斜边
角的正切值 = 对边 / 邻边

弧度转换为角度以及角度转换为弧度:
弧度 = 角度 * Math.PI / 180
角度 = 弧度 * 180 / Math.PI

向鼠标(或者任何一个点)旋转:
// 用要旋转到的 x, y 坐标替换 mouseX, mouseY
dx = mouseX – sprite.x;
dy = mouseY – sprite.y;
sprite.rotation = Math.atan2(dy, dx) * 180 / Math.PI;

创建波形:
// 将 x, y 或其它属性赋值给 Sprite 影片或影片剪辑,
// 作为绘图坐标,等等。
public function onEnterFrame(event:Event){
value = center + Math.sin(angle) * range;
angle += speed;
}

创建圆形:
// 将 x, y 或其它属性赋值给 Sprite 影片或影片剪辑,
// 作为绘图坐标,等等。
public function onEnterFrame(event:Event){
xposition = centerX + Math.cos(angle) * radius;
yposition = centerY + Math.sin(angle) * radius;
angle += speed;
}

创建椭圆:
// 将 x, y 或其它属性赋值给 Sprite 影片或影片剪辑,
// 作为绘图坐标,等等。
public function onEnterFrame(event:Event){
xposition = centerX + Math.cos(angle) * radiusX;
yposition = centerY + Math.sin(angle) * radiusY;
angle += speed;
}

获得两点间的距离:
// x1, y1 和 x2, y2 是两个点
// 也可以是 Sprite / MovieClip 坐标,鼠标坐标,等等。
dx = x2 – x1;
dy = y2 – y1;
dist = Math.sqrt(dx*dx + dy*dy);

十六进制转换为十进制:
trace(hexValue);

十进制转换为十六进制:
trace(decimalValue.toString(16));
颜色组合:
color24 = red << 16 | green << 8 | blue;
color32 = alpha << 24 | red << 16 | green << 8 | blue;

颜色提取:
red = color24 >> 16;
green = color24 >> 8 & 0xFF;
blue = color24 & 0xFF;
alpha = color32 >> 24;
red = color32 >> 16 & 0xFF;
green = color32 >> 8 & 0xFF;
blue = color232 & 0xFF;

穿过某点绘制曲线:
// xt, yt 是我们想要穿过的一点
// x0, y0 以及 x2, y2 是曲线的两端
x1 = xt * 2 – (x0 + x2) / 2;
y1 = yt * 2 – (y0 + y2) / 2;
moveTo(x0, y0);
curveTo(x1, y1, x2, y2);
角速度转换为 x, y 速度:
vx = speed * Math.cos(angle);
vy = speed * Math.sin(angle);

角加速度(作用于物体上的 force)转换为 x, y 加速度:
ax = force * Math.cos(angle);
ay = force * Math.sin(angle);

将加速度加入速度:
vx += ax;
vy += ay;

将速度加入坐标:
movieclip._x += vx;
sprite.y += vy;
移除出界对象:
if(sprite.x – sprite.width / 2 > right ||
sprite.x + sprite.width / 2 < left ||
sprite.y – sprite.height / 2 > bottom ||
sprite.y + sprite.height / 2 < top)
{
// 删除影片的代码
}

重置出界对象:
if(sprite.x – sprite.width / 2 > right ||
sprite.x + sprite.width / 2 < left ||
sprite.y – sprite.height / 2 > bottom ||
sprite.y + sprite.height / 2 < top)
{
// 重置影片的位置和速度
}
屏幕环绕出界对象:
if(sprite.x – sprite.width / 2 > right)
{
sprite.x = left – sprite.width / 2;
}
else if(sprite.x + sprite.width / 2 < left)
{
sprite.x = right + sprite.width / 2;
}
if(sprite.y – sprite.height / 2 > bottom)
{
sprite.y = top – sprite.height / 2;
}
else if(sprite.y + sprite.height / 2 < top)
{
sprite.y = bottom + sprite.height / 2;
}
摩擦力应用(正确方法) :
speed = Math.sqrt(vx * vx + vy * vy);
angle = Math.atan2(vy, vx);
if(speed > friction)
{
speed -= friction;
}
else
{
speed = 0;
}
vx = Math.cos(angle) * speed;
vy = Math.sin(angle) * speed;
摩擦力应用(简便方法)
vx *= friction;
vy *= friction;
简单缓动运动,长形:
var dx:Number = targetX – sprite.x;
var dy:Number = targetY – sprite.y;
vx = dx * easing;
vy = dy * easing;
sprite.x += vx;
sprite.y += vy;

简单缓动运动,中形:
vx = (targetX – sprite.x) * easing;
vy = (targetY – sprite.y) * easing;
sprite.x += vx;
sprite.y += vy;

简单缓动运动,短形:
sprite.x += (targetX – sprite.x) * easing;
sprite.y += (targetY – sprite.y) * easing;
简单弹性运动,长形:
var ax:Number = (targetX – sprite.x) * spring;
var ay:Number = (targetY – sprite.y) * spring;
vx += ax;
vy += ay;
vx *= friction;
vy *= friction;
sprite.x += vx;
sprite.y += vy;

简单弹性运动,中形:
vx += (targetX – sprite.x) * spring;
vy += (targetY – sprite.y) * spring;
vx *= friction;
vy *= friction;
sprite.x += vx;
sprite.y += vy;

简单弹性运动,短形:
vx += (targetX – sprite.x) * spring;
vy += (targetY – sprite.y) * spring;
sprite.x += (vx *= friction);
sprite.y += (vy *= friction);
偏移弹性运动:
var dx:Number = sprite.x – fixedX;
var dy:Number = sprite.y – fixedY;
var angle:Number = Math.atan2(dy, dx);
var targetX:Number = fixedX + Math.cos(angle) * springLength;
var targetY:Number = fixedX + Math.sin(angle) * springLength;
// 如前例弹性运动到 targetX, targetY

距离碰撞检测:
// 从影片 spriteA 和 spriteB 开始
// 如果使用一个空白影片,或影片没有半径(radius)属性
// 可以用宽度或高度除以 2。
var dx:Number = spriteB.x – spriteA.x;
var dy:Number = spriteB.y – spriteA.y;
var dist:Number = Math.sqrt(dx * dx + dy * dy);
if(dist < spriteA.radius + spriteB.radius)
{
// 处理碰撞
}

多物体碰撞检测:
var numObjects:uint = 10;
for(var i:uint = 0; i < numObjects – 1; i++)
{
// 使用变量 i 提取引用
var objectA = objects[i];
for(var j:uint = i+1; j
{
// // 使用变量 j 提取引用
var objectB = objects[j];
// perform collision detection
// between objectA and objectB
}
}
坐标旋转:
x1 = Math.cos(angle) * x – Math.sin(angle) * y;
y1 = Math.cos(angle) * y + Math.sin(angle) * x;

反坐标旋转:
x1 = Math.cos(angle) * x + Math.sin(angle) * ;y
y1 = Math.cos(angle) * y – Math.sin(angle) * x;
动量守恒的数学表达式:
(m0 – m1) * v0 + 2 * m1 * v1
v0Final = ———————————————-
m0 + m1
(m1 – m0) * v1 + 2 * m0 * v0
v1Final = ———————————————
m0 + m1

动量守恒的 ActionScript 表达式,短形:
var vxTotal:Number = vx0 – vx1;
vx0 = ((ball0.mass – ball1.mass) * vx0 +
2 * ball1.mass * vx1) /
(ball0.mass + ball1.mass);
vx1 = vxTotal + vx0;
引力的一般公式:
force = G * m1 * m2 / distance2
ActionScript 实现万有引力:
function gravitate(partA:Ball, partB:Ball):void
{
var dx:Number = partB.x – partA.x;
var dy:Number = partB.y – partA.y;
var distSQ:Number = dx * dx + dy * dy;
var dist:Number = Math.sqrt(distSQ);
var force:Number = partA.mass * partB.mass / distSQ;
var ax:Number = force * dx / dist;
var ay:Number = force * dy / dist;
partA.vx += ax / partA.mass;
partA.vy += ay / partA.mass;
partB.vx -= ax / partB.mass;
partB.vy -= ay / partB.mass;
}
余弦定理
a2 = b2 + c2 – 2 * b * c * cos A
b2 = a2 + c2 – 2 * a * c * cos B
c2 = a2 + b2 – 2 * a * b * cos C

ActionScript 的余弦定理:
A = Math.acos((b * b + c * c – a * a) / (2 * b * c));
B = Math.acos((a * a + c * c – b * b) / (2 * a * c));
C = Math.acos((a * a + b * b – c * c) / (2 * a * b));
基本透视法:
scale = fl / (fl + zpos);
sprite.scaleX = sprite.scaleY = scale;
sprite.alpha = scale; // 可选
sprite.x = vanishingPointX + xpos * scale;
sprite.y = vanishingPointY + ypos * scale;

Z 排序:
// 假设有一个带有 zpos 属性的 3D 物体的数组
objectArray.sortOn(“zpos”, Array.DESCENDING | Array.NUMERIC);
for(var i:uint = 0; i < numObjects; i++)
{
setChildIndex(objectArray[i], i);
}
坐标旋转:
x1 = cos(angleZ) * xpos – sin(angleZ) * ypos;
y1 = cos(angleZ) * ypos + sin(angleZ) * xpos;
x1 = cos(angleY) * xpos – sin(angleY) * zpos;
z1 = cos(angleY) * zpos + sin(angleY) * xpos;
y1 = cos(angleX) * ypos – sin(angleX) * zpos;
z1 = cos(angleX) * zpos + sin(angleX) * ypos;

3D 距离:
dist = Math.sqrt(dx * dx + dy * dy + dz * dz);

How To unCompress SWF

I want to get the swf which is not compressed from Flex Builder. But I don’t know how to set up the Flex Builder. Please kindly tell me if you can answer this question. So now I develop a tool to convert the swf from compressed to uncompressed. If you meet the same problem, you can try this tool. Here is the link. http://source.ceflash.com/sites/download/unZipSwf.air

Related link: http://source.ceflash.com/sites/download/ExtractGraphics.air

Adobe Flash Media Server 3.5 release

Today I get the Adobe Flash Media Server 3.5 from the adobe.com. Install and look at what’s new. 1.Built-in Apache. 2.new face for help website. 3.Flash Media Server Feature Explorer and sample files. useful link: http://www.adobe.com/products/flashmediaserver/pdfs/fms3_5_wp_ue.pdf http://www.adobe.com/devnet/flashmediaserver/articles/fmis_feature_explorer.html http://download.macromedia.com/pub/developer/fms/fms_explorer_samples.zip

Flex 4(Gumbo) IDE Features and Preview

Today I install the Flex 4 (Gumbo) IDE, I want to show you some new features.

[img]http://source.ceflash.com/sites/photos/gumbo.jpg[/img]

1) Package Explorer 如果你熟悉Eclipse中JDT,对这个特性一定不陌生。Flex Builder 3只支持资源浏览器,即以工程文件的形式浏览。而Package Explorer,顾名思义,是针对Pakcage的结构进行浏览,这种模式更适于开发者使用,另外也可以展开一个类来浏览该类的结构(同 Outline)。不仅如此,Package Explorer还支持以这种结构浏览SWC文件。

2) 代码模板 虽然现在我们也可以通过插件来实现代码模板,但是总还是原生支持来的更舒服。代码模板还支持“环境变量”,例如你可以向模板中添加“${project_name}”,则这部分内容会被转化成工程名称。代码模板可以在偏好(Preference)中进行配置。 Continue reading

JSFL save your time

When you change the document class or other as file, you need re-publish the FLA file. I write the script help you to publish them in a short time.

var sourceFolder = fl.browseForFolderURL();
var fileMask = “*.fla”;
var list = FLfile.listFolder(sourceFolder + “/” + fileMask, “files”);
for(var i=0;i<list.length;i++){
var doc = fl.openDocument(sourceFolder+”/”+list[i]);
doc.publish();
doc.close();
}

You just need select the folder contains the FLA file.