嗨,新朋友,很高兴认识你,欢迎来到我的博客。

Flash酷站(一)

http://www.sponsafier.com/

真3D车模,车身图案自定义,超赞的纹理贴图技术,外加键盘操控试试车跑起来如何

 

自定义图案和图案颜色,车身颜色

旋转查看加试跑,so cool,去试试吧!

http://soytuaire.labuat.com/

 

2009年FWA最佳网站之一,创意十足,画面流畅,音乐和动画配合的非常好,互动效果很强。

 

三星手机和Adidas有抄袭嫌疑,但并没见高于原作。

http://promotion.samsungmobile.com.cn/event/fairy/index.html

http://www.adidas.com/campaigns/styleessentials2010/content/Default.aspx?headerType=discreet&strCountry_adidascom=cn#/journey

http://www.verbatim.jp/senshuken/

U盘机器人大战,作者Roxik很早就被业内称为日本Flash界的大神,凡出自于此大牛手中的作品必为精品。

Blog:http://roxik.com/

其它作品:http://ecodazoo.com/

http://temp.roxik.com/datas/max2007/

http://roxik.com/pictaps/

http://www.windowshop.com/

amazon window shop,如真实书架一样的效果,操作简单

http://k2.inavi.com/main.asp

韩国Inavi3D,应该是做3d地图的公司,网站的3D效果很绚丽。

http://labs.mppark.jp/hige/

3d变脸,换脸 ,能自动捕捉导入图片中的人脸,自动变换面部表情,上传一张自己的帅照试试看。

http://www.hoodieremix.com/

个性化订制服装的颜色和图案。

Flash CS3 加载本地声音

有时候因需要,还是得加载一下本地声音,通常都是同一目录下,没有问题,但如果改变一下目录问题就来了。

  试了半天,原来是文件路径的问题,全路径的写法如下:

var _sound:Sound  = new Sound();
_sound.load(new URLRequest("file://E:\\autumn\\钢琴\\snd\\sound1.mp3"));
_sound.play();

  相对路径的写法如下:

var _sound:Sound  = new Sound();
_sound.load(new URLRequest("snd\\sound1.mp3"));
_sound.play();

  问题的关键就是将“\”"替换成“\\”。

子类为父类的构造函数传递参数

其实很简单在子类的构造中使用下面的语句: super([arg1, ..., argN])

使用as3中的getDefinitionByName函数实现拼写类并动态创建类的实例

使用as3中的getDefinitionByName函数实现动态拼写类并动态创建类的实例

public function getDefinitionByName(name:String):Object
返回参数 name 中指定的类引用

参数  name:String – 类名称
返回  Object – 返回参数 name 中指定的类引用
错误  ReferenceError – 找不到参数 name 对应的公共定义

as3中的getDefinitionByName函数是 返回 name 参数指定的类的类对象引用。

这样就可以使用这个方法根据已知类的路径的字符串来获取类的类对象引用。这样就可以利用这个特性让flash动态创建类的实例…

但问题是:

1. 使用getDefinitionByName方法获得的类必须是在发布的时候被编译到swf文中的,否则就会报错:"ReferenceError: Error #1065: 变量 <类的名字> 未定义。"

2. 由于使用import导入的类(只是作为查找类的路径)并不会在发布swf的时候被编译进去(当然flash.*包里面的类本身就是player中的),只用在代码中使用到的类才会被编译进去…

 

那么,要使用这个方法来实现动态执行怎么办? 只有把可能需要的所有类包含在代码中(比如在定义变量的类型声名时使用 *),并且在开始声名此类,声名时可以随便使用个名字,这样才能使用getDefinitionByName方法…
实际上getDefinitionByName所获得的类名就是前面你所做的声名的名字引用//————————————————-
import com.ooph.parser.*;
//包内有ParserWeb类
var ss:ParserWeb;
//在此处声名ParserWeb类,名为ss(名字不用与下面实例名的相同)
var sortStr:String="Web";
var P:Class = getDefinitionByName("com.ooph.parser.Parser"+sortStr) as Class;
//注意这里要写完整的类路径 "com.ooph.parser.Parser"+sortStr
var newParser:* = new P();

 

AS3.0 + javascript 屏蔽网页中的 Flash右键菜单

Paulius Uza 写的,彻底屏蔽了网页中flash的右键菜单,

原地址:http://www.uza.lt/blog/2007/08/solved-right-click-in-as3/
效    果:http://www.uza.lt/rightclick/
下    载:http://code.google.com/p/custom-context-menu/

其中心思想是利用DOM中的事件机制来截获本来要传递到Flash中的事件,然后该事件用响应的JS代码来处理,该JS代码调用相应的AS回调函数操作Flash。不过接收对象的还是flash,只是它是作为DOM中的一个节点来接收事件的。

Flash同时加载两个swf

在工作时有时会遇到同时加载两个swf文件,并且同一个加载进度条。参考资料for循环Loader(),这样就可同时加载i个,加载类代码如下:

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.hainc.net 
{
	//导入事件类
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.ProgressEvent;
	//导入加载相关类
	import flash.display.Loader;
	import flash.net.URLRequest;
	/**
	 * ...
	 * @riaelite.com
	 * @param per:加载的百分数 data:加载后的数据数组
	 */
	public class LoadSwf extends EventDispatcher
	{
 
		private var _loadByte:uint;
		private var _totalByte:uint;
		private var _swfList:Array=new Array();
		private var _loaderList:Array = new Array();
		private var _swfPath:String;
		private var _parent:*;
		private var _per:uint;
		private var _data:Array = new Array();;
		//
		public static const COMPLETE:String = "COMPLETE"; 
		public static const PROGRESS:String = "PROGRESS";
		/**
		 * 
		 * @param	target 调用加载类的对象
		 * @param	vars  swf:需要加载的flash数组  swfPath:需要加载的flash路径
		 */
		public function LoadSwf(target:Object,vars:Object) 
		{
			//初始化
			_swfList = [];
			//赋值
			_parent = target;
			_swfList = vars.swf;
			_swfPath = vars.swfPath;
			//加载动画开始
			loadSwf();
		}
 
		private function loadSwf():void
		{
			for (var i:uint = 0; i < _swfList.length; i++ ) {
				_loaderList[i] = new Loader();
				_loaderList[i].contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onLoadPro);
				_loaderList[i].contentLoaderInfo.addEventListener(Event.INIT, onLoadInit);
				_loaderList[i].load(new URLRequest(_swfPath + _swfList[i]));
			}
		}
		//加载进程
		private function onLoadPro(e:ProgressEvent):void 
		{
			_loadByte = _totalByte = 0;
			for (var i:String in _loaderList) {
				_loadByte += _loaderList[i].contentLoaderInfo.bytesLoaded;
				_totalByte+= _loaderList[i].contentLoaderInfo.bytesTotal;
 
			}
			_per = Math.ceil(_loadByte*100 / _totalByte);
			dispatchEvent(new Event(LoadSwf.PROGRESS));
		}
		//加载完成
		private function onLoadInit(e:Event):void 
		{
			if ((_loadByte / _totalByte) == 1) {
				for (var i:String in _loaderList) {
					_data[i] = _loaderList[i].content;
				}
				dispatchEvent(new Event(LoadSwf.COMPLETE));
			}
		}
 
		public function get per():uint { return _per; }
 
		public function get data():Array { return _data; }
 
	}
 
}

主文档:

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function Test() 
		{
			_loadSwf = new LoadSwf(this, { swf:["a.swf", "b.swf"] , swfPath:"swf/" } );//加载swf
			_loadSwf.addEventListener(LoadSwf.PROGRESS, onProgress);//加载进度
			_loadSwf.addEventListener(LoadSwf.COMPLETE, onComplete);//加载完成
		}
 
		private function onProgress(e:Event):void 
		{
			trace(e.target.per);
		}
 
		private function onComplete(e:Event):void 
		{
			for each(var c:* in e.target.data) {
					addChild(c);
			}

AS程序员代码命名规则

团队开发过程中少不了要阅读其他成员写的代码,如果每个人都使用自己的一套命名规则,对开发的和谐度是会有比较大影响的。好的命名规则可以让人一眼看出其类型,作用域等。

以下是本人常用的变量命名规则(以下所有命名规则都基于驼峰式命名法,即:多个单词组成的名称除第一个单词外都将首字母大写):

1、变量的命名规则

//静态变量(全大写,以"_"分开各单词)
public static const GAME_SCENE: String = "gameScene";
public static const STAGE_WIDTH: Number = 800;
 
//类公共变量(全小写,无前缀,驼峰式)
public var level: Number = 1;
public var stateName: String = "myState";
 
//类私有变量 (以单下划线开头+类型前缀)
private var _sLevel: String;
private var _mMovie: MovieClip;
 
//类局部变量(以双下划线开头+类型前缀)
var __nLevel: Number = 22;
var __oTarget: Sprite;
 
//形参变量(以"$"开头)
private function funcName($arg1:Type, $arg2:Type):void

2、类命名规则

//一般类(首字母大写,能简捷明了表达出类的意图)
public class GameScene {}
//接口(以字母I作为首字母,名称的首字母也大写)
public interface IPlants {}

3、包命名规则

//首字母小写
plantsGame.ui.plants

4、类代码结构和注释规则
按如下顺序定义类中各变量和方法,注释越详细越好。

/**
* 描 述:类的作用描述
* 作 者:类的创建者
* 创建日期:年.月.日(如08.04.19)
* 修改日期:年.月.日(如08.04.19)
*/
package 包路径
{
	import …
	pubic Class 类名 …(是否继承和实现接口)
	{
		//注释出每个变量的意思,顺序如下
		静态变量
		公共变量
		私有变量
 
		//构造函数,注释出各个参数代表的意思
		pubic function 构造函数名(参数1:类型, 参数2:类型, …)
		{
		}
 
		//公共函数,注释出各个参数代表的意思
		pubic function 函数名(参数1:类型, 参数2:类型, …):返回值
		{
		}
		公共方法2…
		公共方法n…
 
		//重载函数,注释出各个参数代表的意思
		override 作用域 funciton 函数名(参数1:类型, 参数2:类型, …):返回值
		{
		}
 
		//私有函数,注释出各个参数代表的意思
		private function 函数名(参数1:类型, 参数2:类型, …):返回值
		{
		}
		私有方法2…
		私有方法n…
	}
}

AS3中Matrix类详解

前段时间用到使动态加载图片倾斜,查找个下发现Matrix类很好用。常见的操作如旋转显示对象、缩放显示对象、平移显示对象和倾斜显示对象。

首先,我们要看看Matrix类的构造器函数,其实我是想让大家看看他的6个属性,,这6个属性对与我们非常的重要,他决定这我们的最终效果是什么样子的,会产生什么样的倾斜,都由这6个属性控制。看一下!

Matrix(a:Number = 1, b:Number = 0, c:Number = 0, d:Number = 1, tx:Number = 0, ty:Number = 0);

可以看到,6个参数,或者说6个属性分别是a,b,c,d,tx,ty。那么这6个属性分别是做什么的呢?这里我们不按照它的顺序来讲解,而是从最简单的开始。这样大家读起来就方便理解一些。在这6个属性中最简单的2个是最后2个。那么它们起到的作用是什么呢?答案是“位置坐标”。一看到这4个字大家应该这个时候都明白了,实际上这2个属性和我们平常用的x,y属性的作用是完全一样的,他们的作用就是设置对象的横纵坐标!我想到这里大家应该对这点都再清楚不过了!x,y属性是我们最常见的属性了,也是使用率最多的属性,几乎每创建一个对象我们就要设置一下x,y属性。所以这里我们不在做过多的解释了!唯一要注意的一点是tx,ty这2个属性的默认值是0,0。也就是说,当我们没有对这2个参数进行设置的时候,系统会默认的将对象的位置放置到原点坐标,也就是(0,0)点。这一点大家注意一下即可。

好了!最简单的2个属性我们说完了,还剩下4个,那么我们还是遵循由易到难的规则来讲解。这次我们要提到的属性是a,d。有人会问为什么不是a和b呢?实际上,在这6个属性中a和d是一组。所以我们这里要将这2个属性放到一起去讲解。那么这2个属性是做什么用的呢?我再写另外2个和Matrix类无关的2个属性来比较一下!scaleX和scaleY。有人会说,你将这2个属性放到这里做什么?首先,你要知道这2个属性的功能—控制缩放比例。知道了它们的功能实际上就知道了a和d的功能。不错,a和d的功能就是控制缩放比例。当他们的值为1的时候,就表示按照原有大小进行显示,如果为2,就表示放大一倍。非常好理解,可以说简单至极,这4个属性我们可以用其他的4个属性来间接理解,功能上没有任何区别,只是放到的类中不同罢了。相信大家读到这里会感觉到,原来Matrix类没有什么神秘的,不过是一个普普通通的类而已。

最后,我们还剩下2个属性,也是最难理解,最难明白的两个属性。我将用很大的篇幅来介绍这2个属性,细致的来分析它们的用法及使用注意事项。

b,c默认值为0。看到这里我们应该知道,默认是没有倾斜的。说到这里,可能很多人多这两个属性的功能还不清楚,在此再强调一遍,这两个属性是控制显示对象倾斜的。所谓倾斜,举一个最简单的例子,就是把一个长方形编程一个平行四边形。这样解释就直观多了。好了!那么他们怎么样来控制倾斜的度数呢?这才是我们的重点,就是如何控制倾斜的角度。说到角度,先抛开b,c不说,在FLASH当中我们不可以直接使用度数,为什么呢?不知道,没有原因,ADOBE公司就是这么设计的,没办法。那么我们用什么来表示度数呢?我们可以使用弧度单位来表示度数。这里要提一句“360°=2π弧度”。这个公式大家一定要记住,以后会经常用到,那么比如说我们要表示30°,那应该怎么写呢?就是写成下面这样:

30*π/180

在AS3中的写法就是这样的:

30*Math.PI/180

这样写,在AS3中就表示30°了。好了!我们先来看b吧。这个b表示显示对象沿Y轴倾斜。我们来看一段代码:

var ju:Matrix = new Matrix(1,2,0,1,0,0);
a_mc.transform.matrix = ju;

这段代码的b属性我设置成了2,那么也就是说元件会沿Y轴向下倾斜。我们来看原图片,这是没有执行语句前的图像。

这里,我为了标识出蓝色方块原来的位置,我用红色的线来记录一下。注意:红色的线只起到一个标尺的作用。好了!下面我们来执行一下语句。

我们看到,原来的矩形已经严重倾斜了!这就是倾斜的效果。那么我们要注意的是什么呢?或者说我想给大家的只是点是什么呢?请大家注意,矩形虽然倾斜了,但是他的宽没有变化,同时,他的左右两条边的长度也没有发生变化。唯一变化的就是它的高和上下两条边。这一点大家要值得注意。有人会说了!这只是向右侧倾斜,那如果我想向左侧倾斜怎么办呢?简单,我们只需要将b的值改为负数即可!这里就不在做演示了!大家可以自行实验。那么下面要讲解的就是如何去控制倾斜的角度!这里我们先来看一个图!

我们来看一下这个图,现在假如我想要这个蓝色的矩形倾斜30°,也就是说∠A的度数为30°。那么这个时候我们怎么表示属性b呢?我们要使用到三角函数中的正切。所为正切就是这样的。

正切(tan):角α的对边比上邻边

这是比较正确且规范的说法。那么好了!这个正切值就表示了属性b。在这个实例中,正切值实际上就是P/Q。得到的就是正切值。那么,我们不可能在没一个程序中自己手动的去计算我们这个正切值。所以这里又要用到AS3中的Math类。在这个工具类中有专门用于计算正切值的方法。我们来实际的写一个程序来看一下。代码如下:

var ju:Matrix = new Matrix(1,Math.tan(30*Math.PI/180),0,1,0,0);
a_mc.transform.matrix = ju;

这里我们就将倾斜角度设置为了30°。我们测试一下影片就可以看到效果了!这就是b属性的用法,那么c属性又说做什么的呢?和b属性的功能相同,只不过这次是沿X轴进行倾斜,我们同样倾斜30°来看一下。

var ju:Matrix = new Matrix(1,0,Math.tan(30*Math.PI/180),1,0,0);
a_mc.transform.matrix = ju;

不过这次要注意的是,虽然倾斜了,但是矩形的上下两条边并没有改变长度,且矩形的高也没有改变。

这就是向右倾斜。如果想要想做倾斜也非常的简单,只要将c的属性改成负数就可以了。

最后,我们来看一种比较常用的情况,就是X轴Y周同时倾斜。代码如下,我们还是倾斜30°。

var ju:Matrix = new Matrix(1,Math.tan(30*Math.PI/180),Math.tan(30*Math.PI/180),1,0,0);
a_mc.transform.matrix = ju;

运行效果如下:

这次我们就不能保证宽高都没有变化了!应为X轴和Y轴都发生了倾斜,所以都改变了!

好了!关于Matrix类我们就说这么多,具体的使用技巧还需要大家实践得来!886各位!今天就写到这里!以后有什么新的应用还会写出来给大家参考的!

Flash AS3.0实现图片倒影

写了一段实现物体倒影类,代码如下:

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.myBitMap 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.geom.Matrix;
	import flash.display.Graphics;
	import flash.geom.Point;
	import flash.display.GradientType;
	/**
	 * 反射倒影生成类...
	 * riaelite.com
	 */
    public class SWreflection extends Sprite{
        private var _reflection:Bitmap;
		private var _bit:BitmapData;
		private var _mtx:Matrix;
		private var _rBox:Shape;
		private var _Alpha:BitmapData;
		/**
		 * 构造
		 * @param	$Target 目标对象,即要添加投影的对象
		 * @param	$Height 投影高度,即投影从出现到虚化的长度
		 * @param	$Alpha 投影透明度
		 */
        public function SWreflection($Target:DisplayObject,$Height:Number=200,$Alpha:Number=1):void  {
			_reflection = new Bitmap(getReflection($Target,$Height));//
			_reflection.smoothing = true ;//平滑
			_reflection.alpha = $Alpha;
			addChild(_reflection); 
			this.x = $Target.x;
			this.y = $Target.y + $Target.height;
        }
        /**
         * 生成投影
         * @param	target 目标
         * @param	Height 高度
         * @return
         */
        private function getReflection(target:DisplayObject, Height:Number = -1):BitmapData {
			if (Height < 0) Height = target.height ;
			_bit = new BitmapData(target.width, Height, true, 0); 
			_bit.draw(target, new Matrix(1, 0, 0, -1, 0, target.height));  
			_mtx = new Matrix(); 
			_mtx.createGradientBox(target.width, Height, 0.5 * Math.PI); 
			_rBox = new Shape(); 
			_rBox.graphics.beginGradientFill(GradientType.LINEAR, [0, 0], [0.5, 0], [0, 255], _mtx)  
			_rBox.graphics.drawRect(0, 0, target.width, Height);  _rBox.graphics.endFill();  
			_Alpha = new BitmapData(target.width, Height, true, 0); 
			_Alpha.draw(_rBox); 
			_bit.copyPixels(_bit, _bit.rect, new Point(0, 0), _Alpha, new Point(0, 0), false); 
			return _bit.clone();
		}
    }
}

AS3组件之UILoader加载组件

此示例演示与 UILoader 类的简单交互。

若要运行该示例,请按照下列步骤操作:

  1. 将 UILoader 组件的一个实例放置在舞台上,并为它指定实例名称 uiLoader
  2. 将 Label 组件的一个实例放置在 UILoader 实例的上方,并为它指定实例名称 uiLoaderLabel
  3. 将该代码作为 UILoaderExample.as 另存到 FLA 所在的同一目录中。
  4. 将 FLA 文件中的 Document 类设置为 UILoaderExample。
?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.net.URLRequest;
 
    public class UILoaderExample extends Sprite
    {
        private var sampleImagePath:String = "http://www.zg05.com/Img/logo.gif";
 
        public function UILoaderExample() {
            var request:URLRequest = new URLRequest(sampleImagePath);
            uiLoader.scaleContent = false;
            uiLoader.addEventListener(Event.COMPLETE,loadComplete);
            uiLoader.addEventListener(ProgressEvent.PROGRESS,loadProgress);            
            uiLoader.load(request);
        }
        private function loadProgress(e:ProgressEvent):void {
            uiLoaderLabel.text = String(e.target.percentLoaded);
        }
        private function loadComplete(e:Event):void {
            uiLoaderLabel.text = "Load Complete";    
        }
    }
}