as的编码转换

2012 年 05 月 02 日 at 下午 7:41分类目录:flash actionScript3 | flex/flashBuilder

对比一下as2和as3中的escape()的说明
escape(expression:String) : String
将参数转换为字符串,并以 URL 编码格式对其进行编码,在这种格式中,所有非字母数字的字符都替换为 % 十六进制序列。当用于 URL 编码的字符串中时,百分号 (%) 用于引入转义字符,不与模运算符 (%) 等效。
可用性:ActionScript 1.0、Flash Player 5

在as3中红字部分改为了:大多数非字母数字的字符,@ – _ . * + / 这7个特殊字符不再被转义了。
在实际过程中,因为要给在给服务器端发请求时传递相应的参数,这些参数只是字母数字,及空格,下划线等特殊字符,所以,为了配合原来的服务器程序,还需要处理一下这些不能被转义的字符。。
用String.replace()加RegExp(正则表达式)来做字符串替换还是很方便的。–b..

var code : String = “CD+DSX3232XSF SAFahep”;
trace(escape(code));//CD+DSX3232XSF%20SAFahep
code = code.replace(/[+]/g,’%2B’);
code = code.replace(/[ ]/g,’+');
trace(code);//CD%2BDSX3232XSF+SAFahep

两者对于中文的转义很是不同,而且,在as3中新增了几个用于编码解码函,encodeURI,encodeURIComponent,decodeURI,decodeURIComponent。

补充:
众所周知,在ActionScript 3中,除了escape和unescape两个字符串编码和解码函数以外,新增了encodeURI,encodeURIComponent, decodeURI,decodeURIComponent四个函数,在开发过程中遇到了与此相关的问题,仔细研究了一下这as3中的六个函数:

除了官方文档里的说明以外,我补充几点我在使用过程中发现的一些值得注意的地方,至于AS3中escape和encodeURI的区别,就不在这里说了:

1,记得以前有一次我在as中escape,同学一看我用的是escape,于是在js中就用了unescape,但却始终得不到原始的值,原因就是在 AS2中,没有与js的escape对应的函数,而AS2中的escape,实现的却是其他语言中的encodeURI或URIEncode的功能, AS3中,终于把escape和encodeURI区分开来了,AS3中的encodeURI和decodeURI与AS2中的escape和 unescape基本一样,而AS3中的escape则和js等其他语言保持了一致,例如:
在as2中:

  1. trace(escape(“我见犹怜”));  //输出:%E6%88%91%E8%A7%81%E7%8A%B9%E6%80%9C
  2. trace(unescape(“:%E6%88%91%E8%A7%81%E7%8A%B9%E6%80%9C”));  输出:我见犹怜


在as3中:

  1. trace(encodeURI(“我见犹怜”)); //输出:%E6%88%91%E8%A7%81%E7%8A%B9%E6%80%9C
  2. trace(decodeURI(“:%E6%88%91%E8%A7%81%E7%8A%B9%E6%80%9C”));  输出:我见犹怜
  3. trace(escape(“我见犹怜”)); //输出:%u6211%u89C1%u72B9%u601C
  4. trace(unescape(“%u6211%u89C1%u72B9%u601C”)); //输出:我见犹怜


2,AS3中的encodeURI和decodeURI与AS2中escape和unescape不一样的地方:
在as2中,System.useCodepage影响escape对双字节字符编码和解码的结果,注意下面System.useCodepage设为true和false的时候,输出是不同的:

  1. System.useCodepage=true;
  2. trace(escape(“我见犹怜”)); //输出:%CE%D2%BC%FB%D3%CC%C1%AF
  3. System.useCodepage=false;
  4. trace(escape(“我见犹怜”)); //输出:%E6%88%91%E8%A7%81%E7%8A%B9%E6%80%9C


在as3中,System.useCodepage不影响decodeURI的结果,两个结果是一样的:

  1. System.useCodePage = true;
  2. trace(encodeURI(“我见犹怜”)); //输出:%E6%88%91%E8%A7%81%E7%8A%B9%E6%80%9C
  3. System.useCodePage = false;
  4. trace(encodeURI(“我见犹怜”)); //输出:%E6%88%91%E8%A7%81%E7%8A%B9%E6%80%9C


在as3中,escape同样也不受System.useCodePage的影响:

  1. System.useCodePage = true;
  2. trace(escape(“我见犹怜”)); //输出:%u6211%u89C1%u72B9%u601C
  3. System.useCodePage = false;
  4. trace(unescape(“我见犹怜”)); //输出:%u6211%u89C1%u72B9%u601C


这意味着在AS3中,所有运用到escape和encodeURI的地方,都不能再通过设置System.useCodePage来改变编解码的方式,与后台或其他程序语言交互就必须考虑这个问题,以后后台编码的时候,记得要以UTF-8编码,否则decodeURI就会抛出URIError,提示无效的URI;也许有人会和我我一开始一样觉得这样很不爽,其实这样做是有道理的。

flex 嵌入字体的方法

2012 年 04 月 11 日 at 下午 7:45分类目录:flex/flashBuilder

<?xml version="1.0"?>
<!-- Simple example to demonstrate the Halo Fade effect. -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx"
        initialize="Font.registerFont(myriad_font);">

    <fx:Script>
        <![CDATA[

            import flash.text.Font;

            [Embed("assets/MyriadWebPro.ttf", fontName="MyMyriad")]
            public var myriad_font:Class;
        ]]>
    </fx:Script>

    <fx:Declarations>
        <mx:Fade id="fadeOut" duration="1000" alphaFrom="1.0" alphaTo="0.0"/>
        <mx:Fade id="fadeIn" duration="1000" alphaFrom="0.0" alphaTo="1.0"/>
    </fx:Declarations>

    <s:Panel title="Halo Fade Effect Example" width="95%" height="95%">
        <s:VGroup left="20" right="20" top="20" bottom="20">
            <s:Label width="100%" color="blue"
                text="Use the Fade effect to show or hide the text and image. Use an embedded font when applying the Fade effect to text."/>

            <mx:Text text="Nokia 9930"
                fontFamily="MyMyriad" fontSize="14"
                visible="{cb1.selected}"
                hideEffect="{fadeOut}" showEffect="{fadeIn}"/>

            <mx:Image source="@Embed(source='assets/Nokia_6630.png')"
                visible="{cb1.selected}"
                hideEffect="{fadeOut}" showEffect="{fadeIn}"/>

            <s:CheckBox id="cb1" label="visible" selected="true"/>
        </s:VGroup>
    </s:Panel>
</s:Application>

flash as3常用转义字符

2012 年 03 月 30 日 at 下午 2:34分类目录:优普天下UPFLASH

常用转义字符:(其中 换页符、制表符也不太常用)

转义序列        转义结果
 \b            空格符
 \f            换页符
 \n            换行符
 \r            回车符
 \t            制表符(Tab)
 \"            双引号
 \'            单引号
 \\            反斜线符号(\)

附上部分例子:

一、空格符。\b

  var str:String=”12345\b67890″
  会输出:12345 67890

二、换页符。\f

  var str:String=”12345\f67890″
  输出:12345 67890

三、换行符。\n

  var str:String=”12345\n67890″;
   输出12345
     67890

四、回车符。\r

  var str:String=”12345\r67890″
  输出:12345(此处和换行符效果类似)
         67890

五、制表符。\t

  var str:String=”12345\t67890″
  输出:12345   67890(间隔变大)

八、双引号。\”

九、单引号。\’

十、单个反斜杠字符。\\

AS3数组常用方法整理

2012 年 03 月 11 日 at 下午 9:24分类目录:flash actionScript3 | flex/flashBuilder

indexOf lastIndexOf

返回索引,查找不到返回-1

var arr:Array = ["a","b","c","d","e","f","g"];
arr.indexOf("e");
arr.indexOf("b",2);//从第3个元素开始查找 
arr.lastIndexOf("b",2);//从第3个元素反向查找

push unshift

在首尾插入元素,返回增加元素后数组的长度

var arr:Array = ["a","b","c","d","e","f","g"];
arr.push("h");//在数组尾部插入元素h 
arr.push("i","j","k");//在数组尾部插入多个元素 
arr.unshift("h");//在数组头部插入元素h 
arr.unshift("i","j","k");//在数组头部插入多个元素

pop shift

删除首尾元素,返回被删除的元素

var arr:Array = ["a","b","c","d","e","f","g"];
arr.pop();//删除尾元素 
arr.shift();//删除首元素 

splice

删除数组一段连续的元素,返回被删除的元素数组

var arr:Array = ["a","b","c","d","e","f","g"];
arr.splice(删除点的索引,要删除的个数,新元素1,新元素2);
arr.splice(2,3,"o","p","q");//从索引为2开始,删除3个元素,并插入3个新元素"o","p","q"
arr.splice(-2,3,"o","p","q");//从倒数为2的索引开始,删除3个元素,并插入3个新元素"o","p","q"
arr.splice(2,3);//单纯的删除从索引2开始的3个元素(不插入) 
arr.splice(2);//单纯的删除从索引2开始的所有元素(不插入) 
arr.splice(2,0,"x","y","z");//在索引2的后面插入3个新元素(不删除)

slice

获取数组中的部分元素

var arr:Array = ["a","b","c","d","e","f","g"];
var newArr:Array = arr.slice();//浅复制数组 
var newArr:Array = arr.slice(2);
var newArr:Array = arr.slice(-2);
var newArr:Array = arr.slice(2,5);

concat

将多个元素或数组拼接成一个新数组

var arr:Array = ["a","b","c","d","e","f","g"];
var newArr = arr.concat("x","y","z");//原数组不变,新数组是原数组拼接后的结果 
var newArr = arr.concat();//浅复制数组

reverse

将数组倒序排列

var arr:Array = ["a","b","c"];
arr.reverse();//得到"c","b","a" 

sort

sort() 按默认排序,注意:区分大小写,数字也是按字符串来处理

var arr:Array = ["b","c","a"];
arr.sort();//得到"a","b","c" arr = ["210","1111","30"]; 
arr.soft();//得到"1111","210","30" arr = ["b","X","A","c"]; 
arr.sort();//得到"A","X","b","c"
var arr:Array = ["b","C",235,"a",38,"X",8641];
trace(arr.sort());//得到235,38,8641,C,X,a,b

sort(args) 按参数排序,一共有5种(注意:除了Array.RETURNINDEXEDARRAY,其它方式只要排序成功,都会实际改变数组)

1. sort(Array.CASEINSENSITIVE) 同sort(),不过不区分大小写,数字也是按字符串来处理

var arr = ["b","X","A","c"];
arr.sort(Array.CASEINSENSITIVE);//得到"A","b","c","X"

2. sort(Array.DESCENDING) 按字符串的倒序排列,区分大小写,数字也是按字符串来处理

var arr:Array = ["b","C","a","X",235,8641,38];
trace(arr.sort(Array.DESCENDING));//得到b,a,X,C,8641,38,235

3. sort(Array.UNIQUESORT) 同sort(),如果数组有相同元素,则放弃排序,返回0

var arr:Array = ["b","C","a","X",235,8641,38,2365];
if(arr.sort(Array.UNIQUESORT)=="0")
{
    trace("有相同元素");
}
else
{
    trace("没有相同元素");
}

4. sort(Array.RETURNINDEXEDARRAY) 同sort(),返回排序后的索引列表,原数组不变

var arr:Array = ["b","C","a","X",235,8641,38,2365];
trace(arr.sort(Array.RETURNINDEXEDARRAY));//得到4,7,6,5,1,3,2,0 
trace(arr);//得到b,C,a,X,235,8641,38,2365(原数组)

5. sort(Array.NUMERIC) 按数字从小到大排序,如果数组里含有非数字,会抛出异常

var arr:Array = [235,8641,38,2365];
trace(arr.sort(Array.NUMERIC));//得到38,235,2365,8641

sort(函数名) 按自定义函数比较,该函数必须接受2个参数,返回值为1、-1、0

public function Sample1008()
{
    var objA:Object = {price:200,quantity:2};
    var objB:Object = {price:400,quantity:4};
    var objC:Object = {price:100,quantity:1};
    var arr:Array = [objA,objB,objC];
    trace("原数组是:");
    for(var i:int=0;i<arr.length;i++)
    {
        trace(arr[i].price);
    }
    arr.sort(Compare);
    trace("排序后的数组是:");
    for(var j:int=0;j<arr.length;j++)
    {
        trace(arr[j].price);
    }
}
private function Compare(paraA:Object,paraB:Object):int
{
    var totalPriceA:int = paraA.price * paraA.quantity;
    var totalPriceB:int = paraB.price * paraB.quantity;
    if(totalPriceA>totalPriceB)
    {
        return 1;
    }
    else if(totalPriceA<totalPriceB)
    {
        return -1;
    }
    else
    {
        return 0;
    }
}
/*运行结果是
原数组是:
200
400
100
排序后的数组是:
100
200
400*/

sortOn

常用于对象数组的排序

var obj1:MyClass = new MyClass();
var obj2:MyClass = new MyClass();
var obj3:MyClass = new MyClass();
obj1.orderID = 300;
obj2.orderID = 100;
obj3.orderID = 200;
var arr:Array = [obj1,obj2,obj3];
//trace(arr.sortOn("orderID")); 
trace(arr.sortOn("orderID",Array.RETURNINDEXEDARRAY));//得到索引1,2,0

every

判断数组里的每个元素是否满足某些条件,只有全部都满足才为true

public function Sample1008()
{
    //必须5个人都满70级,才可以进副本
   var player1:Object = {name:"wayne",level:70};
    var player2:Object = {name:"tom",level:69};
    var player3:Object = {name:"jacky",level:70};
    var player4:Object = {name:"andy",level:68};
    var player5:Object = {name:"bill",level:70}; 

    var playerList:Array = [player1,player2,player3,player4,player5];
    if(!playerList.every(CheckLevel))
    {
        trace("队伍中有人等级未到70,无法进入副本");
    }
}
private function CheckLevel(item:*,index:int,arr:Array):Boolean
{
    if(item.level<70)
    {
       //trace(item.name+"等级未到70,无法进入副本"); 
        return false;
    }
    return true;
}

map

映射器,逐个处理数组中的元素,最后生成一个修改后的新数组(不会更改原数组)

public function Sample1008()
{
    var player1:Object = {name:"wayne",level:70};
    var player2:Object = {name:"tom",level:69};
    var player3:Object = {name:"jacky",level:70};
    var player4:Object = {name:"andy",level:68};
    var player5:Object = {name:"bill",level:70}; 

    var playerList:Array = [player1,player2,player3,player4,player5]; 

    for(var i:int = 0; i<playerList.length; i++)
    {
        trace("player"+(i+1)+"的所有属性是:");
        for(var attr:String  in  playerList[i])
        {
            trace(attr+":"+playerList[i][attr]);
        }
    } 

   //为每个玩家添加新属性"声望值"
    var newArray:Array = playerList.map(AddNewAttribute); 

    trace("-----------------Map后的结果-----------------"); 

    for(var j:int = 0; j<newArray.length; j++)
    {
        trace("player"+(j+1)+"的所有属性是:");
        for(var attr2:String  in  newArray[j])
        {
            trace(attr2+":"+newArray[j][attr2]);
        }
    }
}
private function AddNewAttribute(item:*,index:int,arr:Array):Object
{
    var tmpPlayer:Object = {};
    tmpPlayer.name = item.name;
    tmpPlayer.level = item.level;
    tmpPlayer.repute = 99;
    return tmpPlayer;
}

some

判断数组里的每个元素是否满足某些条件,只要有一个满足就返回true

public function Sample1008()
{
   //只要队伍里有一个人声望达到140以上,则全队可以进副本 
   var player1:Object = {name:"wayne",level:70,repute:100};
    var player2:Object = {name:"tom",level:70,repute:190};
    var player3:Object = {name:"jacky",level:70,repute:50};
    var player4:Object = {name:"andy",level:70,repute:230};
    var player5:Object = {name:"bill",level:70,repute:120}; 

    var playerList:Array = [player1,player2,player3,player4,player5]; 

    if(playerList.some(CheckRepute))
    {
        trace("可以进入副本");
    }
    else
    {
        trace("队伍里没有成员声望达到140,无法进入副本");
    }
}
private function CheckRepute(item:*,index:int,arr:Array):Boolean
{
    if(item.repute>=140)
    {
        return true;
    }
    return false;
}

filter

将数组里满足特定条件的元素提取出来,生成一个新数组

public function Sample1008()
{
   //得到队伍里所有声望达到要求的成员 
   var player1:Object = {name:"wayne",level:70,repute:100};
    var player2:Object = {name:"tom",level:70,repute:190};
    var player3:Object = {name:"jacky",level:70,repute:50};
    var player4:Object = {name:"andy",level:70,repute:230};
    var player5:Object = {name:"bill",level:70,repute:120}; 

    var playerList:Array = [player1,player2,player3,player4,player5]; 

    var newArray:Array = playerList.filter(CheckRepute); 

    for(var i:int=0; i<newArray.length; i++)
    {
        for(var attr:String  in  newArray[i])
        {
            trace(attr+":"+newArray[i][attr]);
        }
    }
}
private function CheckRepute(item:*,index:int,arr:Array):Boolean
{
    if(item.repute>=140)
    {
        return true;
    }
    return false;
}

forEach

对数组里的元素逐个进行操作,实际改变了数组(不同于map)

public function Sample1008()
{
   //在每个玩家名字前面加上公会名称 
   var player1:Object = {name:"wayne",level:70,repute:100};
    var player2:Object = {name:"tom",level:70,repute:190};
    var player3:Object = {name:"jacky",level:70,repute:50};
    var player4:Object = {name:"andy",level:70,repute:230};
    var player5:Object = {name:"bill",level:70,repute:120}; 

    var playerList:Array = [player1,player2,player3,player4,player5]; 

    playerList.forEach(BuildName); 

    for(var i:int=0; i<playerList.length; i++)
    {
        for(var attr:String  in  playerList[i])
        {
            trace(attr+":"+playerList[i][attr]);
        }
    }
}
private function BuildName(item:*,index:int,arr:Array):void
{
    item.name = "暗界--"+item.name;
}

AIR如何启动调用本地exe可执行文件(仿qq截屏工具)

2012 年 03 月 08 日 at 下午 5:19分类目录:优普天下UPFLASH

这个调用方式是AIR2.0的一个新特性——可以启动本地进程并与本地进程进行数据通讯。这个方法主要是NativeProcess。

假设调用应用程序目录下ExtendApplication文件夹里的SnapShot.exe可执行截图工具,用法如下:

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.MouseEvent;
import flash.events.NativeProcessExitEvent;
import flash.filesystem.File;
import flash.desktop.NativeProcessStartupInfo;
import flash.desktop.NativeProcess;
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.events.EventDispatcher;
import flash.events.Event;

var _shotComplete:Event;
var _file:File;
var _nativeProcessStartupInfo:NativeProcessStartupInfo;
var _process:NativeProcess;
var _bitmapData:BitmapData;
var _bitmap:Bitmap;


_file = File.applicationDirectory.resolvePath(“ExtendApplication/SnapShot.exe”);
trace(_file.nativePath);
_nativeProcessStartupInfo = new NativeProcessStartupInfo();
_nativeProcessStartupInfo.executable = _file;

_process = new NativeProcess();
_process.start(_nativeProcessStartupInfo);
_process.addEventListener(NativeProcessExitEvent.EXIT,onExit);

function onExit(e:NativeProcessExitEvent):void
{
if (Clipboard.generalClipboard.hasFormat(ClipboardFormats.BITMAP_FORMAT))
{
_bitmapData = Clipboard.generalClipboard.getData(ClipboardFormats.BITMAP_FORMAT) as BitmapData;
_bitmap = new Bitmap(_bitmapData);
addChild(_bitmap);

}

}

注意:

要使程序运行成功要在“文件名-app.xml”这个文件中的最后一行

</application>

前面加上

<supportedProfiles>extendedDesktop</supportedProfiles>

否则运行失败会提示:Error: Error #3219: The NativeProcess could not be started. ’Not supported in current profile.’

flashdevelop air 打开 exe 文件 最终解决办法

2012 年 03 月 08 日 at 下午 5:14分类目录:优普天下UPFLASH

flashdevelop可以创建一个AIR Flex4 Projector 的项目  可以使用到flex的组件等一些功能

在air中 我们可以将application.xml 里面的配置中的【supportedProfiles】标签一项

改成: <supportedProfiles>extendedDesktop desktop</supportedProfiles>

然后下面AIR中打开外部exe文件的代码:

public class ExeSprite {

private var file:File = new File();

private var nativeProcessStartupInfo:NativeProcessStartupInfo;

public function ExeSprite(_file:String) {

NativeApplication.nativeApplication.autoExit = true;

file = file.resolvePath(“sample.exe”);

nativeProcessStartupInfo = new NativeProcessStartupInfo();

nativeProcessStartupInfo.executable = file;

//file.openWithDefaultApplication();

var process:NativeProcess = new NativeProcess();

process.start(nativeProcessStartupInfo);

}

}

问题来了 在flashdevelop发布预览AIR的时候 可以正常的打开外部的exe文件  当我们打包成air文件后 装好 打开外部exe就失效了  这个ADOBE官方有一个解释是【.AIR文件不支持NativeProcess调用本地EXE】

原来是不支持AIR打开本地的EXE文件 ,,不过还是有一个解决的办法。。可以将AIR项目打包成EXE文件  FLEX的SDK中 ADT命令是可以将我们的air项目打包成exe文件的 只有打包成exe文件的AIR项目  才能自由的打开本地的EXE文件

打包方式:

1、先将你的AIR项目打包成AIR文件,打包时记得将installation栏中的Desktop 和 Extended Desktop选项选上

2、将打包好的air文件(如sample.air)复制到FLEXSDK的BIN目录下;

3、开始–运行—CMD—CD命令修改当前目录为FLEXSDK下的BIN目录;

4、在CMD内输入:adt -package -target native sample.exe sample.air

下面是我的SDK目录

D:\Program Files\FlashDevelop\Tools\flexsdk\bin>adt -package -target native sample.exe sample.air

回车–>在bin目录中就会生成一个exe的AIR项目文件了  装好后 前面AIR打不开的EXE文件  成功的打开了。。神奇!!

as3 fscommand命令

2012 年 03 月 05 日 at 下午 6:14分类目录:flash actionScript3 | flex/flashBuilder

fscommand()函数
flash.system 包中具有一个包级函数 fscommand(),可方便 SWF 文件与其容器之间的通信。例如:设置全屏、关闭播放器、缩放(设置播放器始终按 SWF 文件的原始大小绘制 SWF 文件,从不进行缩放)、执行应用程序
格式 : public function fscommand(command:String, args:String = “”):void
语言版本 :ActionScript 3.0
Player 版本 :Flash Player 9
包 : flash.system
例子 :
import flash.system.fscommand;
fscommand(“fullscreen”, “true”);   //指定 true 可将 Flash Player 设置为全屏模式。 指定 false 可将播放器返回到标准菜单视图。
fscommand(“allowscale”, “false”); //指定 false 可设置播放器始终按 SWF 文件的原始大小绘制 SWF 文件,从不进行缩放。 指定 true 会强制将 SWF 文件缩放到播放器的 100% 大小。
fscommand(“quit”); //关闭播放器。
fscommand(“exec”,”指向应用程序的路径”); //在放映文件内执行应用程序。

fscommand()函数flash.system 包中具有一个包级函数 fscommand(),可方便 SWF 文件与其容器之间的通信。例如:设置全屏、关闭播放器、缩放(设置播放器始终按 SWF 文件的原始大小绘制 SWF 文件,从不进行缩放)、执行应用程序
格式 : public function fscommand(command:String, args:String = “”):void
语言版本 :ActionScript 3.0Player 版本 :Flash Player 9包 : flash.system
例子 :
import flash.system.fscommand;fscommand(“fullscreen”, “true”);   //指定 true 可将 Flash Player 设置为全屏模式。 指定 false 可将播放器返回到标准菜单视图。
fscommand(“allowscale”, “false”); //指定 false 可设置播放器始终按 SWF 文件的原始大小绘制 SWF 文件,从不进行缩放。 指定 true 会强制将 SWF 文件缩放到播放器的 100% 大小。
fscommand(“quit”); //关闭播放器。
fscommand(“exec”,”指向应用程序的路径”); //在放映文件内执行应用程序。

flash as3调用多个摄像头的源代码

2012 年 01 月 30 日 at 下午 5:06分类目录:flash actionScript3 | flex/flashBuilder

package as3
{
import cn.upflash.asMc.UpFlashMc;
import cn.upflash.dataTools.XmlFile;
import com.greensock.TweenLite;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.StageDisplayState;
import flash.display.StageScaleMode;
import flash.events.ActivityEvent;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.geom.Point;
import flash.media.Camera;
import flash.media.Video;
import flash.system.System;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.utils.clearTimeout;
import flash.utils.getTimer;
import flash.utils.setTimeout;
import flash.utils.Timer;
import as3.ColorObj;
import flash.ui.Mouse;
//@author www.upflash.cn
public class SheXiangTou2 extends Basic
{
private var cam:Camera;
private var cam2:Camera;
private var vid:Video;
private var vid2:Video;
private var myTextField:TextField=new TextField();
private var myTextField2:TextField=new TextField();
private var _w:int=400;
private var _h:int=300;
public function SheXiangTou2()
{
stage.scaleMode = “noScale”;
stage.displayState = “fullScreen”;
stage.addChild(myTextField)
stage.addChild(myTextField2)
myTextField2.x = 600;
myTextField.x = 200;
myTextField2.y = 200;
myTextField.y = 200;
cam = Camera.getCamera(“0″);
if (!cam)
{
myTextField.text = “未安装摄像头”;
}
else
{
myTextField.text = “正在连接摄像头”;
connectCamera();
}
cam2 = Camera.getCamera(“1″);
if (!cam2)
{
myTextField2.text = “未安装摄像头”;
}
else
{
myTextField2.text = “正在连接摄像头”;
connectCamera2();
}
}
private function connectCamera2():void
{
vid2 = new Video(_w, _h);
vid2.attachCamera(cam2);
vid2.x=500
addChild(vid2);
}
private function connectCamera():void
{
vid = new Video(_w, _h);
vid.attachCamera(cam);
addChild(vid);
}
}
}

flash AS2的fscommand应用

2012 年 01 月 06 日 at 上午 11:39分类目录:flash actionScript3

fscommand 命令部分用法.
[1]全屏播放指令:
fscommand(“fullscreen”,”true”);
效果:flashplayer播放器将以全屏方式进行影片播放。按键盘上的Esc键可跳转回窗口状态。

[2]屏蔽右键菜单指令:
fscommand(“showmenu”,”false”);
效果:当观众在flashplayer窗口中单击鼠标右键时,将不会出现快捷菜单。

[3]禁止影片缩放:
fscommand(“allowscale”,”false”);
效果:当影片中应用位图时,如果被放大或拉伸显示,将会出现图象模糊或锯齿,为了避免这些影响视觉的现象,使用此指令可以禁止影片尺寸被改变。

[4]使键盘出入无效的指令:
fscommand(“trapallkeys”,”true”);
效果:此指令用于锁定键盘输入,使所有设定的快捷键都失效,flashplayer播放器此时不识别任何键盘输入信号。(但注意:无法禁止Ctrl+Alt+Del三键组合)

[5]调用可执行文件指令:
fscommand(“exec”,”需要打开的文件路径”);
效果:直接打开一个可执行文件,文件类型可以是.exe//.com//.bat。路径最好选用相对路径。

[6]关闭播放器指令:
fscommand(“quit”);
效果:结束放映,播放器窗口自动关闭,此ACTION适合添加到影片的最后一贞,当然也可以放到一个按钮上来实现“终止影片播放”功能。

FSCommand功能详解

因为很多人对FSCommand的某些功能都不是很了解
经常发贴而又得不到有效的回答
因此我整理了一些资料希望对大家有帮助

fscommand(cmd_string,arg_string)
执行主机端指令。cmd_string指定所要执行的指令名,可为FlashPlayer的
指令或浏览器javascript函数。arg_string声明该指令所用到的参数。
FlashPlayer的指令有(只能在独立播放器时使用):
“fullscreen”是否全屏播放,参数为true或false
“allowscale”是否允许通过拉伸窗口缩放影片,参数为true或false
“showmenu”是否在播放器显示菜单,参数为true或false
“trapallkeys”是否屏蔽播放器的快捷键(如Esc表示停止播放并恢复
“save”隐藏属性,作用是存变量到文本文件.
视窗显示),参数为true或false。但Alt+F4系统快捷
键(关闭窗口)依然可用。
“exec”运行arg_string所指定的文件。

as3 xml节点按条件查找

2011 年 10 月 31 日 at 下午 12:44分类目录:flash actionScript3

var myXml:XML = <myXml>
<node><web site = “upflash.cn”>1</web></node>
<node><web site = “qq.com”>1</web></node>
<node><web site = “sina.com”>2</web></node>
<node><web site = “baidu.com”>3</web></node>
</myXml>;
trace(myXml.node.web.(@site==”upflash.cn”));
/*选出web节点内容不是sina.com的node节点
输出结果1*/
trace(myXml.node.(web==1));
/*选出id等于1的web节点
<node>
<web site=”upflash.cn”>1</web>
</node>
<node>
<web site=”qq.com”>1</web>
</node>*/

flex4.0快捷键整理

2011 年 10 月 20 日 at 下午 8:21分类目录:flex/flashBuilder

Alt+-●显示系统菜单
Alt+/●内容辅助
Alt+?●上下文信息
Alt+Enter●Java 断点属性
Alt+Enter●属性
Alt+Shift+?●上下文信息
Alt+Shift+A,F●执行活动项目 FlexUnit 测试
Alt+Shift+B●在 Breadcrumb 中显示
Alt+Shift+B●在 Breadcrumb 中显示
Alt+Shift+C●Mark Task Complete
Alt+Shift+C●更改方法特征符
Alt+Shift+D,A●调试 Java Applet
Alt+Shift+D,D●调试桌面应用程序
Alt+Shift+D,J●调试 Java 应用程序
Alt+Shift+D,Q●调试 Ant 构建
Alt+Shift+D,T●调试 JUnit 测试
Alt+Shift+D,W●调试 Web 应用程序
Alt+Shift+E,F●执行编辑器 FlexUnit 测试
Alt+Shift+F12●发布影片(&P)
Alt+Shift+F●强制返回
Alt+Shift+I●Mark Task Incomplete
Alt+Shift+I●内联
Alt+Shift+J●添加 Javadoc 注释
Alt+Shift+L●抽取局部变量
Alt+Shift+L,F●配置/执行活动项目 FlexUnit 测试
Alt+Shift+M●抽取方法
Alt+Shift+N●“新建”菜单
Alt+Shift+O●切换 Ant 标记出现
Alt+Shift+O●切换标记出现
Alt+Shift+P,D●概要分析桌面应用程序
Alt+Shift+P,W●概要分析 Web 应用程序
Alt+Shift+Q,B●显示视图 (视图: 断点)
Alt+Shift+Q,C●显示视图 (视图: 控制台)
Alt+Shift+Q,D●显示视图 (视图: 声明)
Alt+Shift+Q,H●显示视图 (视图: 备忘单)
Alt+Shift+Q,J●显示视图 (视图: Javadoc)
Alt+Shift+Q,K●显示视图 (视图: Task List)
Alt+Shift+Q,O●显示视图 (视图: 大纲)
Alt+Shift+Q,P●显示视图 (视图: 包资源管理器)
Alt+Shift+Q,Q●显示视图
Alt+Shift+Q,S●显示视图 (视图: 搜索)
Alt+Shift+Q,T●显示视图 (视图: 层次结构)
Alt+Shift+Q,V●显示视图 (视图: 变量)
Alt+Shift+Q,X●显示视图 (视图: 问题)
Alt+Shift+Q,Y●显示视图 (视图: 同步)
Alt+Shift+Q,Z●显示视图 (视图: 历史记录)
Alt+Shift+R●Mark Task Read
Alt+Shift+R●在文件中重命名
Alt+Shift+R●重命名 - 重构
Alt+Shift+S●Submit Task
Alt+Shift+S●显示源代码快速菜单
Alt+Shift+T●显示重构快速菜单
Alt+Shift+U●Mark Task Unread
Alt+Shift+U●删除出现注释
Alt+Shift+V●移动 - 重构
Alt+Shift+W●显示位置…
Alt+Shift+X,A●运行 Java Applet
Alt+Shift+X,D●运行桌面应用程序
Alt+Shift+X,J●运行 Java 应用程序
Alt+Shift+X,Q●运行 Ant 构建
Alt+Shift+X,T●运行 JUnit 测试
Alt+Shift+X,W●运行 Web 应用程序
Alt+Shift+Z●包围方式快速菜单
Alt+Shift+上箭头●Mark Task Read and Go To Previous Unread Task
Alt+Shift+上箭头●Select Enclosing Element
Alt+Shift+上箭头●选择外层元素
Alt+Shift+下箭头●Mark Task Read and Go To Next Unread Task
Alt+Shift+下箭头●Restore Last Selection
Alt+Shift+下箭头●复原上一个选择
Alt+Shift+右箭头●Select Next Element
Alt+Shift+右箭头●选择下一个元素
Alt+Shift+左箭头●Select Previous Element
Alt+Shift+左箭头●选择上一个元素
Alt+上箭头●Go To Previous Unread Task
Alt+上箭头●将行上移
Alt+下箭头●Go To Next Unread Task
Alt+下箭头●将行下移
Alt+右箭头●前移历史记录
Alt+左箭头●后退历史记录
Ctrl+,●上一项
Ctrl+-●Zoom Out
Ctrl+-●缩小
Ctrl+-●缩小(&O)
Ctrl+.●下一项
Ctrl+/●切换注释
Ctrl+/●切换注释
Ctrl+/●切换注释
Ctrl+0●适合窗口大小(&F)
Ctrl+1●快速修正
Ctrl+1●缩放比率 100%
Ctrl+1●缩放比率 100%
Ctrl+2,F●快速辅助 - 指定给字段
Ctrl+2,L●快速辅助 - 指定给局部变量
Ctrl+2,R●快速辅助 - 在文件中重命名
Ctrl+3●快速访问
Ctrl+7●切换注释
Ctrl+7●切换注释
Ctrl+=●Zoom In
Ctrl+=●放大
Ctrl+=●放大(&I)
Ctrl+Alt+/●文字补全
Ctrl+Alt+1●左对齐(&L)
Ctrl+Alt+2●垂直居中对齐(&V)
Ctrl+Alt+3●右对齐(&R)
Ctrl+Alt+4●上对齐(&T)
Ctrl+Alt+5●水平居中对齐(&H)
Ctrl+Alt+6●下对齐(&B)
Ctrl+Alt+7●使宽度相同(&W)
Ctrl+Alt+8●基线对齐(&A)
Ctrl+Alt+9●使高度相同(&H)
Ctrl+Alt+B●显示容器边框
Ctrl+Alt+C●显示布局约束
Ctrl+Alt+G●在工作空间中查找文本
Ctrl+Alt+H●打开调用层次结构
Ctrl+Alt+H●打开调用层次结构
Ctrl+Alt+J●连接行
Ctrl+Alt+M●添加内存块
Ctrl+Alt+N●下一个内存监视器
Ctrl+Alt+R●重命名
Ctrl+Alt+Shift+F12●Open Remote Task
Ctrl+Alt+Shift+上箭头●Make Landmark
Ctrl+Alt+Shift+下箭头●Make Less Interesting
Ctrl+Alt+Shift+右箭头●Show Context Quick View
Ctrl+Alt+上箭头●重复行
Ctrl+Alt+下箭头●复制行
Ctrl+A●全部选中
Ctrl+Backspace●删除上一个词语
Ctrl+B●全部构建
Ctrl+C●复制
Ctrl+Delete●删除下一个词语
Ctrl+D●删除行
Ctrl+End●文本末尾
Ctrl+Enter●Open Selected Task
Ctrl+Enter●测试影片(&T)
Ctrl+E●快速切换编辑器
Ctrl+F10●显示标尺上下文菜单
Ctrl+F10●显示视图菜单
Ctrl+F11●运行
Ctrl+F12●Open Task
Ctrl+F2●终止
Ctrl+F3●打开结构
Ctrl+F4●关闭
Ctrl+F4●关闭用户帮助托盘
Ctrl+F5●单步跳入选择的内容
Ctrl+F6●下一个编辑器
Ctrl+F7●下一个视图
Ctrl+F8●下一个透视图
Ctrl+F9●Activate Task
Ctrl+F●查找并替换
Ctrl+G●在工作空间中查找所有声明
Ctrl+G●在工作空间中查找所有声明
Ctrl+G●工作空间中的声明
Ctrl+G●转至地址
Ctrl+Home●文本开头
Ctrl+H●打开“搜索”对话框
Ctrl+Insert●复制
Ctrl+I●Format Active Elements
Ctrl+I●更正缩进
Ctrl+I●缩进行
Ctrl+J●增量查找
Ctrl+K●查找下一个
Ctrl+L●转至行

使flash变小应该注意的事项

2011 年 10 月 19 日 at 下午 3:48分类目录:flash动画技巧

1.尽量使用元件做动画
2.图片在导入前一定要预先处理。
3.flash cs5.5多了一个新功能。打散的图片可以转换为新图片。很方便。可以使图片尽可能的小。
4.如果对画面质量要求高。请选中库里的图片。选中无损和光滑。默认是压缩的,生成文件小,但是画面有损失。
5.声音也要预先处理。导入到库之后同样有是否压缩的选项。看客户需求定了。
6.过多的过渡填充也会使文件变大一点点。可以忽略不计。如果是手机开发尽量不用过渡透明等。消耗cpu。
7.尽量不要潜入字体。潜入字体会导致文件增大很多。而且导致发布变慢。

键盘码和字符码列表和查找工具

2011 年 10 月 12 日 at 下午 5:18分类目录:flash actionScript3

A <——–> 65
B <——–> 66
C <——–> 67
D <——–> 68
E <——–> 69
F <——–> 70
G <——–> 71
H <——–> 72
I <——–> 73
J <——–> 74
K <——–> 75
L <——–> 76
M <——–> 77
N <——–> 78
O <——–> 79
P <——–> 80
Q <——–> 81
R <——–> 82
S <——–> 83
T <——–> 84
U <——–> 85
V <——–> 86
W <——–> 87
X <——–> 88
Y <——–> 89
Z <——–> 90
0 <——–> 48
1 <——–> 49
2 <——–> 50
3 <——–> 51
4 <——–> 52
5 <——–> 53
6 <——–> 54
7 <——–> 55
8 <——–> 56
9 <——–> 57
数字键盘 1 <——–> 96
数字键盘 2 <——–> 97
数字键盘 3 <——–> 98
数字键盘 4 <——–> 99
数字键盘 5 <——–> 100
数字键盘 6 <——–> 101
数字键盘 7 <——–> 102
数字键盘 8 <——–> 103
数字键盘 9 <——–> 104
数字键盘 0 <——–> 105
乘号 <——–> 106
加号 <——–> 107
Enter <——–> 108
减号 <——–> 109
小数点 <——–> 110
除号 <——–> 111
F1 <——–> 112
F2 <——–> 113
F3 <——–> 114
F4 <——–> 115
F5 <——–> 116
F6 <——–> 117
F7 <——–> 118
F8 <——–> 119
F9 <——–> 120
F10 <——–> 121
F11 <——–> 122
F12 <——–> 123
F13 <——–> 124
F14 <——–> 125
F15 <——–> 126
Backspace <——–> 8
Tab <——–> 9
Clear <——–> 12
Enter <——–> 13
Shift <——–> 16
Control <——–> 17
Alt <——–> 18
Caps Lock <——–> 20
Esc <——–> 27
空格键 <——–> 32
Page Up <——–> 33
Page Down <——–> 34
End <——–> 35
Home <——–> 36
左箭头 <——–> 37
向上箭头 <——–> 38
右箭头 <——–> 39
向下箭头 <——–> 40
Insert <——–> 45
Delete <——–> 46
Help <——–> 47
Num Lock <——–> 144
; : <——–> 186
= + <——–> 187
- _ <——–> 189
/ ? <——–> 191
` ~ <——–> 192
[ { <--------> 219
| <--------> 220
] } <——–> 221
” ‘ <——–> 222

A <——–> 65
B <——–> 66
C <——–> 67
D <——–> 68
E <——–> 69
F <——–> 70
G <——–> 71
H <——–> 72
I <——–> 73
J <——–> 74
K <——–> 75
L <——–> 76
M <——–> 77
N <——–> 78
O <——–> 79
P <——–> 80
Q <——–> 81
R <——–> 82
S <——–> 83
T <——–> 84
U <——–> 85
V <——–> 86
W <——–> 87
X <——–> 88
Y <——–> 89
Z <——–> 90
0 <——–> 48
1 <——–> 49

2 <——–> 50
3 <——–> 51
4 <——–> 52
5 <——–> 53
6 <——–> 54
7 <——–> 55
8 <——–> 56
9 <——–> 57
数字键盘 1 <——–> 96
数字键盘 2 <——–> 97
数字键盘 3 <——–> 98
数字键盘 4 <——–> 99
数字键盘 5 <——–> 100
数字键盘 6 <——–> 101
数字键盘 7 <——–> 102
数字键盘 8 <——–> 103
数字键盘 9 <——–> 104
数字键盘 0 <——–> 105
乘号 <——–> 106
加号 <——–> 107
Enter <——–> 108
减号 <——–> 109
小数点 <——–> 110
除号 <——–> 111
F1 <——–> 112
F2 <——–> 113
F3 <——–> 114
F4 <——–> 115
F5 <——–> 116
F6 <——–> 117
F7 <——–> 118
F8 <——–> 119
F9 <——–> 120
F10 <——–> 121
F11 <——–> 122
F12 <——–> 123
F13 <——–> 124
F14 <——–> 125
F15 <——–> 126
Backspace <——–> 8
Tab <——–> 9
Clear <——–> 12
Enter <——–> 13
Shift <——–> 16
Control <——–> 17
Alt <——–> 18
Caps Lock <——–> 20
Esc <——–> 27
空格键 <——–> 32
Page Up <——–> 33
Page Down <——–> 34
End <——–> 35
Home <——–> 36
左箭头 <——–> 37
向上箭头 <——–> 38
右箭头 <——–> 39
向下箭头 <——–> 40
Insert <——–> 45
Delete <——–> 46
Help <——–> 47
Num Lock <——–> 144
; : <——–> 186
= + <——–> 187
- _ <——–> 189
/ ? <——–> 191
` ~ <——–> 192
[ { <--------> 219
| <--------> 220
] } <——–> 221
” ‘ <——–> 222

按照多个元素对数组排序

2011 年 10 月 11 日 at 下午 4:30分类目录:flash actionScript3

//定义一个对象数组
var userScoreArr:Array = [{uid:0,score:0,id:0},{uid:1,score:0,id:0},{uid:2,score:0,id:0}];
//对数组进行大小降序排序
var indexArr:Array = userScoreArr.sortOn(["score","id"],Array.NUMERIC | Array.DESCENDING);
//查看新的数组顺序
for each (var i in indexArr)
{
trace(i.score,i.id);
}

如何让百度蜘蛛每天抓取你网站的内容

2011 年 09 月 30 日 at 下午 2:38分类目录:网站技术

百度最近的算法让挺多seoer头痛的,因为很多网站出现百度不收录,快照不更新的现象。笔者也是比较郁闷的,这段时间看了很多这方面的书籍和测试,发现百度的很多算法做了调整,可能大部分是针对那些优化过度,采集过度的网站。那么,如何保持让百度每天及时收录你的文章呢?笔者有一点体会给大家参考。
1. 友情链接一定要做好,无论花多少时间。如果你在做百度的流量的话,那么你不要太看重PR,因为很多PR高的网站,百度才收录几页。我找友情链接是以这样的标准的:a.百度快照每天更新的,最好找一些论坛,呵呵,百度蜘蛛在那些网站爬得快。b.百度收录数正常的,一般百度收录数过少的不予考虑。 虽然偶的站相对还是新站,PR为0,但是我对友情链接的要求是很高的。因为友情链接是相对外链来说是最稳定的。

2. 控制外链数量,提高外链质量。目前的外链建设对于百度还是比较敏感的。百度这次算法调整,削减了对外链的权重,甚至对外链过多过杂的网站进行降权,从而导致很多网站的排名下降。

3. 内链建设。呵呵,这个很多网站都忽略的。尤其是没有将站内的内链搞好。

4. 更新频率和更新数量。如果时间允许的话,尽量手工更新,每个频道保持每天都更新,有规律去做。

5. 提高文章质量,这个很重要滴哦。我的网站是请了做杂志的朋友更新的,因此,内容质量还是比较高的。如果内容质量不高,可能排名上去了,都会很快掉下来的。

6. 百度目前一天的收录时间段是这样的,早上7点-9点,下午5-6点,晚上10点-12点。一般是这个时间段更新收录数的。所以一定要在这几个时间段去更新一下文章哦,偶一般是6点起床更新文章,然后8点就跑去睡觉了。哈哈,尤其是做一些热点的网站要注意这个百度每天的收录频率了哦。

7. 网站架构一定要合理哦,这方面偶就比较弱了。这个留给其他朋友来给大家解答吧。偶常常被我的朋友批得,说我的网站架构做得不好,他的网站流量都达到几十万一天的。没有办法,偶不是技术出身的,而且悟性比较差。

今天就先说到这里哦。呵呵,如果哪位朋友做女性网站,百度快照每天更新,而且收录数超过500滴,一起友情链接一下哦。其实保持以上7点,应该百度每天收录你的网站是不成问题哦。偶的网站现在每天更新50篇文章左右,能收录30篇左右

主动向搜索引擎提交自己的网址

2011 年 09 月 30 日 at 下午 2:36分类目录:网站技术

其实百度也是很希望收录一些有价值的网页的..

你可以有以下几个方法帮你把网址提交给搜索引擎:

方法一:主动向搜索引擎提交自己的网址向百度、Google 等提交网址是不用花钱的,其提交页面分别为:
http://www.baidu.com/search/url_submit.html

http://www.google.com/intl/zh-CN/add_url.html

方法二:和同类且已被收录的网站做链接。
方法三:合理、合法的对网站进行SEO(搜索引擎优化)

如果收录慢:
http://www.baidu.com/search/url_submit.html

到上面多提交几次,最好天天提交..

网站没有被收录,百度有相关规定,参见:网页收录问题

http://www.baidu.com/search/guide.html

祝你好运!!

flash as调整影片剪辑的亮度,对比度,饱和度,色相

2011 年 09 月 28 日 at 下午 12:14分类目录:flash actionScript3 | flex/flashBuilder

相信大家对滤镜这东西,在flash IDE内应用很熟。但是在as内怎么用代码实现呢。如何调整影片剪辑的明暗,对比度,饱和度,色相。看了下面的代码你就明白了。

import fl.motion.ColorMatrix;

import flash.filters.ColorMatrixFilter;

//**调整亮度**//

var ld_Matrix:ColorMatrix=new ColorMatrix();

var ld_Filter:ColorMatrixFilter=new ColorMatrixFilter();

ld_Matrix.SetBrightnessMatrix(100);  //设置亮度值,值的大小是 -255–255   0为中间值,向右为亮向左为暗。

ld_Filter.matrix = ld_Matrix.GetFlatArray();

ld_MC.filters = [ld_Filter];

//ld_MC.filters = [];//去除滤镜

//**调整对比度**//

var db_Matrix:ColorMatrix=new ColorMatrix();

var db_Filter:ColorMatrixFilter=new ColorMatrixFilter();

db_Matrix.SetContrastMatrix(255);  //设置对比度值,值的大小是 -255–255  127.5为中间值,向右对比鲜明向左对比偏暗。

db_Filter.matrix = db_Matrix.GetFlatArray();

db_MC.filters = [db_Filter];

//db_MC.filters = [];//去除滤镜

//**调整饱和度**//

var bh_Matrix:ColorMatrix=new ColorMatrix();

var bh_Filter:ColorMatrixFilter=new ColorMatrixFilter();

bh_Matrix.SetSaturationMatrix(0);  //设置饱和度值,值的大小是 -255–255   1为中间值,0为灰度值(即黑白相片)。

bh_Filter.matrix = bh_Matrix.GetFlatArray();

bh_MC.filters = [bh_Filter];

//bh_MC.filters = [];//去除滤镜

//**调整色相**//

var sx_Matrix:ColorMatrix=new ColorMatrix();

var sx_Filter:ColorMatrixFilter=new ColorMatrixFilter();

sx_Matrix.SetHueMatrix(1);  //设置色相值,值的大小是 -255–255  0为中间值,向右向左一试便知。

sx_Filter.matrix = sx_Matrix.GetFlatArray();

sx_MC.filters = [sx_Filter];

//sx_MC.filters = [];//去除滤镜

常见游戏分类及讲解

2011 年 09 月 25 日 at 上午 11:47分类目录:业界动态

RPG= Role-playing Game∶角色扮演游戏
由玩家扮演游戏中的一个或数个角色,有完整的故事情节的游戏。玩家可能会与冒险类游戏混淆,其实区分很简单,RPG游戏更强调的是剧情发展和个人体验,一般来说,RPG可分为日式和美式两种,主要区别在于文化背景和战斗方式。日式RPG多采用回合制或半即时制战斗,如《最终幻想》系列,大多国产中文RPG也可归为日式RPG之列,如大家熟悉的《仙剑》、《剑侠》等;美式RPG如《暗黑破坏神》系列。更详细的,可以根据战斗进行方式分类,将RPG分为动作角色扮演游戏(A.RPG,战斗方式为即时动作,典型就是《暗黑破坏神》)和战略角色扮演游戏 (S.RPG,战斗方式好象下棋,即我们常说的战棋类游戏,如《轩辕伏魔录》)。

ACT= Action Game∶动作游戏
玩家控制游戏人物用各种武器消灭敌人以过关的游戏,不追求故事情节,如熟悉的《超级玛里》、可爱的《星之卡比》、华丽的《波斯王子》等等。电脑上的动作游戏大多脱胎于早期的街机游戏和动作游戏如《魂斗罗》、《三国志》等,设计主旨是面向普通玩家,以纯粹的娱乐休闲为目的,一般有少部分简单的解谜成份,操作简单,易于上手,紧张刺激,属于”大众化”游戏。

AVG= Adventure Game ∶冒险游戏
由玩家控制游戏人物进行虚拟冒险的游戏。与RPG不同的是,AVG的特色是故事情节往往是以完成一个任务或解开某些迷题的形式出现的,而且在游戏过程中刻意强调谜题的重要性。AVG也可再细分为动作类和解迷类两种,动作类AVG可以包含一些格斗或射击成分如《生化危机》系列、《古墓丽影》系列、《恐龙危机》等;而解迷类AVG则纯粹依靠解谜拉动剧情的发展,难度系数较大,代表是超经典的《神秘岛》系列。

SLG= Strategy Game∶策略游戏
玩家运用策略与电脑或其它玩家较量,以取得各种形式胜利的游戏,或统一全国,或开拓外星殖民地。策略游戏可分为回合制和即时制两种,回合制策略游戏如大家喜欢的《三国志》系列、《樱花大战》系列;即时制策略游戏如《命令与征服》系列、《帝国》系列、《沙丘》等。后来有些媒体将模拟经营,即SIM(simulation)类游戏,如《模拟人生》、《模拟城市》、《过山车大亨》、《主题公园》和养成类游戏(TCG,如《世界足球经理》,《零波丽育成计划》等)也归到了SLG下。

RTS=Real-Time Strategy Game:即时战略游戏
本来属于策略游戏SLG的一个分支,但由于其在世界上的迅速风靡,使之慢慢发展成了一个单独的类型,知名度甚至超过了SLG,有点象现在国际足联和国际奥委会的关系。代表作有《魔兽争霸》系列、《帝国时代》系列、《星际争霸》等等。后来,从其上又衍生出了所谓”即时战术游戏”,多以控制一个小队完成任务的方式,突出战术的作用,以《盟军敢死队》为代表。

FGT= Fighting Game∶格斗游戏 ←狗狗最菜的
由玩家操纵各种角色与电脑或另一玩家所控制的角色进行格斗的游戏。按呈画技术可再分为2D和3D两种,2D格斗游戏有著名的《街霸》系列、《侍魂》系列、《拳皇》系列等;3D格斗游戏如《铁拳》、《高达格斗》等。此类游戏谈不上什么剧情,最多有个简单的场景设定,或背景展示,场景、人物、操控等也比较单一,但操作难度较大,主要依靠玩家迅速的判断和微操作取胜。

STG= SHOTING GAME∶射击类游戏
这里所说的射击类,并非是类似《VR战警》的模拟射击(枪战),而是指纯的飞机射击,由玩家控制各种飞行物(主要是飞机)完成任务或过关的游戏。此类游戏分为两种,一叫科幻飞行模拟游戏(Science-Simulation Game),非现实的,想象空间为内容,如《自由空间》、《星球大战》系列等;另一种叫真实飞行模拟游戏(Real- Simulation Game),以现实世界为基础,以真实性取胜,追求拟真,达到身临其境的感觉。如《王牌空战》系列、《苏-27》等等。另外,还有一些模拟其他的游戏也可归为STG,比如模拟潜艇的《猎杀潜航》,模拟坦克的《钢铁雄师》等。STG也可以按照视角版面分为:纵版、横版、主观视角。
纵版:最为常见,像街机中的《雷电》、《鲛鲛鲛》、《空牙》等,都堪称经典之作。
横版:横轴射击,如《沙罗曼蛇》系列、《战区88》都是这类。
主观视角:仿真,模拟战机就属此类。

FPS=First Personal Shooting Game:第一人称视角射击游戏
严格来说它是属于动作游戏的一个分支,但和RTS一样,由于其在世界上的迅速风靡,使之展成了一个单独的类型,典型的有DOOM系列、QUAKE系列、《虚幻》、《半条命》、《CS》……不胜枚举。

PZL= Puzzle Game∶益智类游戏
Puzzle的原意是指以前用来培养儿童智力的拼图游戏,引申为各类有趣的益智游戏,总的来说适合休闲,最经典的嘛~就是大家耳熟能详的《俄罗斯方块》啦。

RCG= Racing Game∶竞速游戏 [也有称作为RAC的]
在电脑上模拟各类赛车运动的游戏,通常是在比赛场景下进行,非常讲究图像音效技术,往往是代表电脑游戏的尖端技术。惊险刺激,真实感强,深受车迷喜爱,代表作有《极品飞车》、《山脊赛车》、《摩托英豪》等。另一种说法称之为”Driving Game”。目前,RCG内涵越来越丰富,出现了另一些其他模式的竞速游戏,如赛艇的,赛马等。

SPT= Sports Game∶体育类游戏
在电脑上模拟各类竞技体育运动的游戏,花样繁多,模拟度高,广受欢迎,如《FIFA》系列、《NBA Live》系列、《实况足球》系列等。

TCG= 育成游戏
以前GB系列泛用,现在一般大家都用 EDU(education)来指代该类游戏,以便于和“ Online Trading Card Game”区分开。
顾名思义,就是玩家模拟培养的游戏,如《明星志愿》、《美少女梦工厂》、《零波丽育成计划》等等。

CAG=Card Game∶卡片游戏
玩家操纵角色通过卡片战斗模式来进行的游戏。丰富的卡片种类使得游戏富于多变化性,给玩家无限的乐趣,代表作有著名的《信长的野望》系列、《游戏王》系列,包括卡片网游《武侠Online》,从广意上说《王国之心》也可以归于此类。

TAB=Table Game∶桌面游戏
顾名思义,是从以前的桌面游戏脱胎到电脑上的游戏,如各类强手棋(即掷骰子决定移动格数的游戏),经典的象《大富翁》系列;棋牌类游戏也属于TAB,如《拖拉机》、《红心大战》、《麻将》等等。

MSC=Music Game∶音乐游戏
培养玩家音乐敏感性,增强音乐感知的游戏。伴随美妙的音乐,有的要求玩家翩翩起舞,有的要求玩家手指体操,例如大家都熟悉的跳舞机,就是个典型,目前的人气网游《劲乐团》也属其列。

LVG=Love Game∶恋爱游戏
玩家回到初恋的年代,回味感人的点点滴滴,模拟恋爱的游戏。恋爱不是游戏,但偏偏有恋爱游戏,目前的恋爱类游戏主要是为男性玩家服务的,也有个别女性向的。可以训练追求的技术,(和学会忍耐?)代表作有日本的《心跳回忆》系列、《思君》,国人的《青涩宝贝》、《秋忆》等。

ETC=etc. Game∶其他类游戏
指无法归结到已知种类中的游戏,常见于种类丰富的电视游戏,如音乐游戏、某些游戏的周边设定集(如《心跳回忆》屏保壁纸集)等,电脑游戏中较少出现,即使有也多是移植自电视游戏。其实你判定不了的就把它丢这里吧。

WAG=Wap Game∶手机游戏
手机上的游戏。目前游戏随处可以玩,连手机也必带休闲游戏,网民最喜欢手机游戏的种类,益智类比率最高,其次依次为动作类、战略类、模拟类、射击类。列举几个手机游戏例子:《金属咆哮》、《FF7 前传》等.

MUD=泥巴游戏
主要是依靠文字进行游戏的游戏,图形辅助。1978年,英国埃塞克斯大学的罗伊·特鲁布肖用DEC-10编写了世界上第一款MUD游戏——“MUD1”,是第一款真正意义上的实时多人交互网络游戏,这是一个纯文字的多人世界。(这可能就是MUD的命名来源吧?)其他代表作:《侠客行》、《子午线59》、《万王之王》。

MMORPG=Massively Multiplayer Online Role Playing Game∶大型多人在线角色扮演游戏
这个地球人都知道。举几个典型的例子:《网络创世纪》、《无尽的任务》、《A3》、《魔兽》、《轩辕Ⅱ》等!

APE中文帮助|flash As3.0物理引擎培训文档

2011 年 09 月 22 日 at 上午 10:27分类目录:flash actionScript3 | flex/flashBuilder

APE,什么是APE呢。APE(Actionscript Physics Engine)是一个ActionScript3写成的物理引擎,用于模拟现实中物体发生的运动和碰撞。它是免费、开源的,遵循MIT协议。看起来特别适用用来做游戏开发,已经有许多很有趣的应用使用这个开发的 。

官方网址为:http://www.cove.org/ape
下载地址为:http://www.cove.org/ape/ape_a045.zip(包含两个demo,api,swc文件,和源码)
APE中总共才12个类,用起来相当的方便。
AbstractCollection
Group
Composite
AbstractItem
AbstractConstraint
SpringConstraint
AbstractParticle
RectangleParticle
CircleParticle
WheelParticle
Vector
APEngine

下面具体介绍各个类的使用

◆AbstractCollection(子类有:Group和Composite)

此类为群组性的基类。你不应实例化这个类,而应该使用该类的子类。
属性:
constraints 属性
constraints:Array  [只读]
一个数组,包含所有被加入到AbstractCollection中的AbstractConstraint类的实例。
particles 属性
particles:Array  [只读]
一个数组,包含所有被加入到AbstractCollection中的AbstractParticle类的实例。
sprite 属性
sprite:Sprite  [只读]
为渲染和增加children而提供的作为容器使用的Sprite。当这个sprite第一次被请求时,这个sprite会自动的加入到APEngine类的全局容器中。
构造函数:
public function AbstractCollection()
方法:
addConstraint () 方法
public function addConstraint(c:AbstractConstraint):void
在收集器中增加一个约束。
参数 c:AbstractConstraint — 被加入的约束.
addParticle () 方法
public function addParticle(p:AbstractParticle):void
在AbstractCollection中加入一个AbstractParticle
参数p:AbstractParticle — 被加入的粒子
cleanup () 方法
public function cleanup():void
调用AbstractCollection每个成员的cleanup()方法. 当AbstractCollection 从他的父容器中被移除的话,cleanup()方法会自动的被调用。
getAll () 方法
public function getAll():Array
返回一个数组,这个数组包含被加入到AbstractCollection.中的每一个粒子和约束。
init () 方法
public function init():void
通过调用每一个成员的init()方法实例化这个AbstractCollection的每一个成员。
paint () 方法
public function paint():void
通过调用每一个成员的paint()方法来渲染 AbstractCollection的每个成员。
removeConstraint () 方法
public function removeConstraint(c:AbstractConstraint):void
从收集器中删除参数指定的约束。
参数 c:AbstractConstraint — 将被移除的约束。
removeParticle ()方法
public function removeParticle(p:AbstractParticle):void
从AbstractCollection中移除一个AbstractParticle
参数 p:AbstractParticle — 将被移除的粒子

◆Group(继承自AbstractCollection)

组可以包含粒子,约束和复合体。组可以被设置为和其他的组进行碰撞检测。
属性:
collideInternal:Boolean  [读写]
决定这个组内的成员彼此是否进行碰撞检测;
collisionList:Array  [只读]
返回一个数组,这个数组包含所有和这个组进行碰撞检测的所有组的实例。
composites:Array  [只读]
返回一个数组,这个数组包含所有加入到这个组的复合体。
构造函数
public function Group(collideInternal:Boolean = false)
Group是APE中的主要的用于组织的类。一旦创建了组,并把粒子,约束,复合体加入组,那么这些东西也就加入了APEngine。组可以包含粒子,约束和复合体。复合体只能包含粒子和约束。
参数:
collideInternal:Boolean (default = false)
方法:
addCollidable()方法
addCollidable(g:Group):void
加入一个组的实例与这个组进行碰撞检测。
addCollidableList()方法
public function addCollidableList(list:Array):void
加入AbstractCollection实例的数组,让数组中的元素与这个组进行碰撞检测。
addComposite()方法
public function addComposite(c:Composite):void
在这个组中加入复合体
cleanup()方法
public override function cleanup():void
调用组的cleanup()方法将会调用组中所有成员的cleanup()方法。当组从APEngine引擎中移除时,组的cleanup()方法会自动的调用。
getAll()方法
public override function getAll():Array
返回一个包含组中所有粒子,约束,复合体的数组。
init()
public override function init():void
通过依次调用组中每个成员的init()方法来初始化组中的每个成员。
paint()方法
public override function paint():void
Paints 组中的所有成员. 这个方法由APEngine 类自动的调用。
removeCollidable()方法
public function removeCollidable(g:Group):void
从这个组的collidable list中移除一个组。
removeComposite()方法
public function removeComposite(c:Composite):void
从组中移除复合体。
Composite(继承自AbstractCollection)
复合体可以包含粒子和约束。复合体可以加入到一个组中,就像粒子和约束一样。注意:复合体中的成员彼此不能进行碰撞检测。
属性:
fixed:Boolean  [读写]
决定复合体的状态是否固定。设置这个值为true或false将会设置复合体中所有组成的粒子的固定状态为true或false。当复合体中的任何一个粒子的状态为不固定时,这个值返回的都为false。
构造函数:
public function Composite()
方法:
rotateByAngle()方法
public function rotateByAngle(angleDegrees:Number, center:Vector):void
围绕给定的中心,使复合体旋转参数指定的角度。
rotateByRadian()方法
public function rotateByRadian(angleRadians:Number, center:Vector):void
围绕给定的中心,使复合体旋转参数指定的弧度。

AbstractItem(子类有:AbstractConstraint和AbstractParticle)

所有约束和粒子的基类
属性
alwaysRepaint 属性
alwaysRepaint:Boolean  [read-write]
为了更好的运行,为了避免不必要的重绘,固定的粒子和弹性约束不需要调用他们的paint()方法,当一个弹性约束的两端所连接的粒子是固定的话,那么这个弹性约束被认为是固定的。这个属性设置为true的时候,如果粒子和弹性约束的fixed属性也为true的时候,粒子和弹性约束的paint()方法会被强制调用。如果你想要旋转固定的粒子和弹性约束的话,你应该设置他们的repaintFixed属性为true。如果粒子和弹性约束不是固定的话,alwaysRepaint属性是没有效果的。
sprite 属性
sprite:Sprite  [只读]
为渲染和增加children而提供的作为容器使用的Sprite。当这个sprite第一次被请求时,这个sprite会自动的加入到APEngine类的全局容器中。
visible 属性
visible:Boolean  [只写]
决定这个项是否可见。
构造函数
AbstractItem ()
public function AbstractItem()
方法
cleanup () 方法
public function cleanup():void
当包含一个项目(粒子或约束)的组(组或复合体)从APEngine移除的时候,这个方法被自动的调用。
init ()方法
public function init():void
当包含一个项目(粒子或约束)的组(组或复合体)被加到引擎,一个项目(粒子或约束)的复合体被加到组,一个项目(粒子或约束)被加到组或复合体的时候,这个方法会被自动的调用。
paint () 方法
public function paint():void
这个项目的默认的渲染方法。当APEngine.paint()方法被调用的时候会自动的调用这个方法。
setFill () 方法
public function setFill(color:uint = 0xffffff, alpha:Number = 1):void
设置这个项的填充样式。
setLine () 方法
public function setLine(thickness:Number = 0, color:uint = 0×000000, alpha:Number = 1):void
设置这个项的样条线的样式。
setStyle () 方法
public function setStyle(lineThickness:Number = 0, lineColor:uint = 0×000000, lineAlpha:Number = 1, fillColor:uint = 0xffffff, fillAlpha:Number = 1):void
设置这个项的样条线和填充。

AbstractParticle类(子类有:CircleParticle,RectangleParticle)(父类是:AbstractItem)

所有粒子的基类
你不应该实例化这个类,而是应该使用这个类的子类。
属性:
center 属性
center:Vector  [只读]
返回代表粒子当前位置的向量。
collidable属性
collidable:Boolean  [读写]
决定这个粒子是否能和其它的粒子或约束碰撞。默认值为true。
elasticity 属性
elasticity:Number  [读写]
这个粒子的弹性,标准的值在0到1之间。值越大,弹性越大。
在碰撞的过程中,弹性的值是累加的。如果一个粒子的弹性值设为0.4,另一个粒子的弹性制也设为0.4,那么在碰撞的时候弹性值就是0.8了,这和一个粒子的弹性值是0另一个弹性值是0.8产生的效果是一样的。
设置大于1的弹性值(单个粒子大于1或累加后大于1)将会使粒子获得比它原来更多的能量。(尽管现实中不可能,但是这是非常有意思的)
fixed 属性
fixed:Boolean  [读写]
决定粒子是否固定。如果粒子是固定的话,早受到力的作用和在碰撞过程中将保持不动。固定的粒子非常适合用来模拟表面。
friction 属性
friction:Number  [读写]
粒子表面的摩擦系数。值必须在0到1之间
0代表没有摩擦(理想光滑),1代表完全的摩擦(像胶水一样)
在碰撞中,摩擦系数也是累加的,但是被限制在1到0之间。例如,如果两个粒子表面的摩擦系数都是0.7的话,这两个粒子之间最终的摩擦力将会是1(完全的粘在一起)
在当前的版本中,仅仅只考虑动态的摩擦。静态的摩擦在下一个版本中可能会得到支持。
当前的版本有一个bug,那就是当和摩擦系数大于0且不固定的粒子碰撞时会得到错误的行为。一个解决的办法就是,只给固定的粒子设置摩擦系数。
抛出错误
—当摩擦系数的值小于0或大于1时抛出 ArgumentError
mass 属性
mass:Number  [只写]
粒子的质量。大于0的值均为有效值。默认情况下所有的粒子的质量均为1.质量属性和粒子形状的大小没有关系。
抛出错误
— 当质量小于0抛出ArgumentError
multisample属性
multisample:int  [读写]
每一次循环中,进行碰撞检测的中间位置值,在一个快速移动的粒子中把这个值适当的设置大一些可以阻止穿透现象的发生。
position属性
position:Vector  [读写]
粒子的位置属性。为了一些目的,得到粒子的位置是非常有用的。
当你获得粒子的位置的时候,你实际得到的是当前位置信息的一份拷贝。正因为这样,你不能通过修改你从粒子取得的有关位置的向量(Vector)的x参数和y参数来改变粒子的位置。你必须这样做:position=new Vector(100,100),或者你可以用px和py属性来代替。
修改粒子位置的三种方法:改变他的位置(直接),给它设置速度,在它上面应用一个力。设置非固定粒子的位置并不同于把他的fixed属性设置为true那样简单。一个处在它位置属性所指定位置的粒子的行为就好像它连接在一个0长度的弹簧上一样。
px属性
px:Number  [读写]
粒子的x坐标
py 属性
py:Number  [读写]
粒子的y坐标
velocity属性
velocity:Vector  [读写]
粒子的速度。如果你想改变粒子的运动,你应该要么用这个属性,要么用addForce()方法。一般来说,addForce()方法慢慢的改变物体的运动状态,velocity属性适合瞬间的给物体设置一个速度来改变物体的运动状态(例如抛出物体)。
方法:
addForce () 方法
public function addForce(f:Vector):void
给粒子加一个力。当应用这个方法的时候,粒子的质量也考虑在内了,所以对于模拟风之类的效果来说,这个方法是非常适合的。
参数  f:Vector —代表被添加力的向量。
addMasslessForce () 方法
public function addMasslessForce(f:Vector):void
为粒子添加一个忽略质量的力。当用这个方法的时候,粒子的质量被忽略。在模拟类似于重力的力的情况,这个方法很适合。
参数  f:Vector —代表被添加力的向量。
setDisplay () 方法
public function setDisplay(d:DisplayObject, offsetX:Number = 0, offsetY:Number = 0, rotation:Number = 0):void
在渲染粒子的时候,分配一个显示对象(DisplayObject)来使用。
update ()方法
public function update(dt2:Number):void
在APEngine.step()方法中会自动的调用update()方法。用这个方法整合粒子。

RectangleParticle——》AbstractParticle——》AbstractItem

矩形的粒子
属性
angle 属性
angle:Number  [读写]
矩形粒子旋转的度数。
height 属性
height:Number  [读写]
矩形粒子的高度。
radian 属性
radian:Number  [读写]
矩形粒子旋转地弧度。
注:尽管矩形粒子可以被旋转,但是它没有角速度。换句话说,在碰撞中,旋转状态不会改变,因旋转而产生的能量也不会应用到碰撞中。
width 属性
width:Number  [属性]
矩形粒子的宽度。
构造函数
RectangleParticle ()
public function RectangleParticle(x:Number, y:Number, width:Number, height:Number, rotation:Number = 0, fixed:Boolean = false, mass:Number = 1, elasticity:Number = 0.3, friction:Number = 0)
参数
x:Number — 初始x位置
y:Number —初始y位置
width:Number — 这个粒子的宽度
height:Number — 这个粒子的高度
rotation:Number (default = 0) — 这个粒子旋转的弧度.
fixed:Boolean (default = false) —决定这个粒子是否固定。固定的粒子不受力和碰撞的影响,非常适合作为平面。不固定的粒子受力和碰撞的作用自由的移动 。
mass:Number (default = 1) — 粒子的质量
elasticity:Number (default = 0.3) — 粒子的弹性. 值越高弹性越大
friction:Number (default = 0) — 粒子表面的摩擦系数
注意:固定的粒子仍然可以改变它的旋转属性。
方法
init () 方法
public override function init():void
建立矩形粒子的视觉表象,当这个矩形粒子的父组(包含该粒子的组)的实例被加到APEngine中、矩形粒子的复合体被加入到组中、矩形粒子被加入到组或复合体中的时候,这个方法会自动的被调用。
paint () 方法
public override function paint():void
这个矩形粒子默认的渲染方法,这个方法会被APEngine.paint()方法自动的调用。
如果你想要自己定义渲染方法,你可以创建这个类的一个子类,并在子类中覆盖paint()方法。

CircleParticle——》 AbstractParticle——》AbstractItem

子类:WheelParticle
圆形粒子
属性
radius 属性
radius:Number  [读写]
粒子的半径
构造函数
CircleParticle () 构造器
public function CircleParticle(x:Number, y:Number, radius:Number, fixed:Boolean = false, mass:Number = 1, elasticity:Number = 0.3, friction:Number = 0)
参数:
x:Number — 这个粒子的初始x位置.
y:Number — 这个例子的初始y位置.
radius:Number — 粒子的半径.
fixed:Boolean (default = false) —决定这个粒子是否固定。
mass:Number (default = 1) — 粒子的质量.
elasticity:Number (default = 0.3) — 粒子的弹力,值越大弹力越大。
friction:Number (default = 0) — 粒子表面的摩擦力。
方法
init () 方法
public override function init():void
建立圆形粒子的视觉表象,当这个圆形粒子的父组(包含该粒子的组)的实例被加到APEngine中、圆形粒子的复合体被加入到组中、圆形粒子被加入到组或复合体中的时候,这个方法会自动的被调用。
paint () 方法
public override function paint():void
这个粒子默认的渲染方法,这个方法会被APEngine.paint()方法自动的调用。
如果你想要自己定义渲染方法,你可以创建这个类的一个子类,并在子类中覆盖

WheelParticle ——》 CircleParticle ——》 AbstractParticle ——》 AbstractItem

用于模拟轮子行为的粒子
属性
angle 属性
angle:Number  [只读]
轮子旋转的角度
angularVelocity 属性
angularVelocity:Number  [读写]
轮子粒子的角速度。你可以通过修改这个值使轮子粒子旋转起来。
radian 属性
radian:Number  [只读]
轮子旋转的弧度
speed 属性
speed:Number  [读写]
轮子粒子的速度,你可以通过修改这个值使轮子旋转。
traction 属性
traction:Number  [读写]
在碰撞中牵引力的大小。这个属性决定了当轮子粒子和其它的粒子接触是到底有多少牵引力作用在轮子粒子上。如果这个值设为0,将不会有牵引力,就好像与轮子接触的平面是完全光滑的那样。这个值应该在0到1之间。
注意:frection(摩擦系数)和traction(牵引力)的行为是不同的。当轮子粒子在一个摩擦系数非常打的平面运动时,轮子粒子的运动速度将非常慢,好像平面上涂满了胶水。
构造函数
WheelParticle () 构造器
public function WheelParticle(x:Number, y:Number, radius:Number, fixed:Boolean = false, mass:Number = 1, elasticity:Number = 0.3, friction:Number = 0, traction:Number = 1)
参数:
x:Number —初始x位置
y:Number —初始y位置.
radius:Number — 粒子的半径.
fixed:Boolean (default = false) — 决定这个粒子是否是固定的。
mass:Number (default = 1) — 粒子的质量
elasticity:Number (default = 0.3) — 粒子的弹力。值越大塔里越大。
friction:Number (default = 0) —粒子表面的摩擦力。
traction:Number (default = 1) — 粒子表面的牵引力。
注:固定的轮子粒子也可以自由度旋转
方法
init ()方法
public override function init():void
建立粒子的视觉呈现。当粒子被加入到引擎时这个方法自动被调用。
paint () 方法
public override function paint():void
这个粒子默认的渲染方法。在快速的测试中你应该仅仅用这个默认的paint()方法。如果你有自己的特殊的要求,你应该自己写一个类,要么让这个类继承APE中的粒子或约束,要么把他们组合在一起。然后在你自己的类中定义你自己的渲染方法。
update () 方法
public override function update(dt:Number):void

AbstractConstraint(父类是:AbstractItem)(子类有:SpringConstraint)

你不应实例化这个类,而应该使用它的子类。
属性
stiffness 属性
stiffness:Number  [read-write]
是约束变得僵硬,值越大越僵硬。这个值应该在0到1之间。根据运行的情况,这个直设的过高会导致应用不稳定。

SpringConstraint——》  AbstractConstraint ——》 AbstractItem

一个像弹簧的约束,用来连接两个物体。
属性
angle属性
angle:Number  [只读]
连接在这个SpringConstraint(弹簧约束)上的两个粒子的位置所构成的角度。你可以在渲染方法中应用这个属性和center属性。
center 属性
center:Vector  [只读]
连接在这个SpringConstraint(弹簧约束)上的两个粒子的位置的中心。你可以在渲染方法中应用这个属性和旋转属性。
collidable 属性
collidable:Boolean  [只读]
决定两个粒子之间的区域是否接受碰撞检测。如果这个属性打开的话(即为true),你可以修改rectHeight属性和rectWidth属性来修改接受碰撞检测区域的尺寸大小。
currLength 属性
currLength:Number  [只读]
返回弹簧约束(SpringConstraint)的长度,即两个被链接的粒子的距离。
fixed 属性
fixed:Boolean  [只读]
如果被链接的两个粒子的fixed属性都为true时返回true。
fixedEndLimit 属性
fixedEndLimit:Number  [读写]
当弹簧约束(SpringConstraint)为可接受碰撞的并且两端的粒子只有一个是固定的,这个值将处理固定端粒子附近的碰撞,纠正难以解决的碰撞问题。这个值在0.0到1.0之间。
radian 属性
radian:Number  [只读]
连接在这个SpringConstraint(弹簧约束)上的两个粒子的位置所构成的旋转的值。你可以在你自定义的渲染方法中应用这个属性和center属性。
rectHeight 属性
rectHeight:Number  [读写]
如果collidable属性为true,你可以设置这两个粒子之间能接受碰撞的矩形区域的高度。这个值是大于零的。如果你设置这个值为10,那么碰撞区域矩形的高度为10像素,这个高度与两个连接的粒子的连线垂直的。
rectScale属性
rectScale:Number  [读写]
如果collidable属性为true,你可以设置这两个粒子之间能接受碰撞的矩形区域的缩放。有效值在0到1之间。如果你将值设为1,这个碰撞区域将扩展到来被链接的两个粒子处。设置一个较低的值,会使碰撞区域按距离的百分比缩放。这个值设的过大会使碰撞矩形扩张甚至超过两端的粒子。
restLength 属性
restLength:Number  [读写]
restLength 属性设置弹簧约束(SpringConstraint)的长度。如果两端的粒子位置没有因受到外力而改变的话,那么这个属性的值等于两端粒子的距离。弹簧约束将总是试着使两个粒子的距离等于这个属性的值。这个值必须大于0.
构造函数
SpringConstraint ()
public function SpringConstraint(p1:AbstractParticle, p2:AbstractParticle, stiffness:Number = 0.5, collidable:Boolean = false, rectHeight:Number = 1, rectScale:Number = 1, scaleToLength:Boolean = false)
参数:
p1:AbstractParticle — 约束所连接的第一个粒子。
p2:AbstractParticle — 约束所连接的第二个粒子。
stiffness:Number (default = 0.5) —弹簧的强度。有效值在0到1之间。低值的效果就像软弹簧,高值的效果如同硬弹簧。
collidable:Boolean (default = false) — 决定此约束是否接受碰撞检测。
rectHeight:Number (default = 1) —如果这个约束是可接受碰撞检测的,可碰撞的区域的高度可设置为像素值。高度和被链接的两个粒子的连线垂直。
rectScale:Number (default = 1) —如果这个约束是可接受碰撞检测的,可被碰撞的区域的缩放可被设置为一个0到1之间的值。这个缩放是两个被链接的粒子之间的距离的一个百分数。
scaleToLength:Boolean (default = false) —如果这个约束是可接受碰撞检测的并且这个值设为true时,可接受碰撞的区域将随着两个粒子的距离而缩放。
方法
init ()方法
public override function init():void
建立弹簧约束的视觉呈现。当此弹簧约束的父组的实例被加到APEngine中、此弹簧约束的复合体被加到组中、次弹簧约束被加到复合体或组中的时候,这个方法会自动的被调用。
isConnectedTo () 方法
public function isConnectedTo(p:AbstractParticle):Boolean
如果传递给此函数的参数是被链接的两个粒子之一则返回true。
参数  p:AbstractParticle
返回  Boolean
paint () 方法
public override function paint():void
这个约束的默认渲染方法。这个方法由APEngine.paint()自动的调用。如果你想要自定义渲染方法,你可以创建一个这个类的子类,并在子类中覆盖paint()方法。
setCollidable ()方法
public function setCollidable(b:Boolean, rectHeight:Number, rectScale:Number, scaleToLength:Boolean = false):void
参数:
b:Boolean
rectHeight:Number
rectScale:Number
scaleToLength:Boolean (default = false)
setDisplay ()方法
public function setDisplay(d:DisplayObject, offsetX:Number = 0, offsetY:Number = 0, rotation:Number = 0):void
当渲染这个约束时分配一个显示对象以备使用。
参数
d:DisplayObject
offsetX:Number (default = 0)
offsetY:Number (default = 0)
rotation:Number (default = 0)

Vector类

属性
x 属性
public var x:Number
y 属性
public var y:Number
构造函数
Vector () constructor
public function Vector(px:Number = 0, py:Number = 0)
参数:
px:Number (default = 0)
py:Number (default = 0)
方法
copy () 方法
public function copy(v:Vector):void
参数:
v:Vector
cross () 方法
public function cross(v:Vector):Number
参数
v:Vector
返回:
Number
distance () 方法
public function distance(v:Vector):Number
参数:
v:Vector
返回
Number
divEquals ()方法
public function divEquals(s:Number):Vector
参数
s:Number
返回
Vector
dot () 方法
public function dot(v:Vector):Number
参数:
v:Vector
返回:Number
magnitude ()方法
public function magnitude():Number
返回 :Number
minus () 方法
public function minus(v:Vector):Vector
参数:
v:Vector
返回
Vector
minusEquals ()方法
public function minusEquals(v:Vector):Vector
参数:
v:Vector
参数
Vector
mult ()方法
public function mult(s:Number):Vector
参数:
s:Number
返回
Vector
multEquals () 方法
public function multEquals(s:Number):Vector
参数
s:Number
返回
Vector
normalize ()方法
public function normalize():Vector
返回
Vector
plus () 方法
public function plus(v:Vector):Vector
参数
v:Vector
返回
Vector
plusEquals () 方法
public function plusEquals(v:Vector):Vector
参数
v:Vector
返回
Vector
setTo () 方法
public function setTo(px:Number, py:Number):void
参数
px:Number
py:Number
times () 方法
public function times(v:Vector):Vector
参数:
v:Vector
返回
Vector
toString () 方法
public function toString():String
放回
String

APEngine这是一个静态的类,所以里面的所用的属性和方法都是静态的。

属性:
constraintCollisionCycles属性
constraintCollisionCycles:int (读写)
决定在一个APEngine.step()中约束条件和位置更正的次数,这个参数能很好的增加系统的稳定性和阻止穿透现象,尤其是在约束和粒子比较复杂的情况中。这个数字越大,系统越稳定,当然消耗的资源也比较多。
此属性和constraintCycles属性的不同之处在于它在一个APEngine.step()中同时解决了Constraints和collisions。此属性的默认值是1.
constraintCycles属性
constraintCycles:int(读写)
此属性的默认值是0,和constraintCollisionCycles属性类似,不同之处在于它只解决约束问题。
container属性
container:DisplayObjectContainer(读写)
粒子和约束的painting方法默认的容器。如果你要用到内建的painting方法,你必须首先设置它。
damping属性
damping:Number(读写)
全局的阻力,值在0到1之间。值越大阻力越小,当值为一时,没有阻力。当值为0时,所有的粒子都不能运动了(因为阻力太大了)。默认值为1.
damping会减慢你的模拟速度使你的模拟更稳定。如果你发现你的模拟出现跑飞现象,试着更正damping的值。
方法:
addForce()方法
addForce(v:Vector):void
给系统中的所有粒子增加一个力。当用这个方法的时候,粒子的质量也会考虑在内,它在模拟系统中类似风的力是非常有效的。质量大的物理受这个力的影响将小于质量小的物体。注意:物体的尺寸不影响物体的物理行为。
参数:v:Vector——一个矢量,用来代表加入到系统中的力。
addGroup()方法
addGroup(g:Group):void
参数g:Group
addMalllessForce()方法
addMalllessForce(v:Vector):void
为系统中的所有粒子增加一个无质量的力,在用这个方法的时候,粒子的质量不考虑在内。用它来模拟类似于重力的力是非常有效的。
参数:v:Vector——一个矢量,用来代表加入到系统中的力
init()方法
init(dt:Number=0.25):void
初始化引擎,在你增加任何粒子和约束之前必须调用这个方法。
参数:默认值为1/4,经典的取值为1/3或1/4。这是引擎的时间间隔值。这个值和step()方法共同决定了模拟的速度。这个值越低,模拟的速度越低,但是更精确,这个值越高,模拟的速度也越快,但是不精确。注意:这个值只影响粒子所受的力,如果你没有加入力的话,这个值是无关紧要的。
paint()方法
paint():void
调用这个方法将会依次的调用粒子和约束的paint()方法。通常你要在主程序的循环中调用这个方法。
step()方法
step():void
引擎的主要函数,持续不断的调用这个函数才能使模拟不断的进行下去。这个方法被调用的频率越快,模拟的速度也越快。

把外部文本的回车换行替换成br

2011 年 07 月 07 日 at 上午 11:49分类目录:flash actionScript3

把外部文本的回车换行替换成<br/>解决导入进来的段落间隔太大。

var loader:URLLoader = new URLLoader();

loader.load(new URLRequest(“a.txt”));

loader.addEventListener(Event.COMPLETE,onComplete);

function onComplete(e:Event):void{

var reg:RegExp = /\r\n/g;

var str:String = String(e.target.data).replace(reg,”<br/>”);

tf.htmlText = str;

}

使用上面的代码将外部文档识别的换行符“\r\n”替换为html换行符“<br/>”即可。

另外 :在Windows操作系统下换行符为\r\n,而在Linux系统下则是\n,使用时请注意~~