Flash动画学习指南(一)——Flash动画学习指南:综述

Adobe Flash Professional 提供多种将动画包含在项目中的方式。这个学习指南解释了如何在 Flash Professional 中使用所有这些动画类型,无论是使用时间轴和 Flash 工作区创建补间动画、将动画预设应用于舞台还是使用 ActionScript 代码使实例产生动画效果。
(注:本《Flash动画学习指南系列》,部分文章在官网已有中文版,其余均由本人Mhycoe翻译。官方英文汇总页官方中文汇总页。)
《Flash动画学习指南(一)——Flash动画学习指南:综述》

Continue reading ‘Flash动画学习指南(一)——Flash动画学习指南:综述’ »

Adobe Flash CS6 体验尝鲜(6)——其余实用的新特性

五一假期前夕,互联网上欢天喜地。Adobe CS6开发套装悄然而至。最让Flash开发者瞩目的莫过于Adobe Flash Pro CS6的各种新功能。本博,将以连载的形式,展示如何使用各种新功能。
Adobe Flash CS6 体验尝鲜(1)——通过Toolkit-for-CreatJS导出HTML5动画
Adobe Flash CS6 体验尝鲜(2)——使用动画帧生成器生成动画序列
Adobe Flash CS6 体验尝鲜(3)——自动打包AIR运行时到AIR应用
Adobe Flash CS6 体验尝鲜(4)——使用模拟器模拟测试移动端AIR应用
Adobe Flash CS6 体验尝鲜(5)——通过直接模式进行硬件加速
Adobe Flash CS6 体验尝鲜(6)——其余实用的新特性

除了之前五篇文章介绍的一些新特性外,Flash CS6 Pro的某些角落,还有一些鲜为人知却那么实用的新功能,包括ANE原生扩展、AIR SDK管理、浏览器测试、丰富的平台支持等。 Continue reading ‘Adobe Flash CS6 体验尝鲜(6)——其余实用的新特性’ »

Adobe Flash CS6 体验尝鲜(5)——通过直接模式进行硬件加速

五一假期前夕,互联网上欢天喜地。Adobe CS6开发套装悄然而至。最让Flash开发者瞩目的莫过于Adobe Flash Pro CS6的各种新功能。本博,将以连载的形式,展示如何使用各种新功能。
Adobe Flash CS6 体验尝鲜(1)——通过Toolkit-for-CreatJS导出HTML5动画
Adobe Flash CS6 体验尝鲜(2)——使用动画帧生成器生成动画序列
Adobe Flash CS6 体验尝鲜(3)——自动打包AIR运行时到AIR应用
Adobe Flash CS6 体验尝鲜(4)——使用模拟器模拟测试移动端AIR应用
Adobe Flash CS6 体验尝鲜(5)——通过直接模式进行硬件加速
Adobe Flash CS6 体验尝鲜(6)——其余实用的新特性

随着页游市场的不断拓展、移动平台的迅猛发展。开发游戏的时候,通过硬件进行加速的技术需求不断地增长。于是我们有了Stage 3D,有了Starling框架,来完成一些我们以前不能完成的事情。 在Flash CS6中,通过设置“硬件加速”(web上)或者“渲染模式”(AIR上)为”直接模式“,进行硬件加速。下面是一个创建并启用硬件加速的Starling Demo。 Continue reading ‘Adobe Flash CS6 体验尝鲜(5)——通过直接模式进行硬件加速’ »

Adobe Flash CS6 体验尝鲜(4)——使用模拟器模拟测试移动端AIR应用

五一假期前夕,互联网上欢天喜地。Adobe CS6开发套装悄然而至。最让Flash开发者瞩目的莫过于Adobe Flash Pro CS6的各种新功能。本博,将以连载的形式,展示如何使用各种新功能。
Adobe Flash CS6 体验尝鲜(1)——通过Toolkit-for-CreatJS导出HTML5动画
Adobe Flash CS6 体验尝鲜(2)——使用动画帧生成器生成动画序列
Adobe Flash CS6 体验尝鲜(3)——自动打包AIR运行时到AIR应用
Adobe Flash CS6 体验尝鲜(4)——使用模拟器模拟测试移动端AIR应用
Adobe Flash CS6 体验尝鲜(5)——通过直接模式进行硬件加速
Adobe Flash CS6 体验尝鲜(6)——其余实用的新特性

在移动开发过程中,真机测试固然直接而且重要。但是如果有一个模拟器能够方面我们快速地测试、也不失为一个不错的测试选择。Flash Pro CS6正式带给Flash开发者这样一个模拟器。模拟手机功能键(菜单键、返回键、搜索键)、Accelerometer(加速度计,我们常说的重力感应)、Touch And Gesture(触摸与手势)和Geolocation(地理定位,我们常说的GPS定位)多种数据,并为开发者提供输入途径,用于测试,并直接显示出效果。 Continue reading ‘Adobe Flash CS6 体验尝鲜(4)——使用模拟器模拟测试移动端AIR应用’ »

Adobe Flash CS6 体验尝鲜(3)——创建和发布打包AIR运行时的AIR应用

五一假期前夕,互联网上欢天喜地。Adobe CS6开发套装悄然而至。最让Flash开发者瞩目的莫过于Adobe Flash Pro CS6的各种新功能。本博,将以连载的形式,展示如何使用各种新功能。
Adobe Flash CS6 体验尝鲜(1)——通过Toolkit-for-CreatJS导出HTML5动画
Adobe Flash CS6 体验尝鲜(2)——使用动画帧生成器生成动画序列
Adobe Flash CS6 体验尝鲜(3)——自动打包AIR运行时到AIR应用
Adobe Flash CS6 体验尝鲜(4)——使用模拟器模拟测试移动端AIR应用
Adobe Flash CS6 体验尝鲜(5)——通过直接模式进行硬件加速
Adobe Flash CS6 体验尝鲜(6)——其余实用的新特性

在Android平台上运行Adobe AIR应用必须有AIR runtime,如果没有就得下载,安装。这可是真正令人相当蛋疼的,不是么。为了不让用户蛋疼,开发者蛋疼了一回。开发应用至于,还蛋疼地手动为应用打个包,摔!~这什么世道。好了,于是乎,Adobe带着Flash CS6 Pro来了,他说,跟Adobe有肉吃,而且用你们不蛋疼。于是Flash Flash CS6多了一个选项,让你发布或测试Adobe AIR for Android的时候,自动嵌入Adobe AIR运行时。 Continue reading ‘Adobe Flash CS6 体验尝鲜(3)——创建和发布打包AIR运行时的AIR应用’ »

Adobe Flash CS6 体验尝鲜(2)——使用动画帧生成器生成动画序列

五一假期前夕,互联网上欢天喜地。Adobe CS6开发套装悄然而至。最让Flash开发者瞩目的莫过于Adobe Flash Pro CS6的各种新功能。本博,将以连载的形式,展示如何使用各种新功能。
Adobe Flash CS6 体验尝鲜(1)——通过Toolkit-for-CreatJS导出HTML5动画
Adobe Flash CS6 体验尝鲜(2)——使用动画帧生成器生成动画序列
Adobe Flash CS6 体验尝鲜(3)——自动打包AIR运行时到AIR应用
Adobe Flash CS6 体验尝鲜(4)——使用模拟器模拟测试移动端AIR应用
Adobe Flash CS6 体验尝鲜(5)——通过直接模式进行硬件加速
Adobe Flash CS6 体验尝鲜(6)——其余实用的新特性

前段时间,Adobe白皮书出来。白皮书里面提到,Adobe Flash的一个重要发展方向就是,游戏。为此,很多人都问到,Adobe会不会出一套工具什么的来完善游戏的开发流。而如今我们看到了。Flash Pro CS6的一个新工具——动画帧生成器。用于把一个影片剪辑导出成动画序列(一个图片文件和一个结构文件),方便游戏开发使用。

Continue reading ‘Adobe Flash CS6 体验尝鲜(2)——使用动画帧生成器生成动画序列’ »

Adobe Flash CS6 体验尝鲜(1)——通过Toolkit-for-CreateJS导出HTML5动画

五一假期前夕,互联网上欢天喜地。Adobe CS6开发套装悄然而至。最让Flash开发者瞩目的莫过于Adobe Flash Pro CS6的各种新功能。本博,将以连载的形式,展示如何使用各种新功能。
Adobe Flash CS6 体验尝鲜(1)——通过Toolkit-for-CreatJS导出HTML5动画
Adobe Flash CS6 体验尝鲜(2)——使用动画帧生成器生成动画序列
Adobe Flash CS6 体验尝鲜(3)——自动打包AIR运行时到AIR应用
Adobe Flash CS6 体验尝鲜(4)——使用模拟器模拟测试移动端AIR应用
Adobe Flash CS6 体验尝鲜(5)——通过直接模式进行硬件加速
Adobe Flash CS6 体验尝鲜(6)——其余实用的新特性

从今天起,使用Flash Pro设计出来的动画及交互性应用,已经不再局限于运行在Flash运行时。通过Adobe官方提供的Toolkit-for-CreatJS扩展工具,我们可以把他们输出成基于CreateJS的HTML5的内容。这相当于为Web开发提供了一个更完善的工作流——把SWF动画过渡到HTML5动画。 Continue reading ‘Adobe Flash CS6 体验尝鲜(1)——通过Toolkit-for-CreateJS导出HTML5动画’ »

ActionScript 3.0声明优先机制

或许你知道,声明一个变量使用关键字 var 。但你不一定知道ActionScript 3.0的一个声明优先的机制。


好了,下面我们先看一个例子:

package
{
import flash.display.Sprite;
public class VarTest extends Sprite
{
private var str:String;
public function VarTest()
{
str = “Mhycoe“;
var str:String;
trace(“外部str:”,this.str);
trace(“内部str:”,str);
}
}
}
从这个例子,或许一些程序员会想:
执行构造函数时,由于还没执行“var str:String;”语句,内部变量str还没被声明。因此,执行第一个语句:“str = “Hello”;”,会对外部变量赋值。然后再执行“var str:String;”语句,声明一个内部变量。
好了,按照上面的思路, 顺理成章,输出结果是:
外部str: Mhycoe
内部str: null
当然,结果当然不是这样,而是这样:
外部str: null
内部str: Mhycoe
误区:很多程序员可能会误以为,Flash是单纯地执行一条语句,解析一条语句。
事实:而事实上,Flash有这么一个解析机制——优先声明机制。也就是说,优先解析声明语句,同时为他们申请相应的内存空间。上面的例子中,执行构造函数,Flash先解析里面的声明语句,声明所需的内部变量,然后进行执行剩下的语句,所以里面所有str变量都特指构造函数的内部变量。


下面我们再看一个例子:
package
{
import flash.display.Sprite;
public class VarTest extends Sprite
{
public function VarTest()
{
i = 1;
trace(i);
var boo:Boolean = false;
if(boo)
{
var i:Boolean;
}
}
}
}
输出:true
结论:显然易见,即使程序逻辑是不会执行声明语句的(判断语句修改成 “if(false)” 的情况除外,会被直接检测出错误),但是只要变量声明语句在函数作用域内任意一个位置出现,声明语句都会被优先解析。

关于BitmapData锁定的分析与研究

传统的游戏开发,使用的就是位图引擎,所以开发者们都对位图的处理十分注意。

其中在Flash游戏开发过程中同样体现这一点的就是,在copyPixels()函数执行前后,先后执行lock()函数和unlock()函数,以提高效率。

但是为什么这样做呢?这样做能提高游戏哪方面的性能呢?背后有蕴含着什么道理呢?

带着种种疑问,今天正研究这个问题。下面请读者跟着我的步伐,来探个究竟。(PS:如果你跟我一样野研究这个问题,也有自己的一番见解,欢迎一起探讨。)


1.首先,位图处理提高性能,马上想到的是渲染效率的提高。

于是写了段代码,连续n帧执行copyPixels()的代码,而且在第一帧测试之前,通过lock()函数,锁住bitmapData,在最后第n帧执行完之后执行函数unlock()。并计算出这n帧过程中的渲染用时。

结果:这样处理,在执行完n帧之后,才更新bitmap。相比起不进行lock()锁定,渲染用时的确短了,帧频也稳定。

分析:由于整过过程都进行了lock()锁定(到了最后才解锁),所以bitmap到了最后才会有变化,屏幕没有更新,肯定就不用渲染重绘,所以帧频稳定也是非常正常的。

问题:问题是,实际使用过程中,我们根本很少可能存在:多帧不用更新bitmap的情况。如果有这种需求,我不如直接在需要更改bitmap的情况下,直接替换bitmap的bitmapData属性算了。

代码:下面是每帧的代码。(记得,在监听Enter Frame事件之前,执行bmp1.lock())

private function onEnterFrame(event:Event):void
{
count++;
if (count > 100)
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
trace(getTimer() – oldTime);
bmp1.unlock();
return;
}
for (var i:int = 0; i < 100; i++)
bmp1.copyPixels(bmp2, new Rectangle(0, 0, 800, 800), new Point(0, 0));
}



2.后来估计,是提高了bitmapData修改时,代码执行的效率。

帮助文档提到:“要提高性能,请在对 setPixel()setPixel32() 方法进行多次调用之前和之后使用此方法及 unlock() 方法。” 可以看出,unlock()方法锁定了位图,可以让给位图作多次写入操作,有很好的性能提高。

于是写了一段代码,只在第一帧上执行(而且官方的demo也是在一帧上执行的)。测试其代码执行的耗时,并跟没有进行锁定的情况对比。

结果:测试差不多一千万次,提高了1秒的时间,看上去很少,但是你要知道,我们做的操作只是,把一个像素,写入一个位图。而且,500 * 500 的图片已经有25万个像素。(测试过getPixel()和getPixel32(),锁不锁定,差别不大)

猜想:给位图写入像素,如果不锁定,那么,每次写入一个像素,都要访问内存的位图对应的地址,需要多次写入内存,降低效率。但是如果锁定了,更新的内容不用立即被渲染,像素的写入操作,首先统一写入到一个cache缓存区,然后在unlock()解锁后,再统一写入内存,只访问内存一次,较少写入次数。

代码:

bmp1.unlock();
var l:uint = 9999999;
oldTime = getTimer();
while (l–)
{
bmp1.setPixel(bmp2.width * Math.random(), bmp2.height * Math.random(), 0xFF0000);
}
trace(“没锁:” + (getTimer() – oldTime));
bmp1.lock();
l =  9999999;
oldTime = getTimer();
while (l–)
{
bmp1.setPixel(bmp2.width * Math.random(), bmp2.height * Math.random(), 0xFF0000);
}
trace(“锁了:” + (getTimer() – oldTime));



附:今天测试过程中,发现,某些电脑的某些Flash播放器,执行lock()函数没效果,而且不止一台电脑这样,希望知情者,能告知一下。

【给Flasher的强心针】Adobe Flash runtimes路线图

经过之前的风风雨雨,无数的舆论与激辩,想必然,有不少Flasher开始心慌,心慌Flash露在何方?
不过可以说,今天你到Adobe的这篇文章后,可以说踏实多了。近日,Adobe官方公布了此文章——《Adobe Flash runtimes路线图》,给Flasher打了一支强心针!
好了上文章:

《Adobe roadmap for the Flash runtimes》(英文·官方)
http://www.adobe.com/devnet/flashplatform/whitepapers/roadmap.html
《Adobe roadmap for the Flash runtimes》(中文·7yue)
http://www.7yue.com/post/474.html
《Adobe roadmap for the Flash runtimes》(英文·PDF)
http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/flashplatform/whitepapers/flash-runtimes-roadmap.pdf

Continue reading ‘【给Flasher的强心针】Adobe Flash runtimes路线图’ »