Posts Tagged ‘actionscript’

Embedding Assets with AS3

在AS3中使用元数据嵌入资源的例子:

package
{
	import flash.display.Bitmap;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.media.Sound;
	import flash.text.Font;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFieldAutoSize;
 
	public class Main extends Sprite {
 
		[Embed(source = '../assets/fd-logo.jpg')]
		private var EmbeddedImage:Class;
		private var image:Bitmap;
 
		[Embed(source = '../assets/clip.swf', symbol = 'EmbeddedClipExample')]
		private var EmbeddedClip:Class;
		private var clip:MovieClip;
 
		[Embed(source = '../assets/bird-sound.mp3')]
		private var EmbeddedSound:Class;
		private var sound:Sound;
 
		[Embed(source='../assets/Arborcrest.ttf', fontName='Arborcrest')]
		public var EmbeddedFont:Class;
		private var field:TextField;
 
		public function Main():void {
			image = new EmbeddedImage();
			image.x = 50;
			image.y = 50;
			addChild(image);
 
			clip = new EmbeddedClip();
			clip.x = 200;
			clip.y = 50;
			addChild(clip);
 
			var s:Sound = new EmbeddedSound();
			s.play(0, 1000);
 
			Font.registerFont(EmbeddedFont);
			var style:TextFormat = new TextFormat();
			style.font = "Arborcrest";
			style.size = 45;
			field = new TextField();
			field.autoSize = TextFieldAutoSize.LEFT;
			field.embedFonts = true;
			field.defaultTextFormat = style;
			field.text = "Embedded Font Example";
			field.x = 50;
			field.y = 150;
			addChild(field);
		}
	}
}

注意必须用Flex编译,Flash的编译器自动忽略元数据。

其他参考:

Bit-101 Embedding Resources with AS3

Rhythm of Lines 源代码放出

不知大家还记得之前的Rhythm of Lines吗,制作公司GT把源代码公开提供下载啦。

其中包括:

  • 演示用的Maya源文件
  • 用于导出数据Python脚本
  • XML数据文件
  • Flash源代码

到此处下载开始研究吧!

There Useful Methods By Bit-101

package com.bit101.utils
{
	public class NumberUtils
	{
		public static function normalize(value:Number, minimum:Number, maximum:Number):Number
		{
			return (value - minimum) / (maximum - minimum);
		}
		public static function interpolate(normValue:Number, minimum:Number, maximum:Number):Number
		{
			return minimum + (maximum - minimum) * normValue;
		}
		public static function map(value:Number, min1:Number, max1:Number, min2:Number, max2:Number):Number
		{
			return interpolate( normalize(value, min1, max1), min2, max2);
		}
	}
}

在算一些相对比例的时候(比如做滚动条),这三个方法很常用。虽然是很简单的数学知识,但是还是记录下来免得突然有时脑筋打结。

normalize() // 计算比例,正常范围是在0~1之间

interpolate() // 根据比例、最大最小值算出对应值

map() // 根据四个极值算出对应值

PV3D优化CPU占用技巧

PV3D菜单两例中我提到了CPU占用的问题,今天把解决思路在此探讨一下。

在第一版完成后,发现了CPU占用过高的问题。按照常规的方法,先逐步减少透明元素等占用资源最大的“罪魁祸首”,如高光动画,阴影等。但是效果不大(只有5%~10%左右的降幅)。

随后尝试将贴图的MC设置为位图缓存(cacheAsBitmap),但其实这步也是无效的。因为PV3D引擎本身就会把所有的元素做位图缓存再重绘。

再尝试把StageQuality降下来,通常做法是运动的时候把质量设置为LOW,待到运动结束再恢复为HIGH。

但是这种做法还需要一个前提才可能成立:那就是我们假设运动等同于屏幕重绘,也就是说运动时设置屏幕重绘,不运动的时候屏幕不重绘。所以我们必须处理 Event.ENTER_FRAME 事件,使其中的逻辑符合我们的假设,那么优化才可能有效。

那么现在问题的症结已经清晰:PV3D引擎的每帧重绘是最占用资源的操作,我们应该减少不必要的重绘。特别是这种互动导航类型的应用,一旦状态固定,就必须移除重绘。

于是我尝试加入状态判断的逻辑,当检测到运动结束后移除 Event.ENTER_FRAME 的侦听。但是产生了一个致命的问题:一旦renderer.renderScene()不执行,鼠标事件(InteractiveScene3DEvent)也侦听不到了。看来PV3D的互动支持必须依赖于每帧重绘或者是重绘方法其中的一些步骤。接下来就让我们把鼠标事件响应的功能找回来。


More...

PV3D菜单两例

2008-4-16-000

为标致车展做的菜单,第一个版本的操作方式类似苹果的iTunes。因为大量用到透明还有交互,CPU占用很高(70~80%)。也没有做优化。

Show/Hide Media

以下是第二个版本:修改了交互方式,优化了CPU占用。等有空我会把一些经验写上来。

Show/Hide Media

PV3D GreatWhite

PV3D的版本变动的很勤快,若是没有一定的精力的确很难啃下来。Google Code上的1.5版本虽然文档比较全,但是架构已经落伍了。所以新加入的同学们一定要从SVN上下最新的版本(在branches\GreatWhite\目录下)。本文发布的时候已经是r531,支持动态变换材质

之前贴过的一些例子是基于旧版本的架构,就不要再看了点这里有基于新架构的文档,但是版本也不是最新,所以有些新加入的功能还是要靠自己去读代码了。此外,这个网站的教程都是基于新版本更新的,建议收藏下来以帮助提高学习效率。

在GreatWhite的架构中,Viewport3D(也就是所有PV3D元素的根Container)中的所有元素都是每帧重画的位图信息。Viewport3D是继承自Sprite,有一个buttonMode属性来改变鼠标状态。但是内部的元素在显示层级上只有位图信息,没有自己的buttonMode。(3D元素最终还是要转化为可以显示出来的DisplayObject)

对互动材质的实现更加合理,只需改变材质的interactive属性即可。发出的事件也是PV3D自定义的InteractiveScene3DEvent,而不是as3内置的那些(MouseEvent)。

这样一来产生一个鼠标状态改变(手型指针)的问题,因为改变容器的buttonMode只会让所有Viewport3D中的物体产生指针变化。如果只想有互动的3D物体才产生变化,解决方法是在监听事件上动态的改变容器的buttonMode属性

Suite 23 - Jumpman won a new FWA

2008-02-23-012
2008-02-23-005
2008-02-23-006

用pv3d搭造的互动展厅,延续一贯的质感。导航比起上一个获奖的版本又先进了不少,真正诠释着Cutting Edge的含义。


More...

Red Bull Flugtag Flight Lab

2008-02-22-021

http://www.redbull.com/flightlab

非常优秀的pv3d应用,绝对有Site of Month的潜力。建议大家都去体会一下基于Flash的3D应用能够做到什么程度。但是我始终对这类应用的速度不太满意,所以也提不起很大的兴趣自己去尝试一下。

Page 1 of 612345»...Last »
Close
E-mail It
Socialized through Gregarious 42