LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭

as3

1880浏览    85参与
榜单数据更新于2022-01-18 01:16
ID507306952

用有理数逼近平方根

尝试用有理数逼近平方根,且这个方法同样适用于比较精确地笔算平方根

原理:完全平方公式 A=(√A)^2=(x+m)^2=x^2+2mx+m^2

其中A是被开方数,x是我们的估测值,m是误差。

当m很小的时候,可以认为m^2→0,此时m=(A-x^2)/2x

故更加精确的数值x'=x+m=x+(A-x^2)/2x=(A/x+x)/2 即为该方法的原理。

可以证明,在保留一定位数小数的情况下,这种方法获得的数字的稳定值永远大于或等于准确值,但是仍然是相当精确的值。

利用上述公式多次循环可以得到相当准确的值。

这里用Flash AS3写了一个小程序 可以用来模拟该过程...

尝试用有理数逼近平方根,且这个方法同样适用于比较精确地笔算平方根

原理:完全平方公式 A=(√A)^2=(x+m)^2=x^2+2mx+m^2

其中A是被开方数,x是我们的估测值,m是误差。

当m很小的时候,可以认为m^2→0,此时m=(A-x^2)/2x

故更加精确的数值x'=x+m=x+(A-x^2)/2x=(A/x+x)/2 即为该方法的原理。

可以证明,在保留一定位数小数的情况下,这种方法获得的数字的稳定值永远大于或等于准确值,但是仍然是相当精确的值。

利用上述公式多次循环可以得到相当准确的值。

这里用Flash AS3写了一个小程序 可以用来模拟该过程

function cu(A:Number,m:String,uu:Number):void{

trace1("R  : "+Math.sqrt(A));

var f:Array=m.split("/");

var f1:Number=Number(f[0]); 

var f2:Number=Number(f[1]);

var t1:Number,t2:Number;

for(var i:Number=1;i<=uu;i++){

trace1((i<10?"0"+i:i)+": "+f1/f2);

trace1(" ("+f1+"/"+f2+")");

t2=2*f1*f2;

t1=f1*f1+f2*f2*A;

f1=t1;

f2=t2;

}


}

function trace1(s:String):void{

put.appendText(s);

put.appendText("\n");

}

cal.addEventListener("click",function(i:*):void{

put.text="";

cu(Number(q0.text),q1.text,int(q2.text));

});

元件摆放如下
程序运行的结果如下(初始值取3/2)


从而可以知道665857/470832已经是较为精确的值了(12位有效数字)。

以下是一些已经获得的结果(就是使用这个程序获得的)

√2 低精度近似665857/470832(12位有效数字)
 高精度近似768398401/543339720 (至少17位有效数字)
≈1.4142135623730951

√3低精度近似3650401/2107560(12位有效数字)
 高精度近似708158977/408855776  (至少17位有效数字)
≈1.7320508075688772

√5低精度近似4870847/2178309(12位有效数字)  51841/23184 (10位有效数字)
 高精度近似5374978561/2403763488  (至少15位有效数字)
≈2.23606797749979

√7低精度近似62921681/23782160(12位有效数字)
 高精度近似2081028097/786554688  (至少17位有效数字)
≈2.6457513110645907

√11低精度近似6874607/2072772(11位有效数字) 79201/23880(10位有效数字)
 高精度近似12545596801/3782639760 (至少14位有效数字)
≈3.3166247903554

_______________________________splitting_______________________________

以下谈一谈关于这个思路在笔算根号中的运用

1.初始值建议取比较逼近的值,但以简单为宜,如√2取3/2,√3取5/3。

2.保留分数直到第3次计算,第3次计算取6位小数(如上图04);精度不高的场合只需计算2次取2位小数(如上图03)。


大概就是这些,欢迎交流想法

ShowFL

潜艇达人

[图片]潜艇达人

潜艇达人

lemlfw@126

String的编码和解码问题

        /**
        * URL编码,encoding为空时应用统一的UTF-8编码处理,可设"GB2312"、"UTF-8"等,(兼容性处理,对应JS中的escape)
        */
        public static function UrlEncode(str:String...
        /**
        * URL编码,encoding为空时应用统一的UTF-8编码处理,可设"GB2312"、"UTF-8"等,(兼容性处理,对应JS中的escape)
        */
        public static function UrlEncode(str:String,encoding:String = ""):String
        {
            if (str == null || str == "")
            {
                return "";
            }
            if (encoding == null || encoding == "")
            {
                return encodeURI(str);
            }
            var returnValue:String = "";
            var byte:ByteArray =new ByteArray();
            byte.writeMultiByte(str,encoding);
            for (var i:int; i<byte.length; i++)
            {
                returnValue +=  escape(String.fromCharCode(byte[i]));
            }
            return returnValue;
        }

        /**
        * URL解码,encoding为空时应用统一的UTF-8编码处理,可设"GB2312"、"UTF-8"等,(兼容性处理,对应JS中的unescape)
        */
        public static function UrlDecode(str:String,encoding:String = ""):String
        {
            if (str == null || str == "")
            {
                return "";
            }
            if (encoding == null || encoding == "")
            {
                return decodeURI(str);
            }
            var returnValue:String = "";
            var byte:ByteArray =new ByteArray();
            byte.writeMultiByte(str,encoding);
            for (var i:int; i<byte.length; i++)
            {
                returnValue +=  unescape(String.fromCharCode(byte[i]));
            }
            return returnValue;
        }
mingyeyishi

自定义上下文菜单

从 InteractiveObject 类进行继承的每个对象可以具有唯一的上下文菜单,用户在 SWF 文件内右键单击时将显示该菜单。默认情况下,菜单中包含几个命令,其中包括“前进” 、“后退” 、 “打印”、 “品质”和 “缩放” 。除了“设置”和“关于”命令外,您可以从菜单中删除所有其它默认命令。如果将 Stage 属性 showDefaultContextMenu 设置为 false,则会从上下文菜单中删除这些命令。要为特定显示对象创建自定义的上下文菜单,请创建 ContextMenu 类的一个新实例,调用hideBuiltInItems() 方法,并将该实例分配给该 DisplayObject...

从 InteractiveObject 类进行继承的每个对象可以具有唯一的上下文菜单,用户在 SWF 文件内右键单击时将显示该菜单。默认情况下,菜单中包含几个命令,其中包括“前进” 、“后退” 、 “打印”、 “品质”和 “缩放” 。除了“设置”和“关于”命令外,您可以从菜单中删除所有其它默认命令。如果将 Stage 属性 showDefaultContextMenu 设置为 false,则会从上下文菜单中删除这些命令。要为特定显示对象创建自定义的上下文菜单,请创建 ContextMenu 类的一个新实例,调用hideBuiltInItems() 方法,并将该实例分配给该 DisplayObject 实例的 contextMenu 属性。下面的示例为一个动态绘制的正方形提供了一个上下文菜单命令,用于将其更改为随机颜色:

var square:Sprite = new Sprite();
square.graphics.beginFill(0x000000);
square.graphics.drawRect(0,0,100,100);
square.graphics.endFill();
square.x = 10;
square.y = 10;
addChild(square);
var menuItem:ContextMenuItem = new ContextMenuItem("Change Color");
menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,changeColor);
var customContextMenu:ContextMenu = new ContextMenu();
customContextMenu.hideBuiltInItems();
customContextMenu.customItems.push(menuItem);
square.contextMenu = customContextMenu;
function changeColor(event:ContextMenuEvent):void
{
square.transform.colorTransform = getRandomColor();
}
function getRandomColor():ColorTransform
{
return new ColorTransform(Math.random(), Math.random(),Math.random(),1,(Math.random() * 512) - 255,(Math.random() * 512) -255,(Math.random() * 512) - 255, 0);
}


lemlfw@126

解决md5的中文加密问题

/*
Adobe Systems Incorporated(r) Source Code License Agreement
Copyright(c) 2005 Adobe Systems Incorporated. All rights reserved.

Please read this Source Code License Agreement carefully before using
the source code.

Adobe Systems Incorporated grants to you a perpetual, worldwide, non-exclusive,
no-charge...

/*
Adobe Systems Incorporated(r) Source Code License Agreement
Copyright(c) 2005 Adobe Systems Incorporated. All rights reserved.

Please read this Source Code License Agreement carefully before using
the source code.

Adobe Systems Incorporated grants to you a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable copyright license, to reproduce,
prepare derivative works of, publicly display, publicly perform, and
distribute this source code and such derivative works in source or
object code form without any attribution requirements.

The name "Adobe Systems Incorporated" must not be used to endorse or promote products
derived from the source code without prior written permission.

You agree to indemnify, hold harmless and defend Adobe Systems Incorporated from and
against any loss, damage, claims or lawsuits, including attorney's
fees that arise or result from your use or distribution of the source
code.

THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT
ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ALSO, THERE IS NO WARRANTY OF
NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT. IN NO EVENT SHALL MACROMEDIA
OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package {
import flash.utils.ByteArray;


/**
* com.adobe.crypto.MD5
* The MD5 Message-Digest Algorithm
*
* Implementation based on algorithm description at
* http://www.faqs.org/rfcs/rfc1321.html
*/
public class MD5 {

/**
* Performs the MD5 hash algorithm on a string.
*
* @param s The string to hash
* @return A string containing the hash value of s
* @langversion ActionScript 3.0
* @playerversion Flash 9.0
* @tiptext
*/
public static function hash( s:String ):String {
// initialize the md buffers
var a:int = 1732584193;
var b:int = -271733879;
var c:int = -1732584194;
var d:int = 271733878;

// variables to store previous values
var aa:int;
var bb:int;
var cc:int;
var dd:int;

// create the blocks from the string and
// save the length as a local var to reduce
// lookup in the loop below
var x:Array = createBlocks( changeUTF(s) );
var len:int = x.length;

// loop over all of the blocks
for ( var i:int = 0; i< len; i += 16) {
// save previous values
aa = a;
bb = b;
cc = c;
dd = d;

// Round 1
a = ff( a, b, c, d, x[i+ 0], 7, -680876936 ); // 1
d = ff( d, a, b, c, x[i+ 1], 12, -389564586 ); // 2
c = ff( c, d, a, b, x[i+ 2], 17, 606105819 ); // 3
b = ff( b, c, d, a, x[i+ 3], 22, -1044525330 ); // 4
a = ff( a, b, c, d, x[i+ 4], 7, -176418897 ); // 5
d = ff( d, a, b, c, x[i+ 5], 12, 1200080426 ); // 6
c = ff( c, d, a, b, x[i+ 6], 17, -1473231341 ); // 7
b = ff( b, c, d, a, x[i+ 7], 22, -45705983 ); // 8
a = ff( a, b, c, d, x[i+ 8], 7, 1770035416 ); // 9
d = ff( d, a, b, c, x[i+ 9], 12, -1958414417 ); // 10
c = ff( c, d, a, b, x[i+10], 17, -42063 ); // 11
b = ff( b, c, d, a, x[i+11], 22, -1990404162 ); // 12
a = ff( a, b, c, d, x[i+12], 7, 1804603682 ); // 13
d = ff( d, a, b, c, x[i+13], 12, -40341101 ); // 14
c = ff( c, d, a, b, x[i+14], 17, -1502002290 ); // 15
b = ff( b, c, d, a, x[i+15], 22, 1236535329 ); // 16

// Round 2
a = gg( a, b, c, d, x[i+ 1], 5, -165796510 ); // 17
d = gg( d, a, b, c, x[i+ 6], 9, -1069501632 ); // 18
c = gg( c, d, a, b, x[i+11], 14, 643717713 ); // 19
b = gg( b, c, d, a, x[i+ 0], 20, -373897302 ); // 20
a = gg( a, b, c, d, x[i+ 5], 5, -701558691 ); // 21
d = gg( d, a, b, c, x[i+10], 9, 38016083 ); // 22
c = gg( c, d, a, b, x[i+15], 14, -660478335 ); // 23
b = gg( b, c, d, a, x[i+ 4], 20, -405537848 ); // 24
a = gg( a, b, c, d, x[i+ 9], 5, 568446438 ); // 25
d = gg( d, a, b, c, x[i+14], 9, -1019803690 ); // 26
c = gg( c, d, a, b, x[i+ 3], 14, -187363961 ); // 27
b = gg( b, c, d, a, x[i+ 8], 20, 1163531501 ); // 28
a = gg( a, b, c, d, x[i+13], 5, -1444681467 ); // 29
d = gg( d, a, b, c, x[i+ 2], 9, -51403784 ); // 30
c = gg( c, d, a, b, x[i+ 7], 14, 1735328473 ); // 31
b = gg( b, c, d, a, x[i+12], 20, -1926607734 ); // 32

// Round 3
a = hh( a, b, c, d, x[i+ 5], 4, -378558 ); // 33
d = hh( d, a, b, c, x[i+ 8], 11, -2022574463 ); // 34
c = hh( c, d, a, b, x[i+11], 16, 1839030562 ); // 35
b = hh( b, c, d, a, x[i+14], 23, -35309556 ); // 36
a = hh( a, b, c, d, x[i+ 1], 4, -1530992060 ); // 37
d = hh( d, a, b, c, x[i+ 4], 11, 1272893353 ); // 38
c = hh( c, d, a, b, x[i+ 7], 16, -155497632 ); // 39
b = hh( b, c, d, a, x[i+10], 23, -1094730640 ); // 40
a = hh( a, b, c, d, x[i+13], 4, 681279174 ); // 41
d = hh( d, a, b, c, x[i+ 0], 11, -358537222 ); // 42
c = hh( c, d, a, b, x[i+ 3], 16, -722521979 ); // 43
b = hh( b, c, d, a, x[i+ 6], 23, 76029189 ); // 44
a = hh( a, b, c, d, x[i+ 9], 4, -640364487 ); // 45
d = hh( d, a, b, c, x[i+12], 11, -421815835 ); // 46
c = hh( c, d, a, b, x[i+15], 16, 530742520 ); // 47
b = hh( b, c, d, a, x[i+ 2], 23, -995338651 ); // 48

// Round 4
a = ii( a, b, c, d, x[i+ 0], 6, -198630844 ); // 49
d = ii( d, a, b, c, x[i+ 7], 10, 1126891415 ); // 50
c = ii( c, d, a, b, x[i+14], 15, -1416354905 ); // 51
b = ii( b, c, d, a, x[i+ 5], 21, -57434055 ); // 52
a = ii( a, b, c, d, x[i+12], 6, 1700485571 ); // 53
d = ii( d, a, b, c, x[i+ 3], 10, -1894986606 ); // 54
c = ii( c, d, a, b, x[i+10], 15, -1051523 ); // 55
b = ii( b, c, d, a, x[i+ 1], 21, -2054922799 ); // 56
a = ii( a, b, c, d, x[i+ 8], 6, 1873313359 ); // 57
d = ii( d, a, b, c, x[i+15], 10, -30611744 ); // 58
c = ii( c, d, a, b, x[i+ 6], 15, -1560198380 ); // 59
b = ii( b, c, d, a, x[i+13], 21, 1309151649 ); // 60
a = ii( a, b, c, d, x[i+ 4], 6, -145523070 ); // 61
d = ii( d, a, b, c, x[i+11], 10, -1120210379 ); // 62
c = ii( c, d, a, b, x[i+ 2], 15, 718787259 ); // 63
b = ii( b, c, d, a, x[i+ 9], 21, -343485551 ); // 64

a += aa;
b += bb;
c += cc;
d += dd;
}

// Finish up by concatening the buffers with their hex output
return IntUtil.toHex( a ) + IntUtil.toHex( b ) + IntUtil.toHex( c ) + IntUtil.toHex( d );
}

/**
* Auxiliary function f as defined in RFC
*/
private static function f( x:int, y:int, z:int ):int {
return ( x& y ) | ( (~x)& z );
}

/**
* Auxiliary function g as defined in RFC
*/
private static function g( x:int, y:int, z:int ):int {
return ( x& z ) | ( y& (~z) );
}

/**
* Auxiliary function h as defined in RFC
*/
private static function h( x:int, y:int, z:int ):int {
return x ^ y ^ z;
}

/**
* Auxiliary function i as defined in RFC
*/
private static function i( x:int, y:int, z:int ):int {
return y ^ ( x | (~z) );
}

/**
* A generic transformation function. The logic of ff, gg, hh, and
* ii are all the same, minus the function used, so pull that logic
* out and simplify the method bodies for the transoformation functions.
*/
private static function transform( func:Function, a:int, b:int, c:int, d:int, x:int, s:int, t:int):int {
var tmp:int = a + int( func( b, c, d ) ) + x + t;
return IntUtil.rol( tmp, s ) + b;
}

/**
* ff transformation function
*/
private static function ff ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int {
return transform( f, a, b, c, d, x, s, t );
}

/**
* gg transformation function
*/
private static function gg ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int {
return transform( g, a, b, c, d, x, s, t );
}

/**
* hh transformation function
*/
private static function hh ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int {
return transform( h, a, b, c, d, x, s, t );
}

/**
* ii transformation function
*/
private static function ii ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int {
return transform( i, a, b, c, d, x, s, t );
}

/**
* Converts a string to a sequence of 16-word blocks
* that we'll do the processing on. Appends padding
* and length in the process.
*
* @param s The string to split into blocks
* @return An array containing the blocks that s was
* split into.
*/
private static function createBlocks( s:String ):Array {
var blocks:Array = new Array();
var len:int = s.length * 8;
var mask:int = 0xFF; // ignore hi byte of characters > 0xFF
for( var i:int = 0; i< len; i += 8 ) {
blocks[ i >> 5 ] |= ( s.charCodeAt( i / 8 )& mask )<< ( i % 32 );
}

// append padding and length
blocks[ len >> 5 ] |= 0x80<< ( len % 32 );
blocks[ ( ( ( len + 64 ) >>> 9 )<< 4 ) + 14 ] = len;
return blocks;
}

/**
*add by alva sun 2007-06-15, warnning s.length must less than 65536
*/
private static function changeUTF2ASCII(s : String) : String{
if(s.length > 65535) throw new Error("In MD5:changeUTF2 s.length must less than 65536");
var ba : ByteArray = new ByteArray();
ba.writeUTF(s);
ba.position = 2;
var rtns : String = "";
for(var i:int=0, n : int = ba.bytesAvailable; i<n; i++){
var un : int = ba.readUnsignedByte();
var uns : String = String.fromCharCode(un);
rtns += uns;
}
return rtns;
}

private static function changeUTF(s : String) : String{
var MAX_LEN : int = 65530;// must less than 65536
var arrlen : int = Math.ceil(s.length/MAX_LEN);
var tmps : String = "";
var rtns : String = "";
for(var i:int = 0; i< arrlen; i++){
if(i == arrlen-1){
tmps = s.substr(i*MAX_LEN);
}else{
tmps = s.substr(i*MAX_LEN, MAX_LEN);
}
rtns += changeUTF2ASCII(tmps);
}
return rtns;
}
}
}

package
{


/**
* com.adobe.utils.IntUtil
* Contains reusable methods for operations pertaining
* to int values.
*/
public class IntUtil {

/**
* Rotates x left n bits
*
* @langversion ActionScript 3.0
* @playerversion Flash 9.0
* @tiptext
*/
public static function rol ( x:int, n:int ):int {
return ( x<< n ) | ( x >>> ( 32 - n ) );
}

/**
* Rotates x right n bits
*
* @langversion ActionScript 3.0
* @playerversion Flash 9.0
* @tiptext
*/
public static function ror ( x:int, n:int ):uint {
var nn:int = 32 - n;
return ( x<< nn ) | ( x >>> ( 32 - nn ) );
}

/** String for quick lookup of a hex character based on index */
private static var hexChars:String = "0123456789abcdef";

/**
* Outputs the hex value of a int, allowing the developer to specify
* the endinaness in the process. Hex output is lowercase.
*
* @param n The int value to output as hex
* @param bigEndian Flag to output the int as big or little endian
* @return A string of length 8 corresponding to the
* hex representation of n ( minus the leading "0x" )
* @langversion ActionScript 3.0
* @playerversion Flash 9.0
* @tiptext
*/
public static function toHex( n:int, bigEndian:Boolean = false ):String {
var s:String = "";

if ( bigEndian ) {
for ( var i:int = 0; i< 4; i++ ) {
s += hexChars.charAt( ( n >> ( ( 3 - i ) * 8 + 4 ) )& 0xF )
+ hexChars.charAt( ( n >> ( ( 3 - i ) * 8 ) )& 0xF );
}
} else {
for ( var x:int = 0; x< 4; x++ ) {
s += hexChars.charAt( ( n >> ( x * 8 + 4 ) )& 0xF )
+ hexChars.charAt( ( n >> ( x * 8 ) )& 0xF );
}
}

return s;
}
}

}


下雨的声音

StageScaleMode.SHOW_ALL的缺陷

StageScaleMode.SHOW_ALL确实很好用,一行代码避免了适配舞台的问题。但是这个模式下有一个缺陷——开发人员无法获取舞台缩放值和舞台真实宽高。导致在不同的分辨率下任何调用stageWidth和stageHeight都可能出错。


解决方案:

stage.scaleMode = StageScaleMode.NO_SCALE;

stage.align = StageAlign.TOP_LEFT;

记录舞台真实宽高

记录原始宽高

计算宽高缩放比例

视图容器根据比例缩放

StageScaleMode.SHOW_ALL确实很好用,一行代码避免了适配舞台的问题。但是这个模式下有一个缺陷——开发人员无法获取舞台缩放值和舞台真实宽高。导致在不同的分辨率下任何调用stageWidth和stageHeight都可能出错。


解决方案:

stage.scaleMode = StageScaleMode.NO_SCALE;

stage.align = StageAlign.TOP_LEFT;

记录舞台真实宽高

记录原始宽高

计算宽高缩放比例

视图容器根据比例缩放

下雨的声音

a,b,c为正整数且a<b<c, a^2+b^2=c^2, a+b+c=1000。求a,b,c的值

由题目可分析得:C<500,因此第一层从500开始递归,这样有个好处,【500到C的距离】肯定小于【0到A的距离】。

如果思路比较清楚的话会写成这样:

private function calc():void
{
        for (var k:int = 499; k > 0; k--)
                for (var j:int =...

由题目可分析得:C<500,因此第一层从500开始递归,这样有个好处,【500到C的距离】肯定小于【0到A的距离】。

如果思路比较清楚的话会写成这样:

private function calc():void
{
        for (var k:int = 499; k > 0; k--)
                for (var j:int = k - 1; j > (1000-k-j); j--)
                {
                        var i:int = 1000 - i - j;
                        if (i * i + j * j == k * k)
                        {
                                trace(i, j, k);
                                return;
                        }
                }
}

有童鞋直接把三元方程组降元后写出了更高效率的公式:

private function calc():void

    for(a = 333; a > 0; a --)

     {

             b = (500000- 1000* a) / (1000- a);

             c = 1000- a - b;

             if(a * a + b * b == c * c)

             {

                     trace(a,b,c);

                     return;

             }

     }

}

像这种算法题,核心思想就是:人可以受累,让计算机尽量少算。

下雨的声音

AS3里的日期

标题:AS3里的日期 

分类: AS3

日期: 2014-05-23 02:08

原文地址: http://blog.sina.com.cn/s/blog_59fc39980101ie6r.html


这么乱七八糟的命名有意义吗?

toDateStringFri May 23 2014

toLocaleDateStringFri May 23 2014

toLocaleStringFri May 23 2014 02:02:00 AM

toLocaleTimeString02:02:00 AM

toStringFri May 23 02:02:00 GMT+0800...

标题:AS3里的日期 

分类: AS3

日期: 2014-05-23 02:08

原文地址: http://blog.sina.com.cn/s/blog_59fc39980101ie6r.html


这么乱七八糟的命名有意义吗?

toDateStringFri May 23 2014

toLocaleDateStringFri May 23 2014

toLocaleStringFri May 23 2014 02:02:00 AM

toLocaleTimeString02:02:00 AM

toStringFri May 23 02:02:00 GMT+0800 2014

toTimeString02:02:00 GMT+0800

toUTCStringThu May 22 18:02:00 2014 UTC


下雨的声音

27行代码实现劲舞团

源码地址:http://wonderfl.net/c/7RP8




源码地址:http://wonderfl.net/c/7RP8


下雨的声音

sort() 函数原理

标题:sort() 函数原理 

分类: as3

日期: 2012-09-22 19:11

原文地址: http://blog.sina.com.cn/s/blog_59fc399801016d67.html


Array的sort函数可以对数组进行排序。他究竟是怎么工作的呢?


我们利用自定义比较函数对其进行测试,看看能不能发现什么。


使用 比较函数的原理 (摘自Adobe说明): 

此方法使用语法和参数顺序 Array.sort(compareFunction, sortOptions),其参数定义如下:

compareFunction...

标题:sort() 函数原理 

分类: as3

日期: 2012-09-22 19:11

原文地址: http://blog.sina.com.cn/s/blog_59fc399801016d67.html


Array的sort函数可以对数组进行排序。他究竟是怎么工作的呢?


我们利用自定义比较函数对其进行测试,看看能不能发现什么。


使用 比较函数的原理 (摘自Adobe说明): 

此方法使用语法和参数顺序 Array.sort(compareFunction, sortOptions),其参数定义如下:

compareFunction - 一个用来确定数组元素排序顺序的比较函数。此参数是可选的。比较函数应该用两个参数进行比较。给定元素 A 和 B,compareFunction 的结果可以具有负值、0 或正值:

若返回值为负,则表示 A 在排序后的序列中出现在 B 之前。

若返回值为 0,则表示 A 和 B 具有相同的排序顺序。

若返回值为正,则表示 A 在排序后的序列中出现在 B 之后。 


请注意,这里有一个 错误 ,正确说法应该是

若返回值<=-1,则表示 A 在排序后的序列中出现在 B 之前。 

若返回值>-1 && <1,则表示 A 和 B 具有相同的排序顺序。 

若返回值>=1,则表示 A 在排序后的序列中出现在 B 之后。 


原因我猜想可能是 compareFunction 的返回值会被取整吧。


实验: 

新建一个函数来做测试。让每次都返回1,于是A就肯定会去B后面

private function sortTrace(arr:Array):Array

{

var outputArr:Array = arr.slice();

outputArr.sort

(

function(a:*,b:*):Number

{


trace(a, b);

return 1;

}

);

trace("currentArr",outputArr);

return outputArr;

}


然后


sortTrace([1,2,3,4,5]) 


输出的是://后为猜想的数组结果

2 3 //13245

5 3

4 3

1 3 //31245

2 3 //这里重复比较了,估计adobe的工程师加班了?

1 4 //34215

5 4

2 4

1 4

1 2

1 5 //34251

2 5 //34521


currentArr 3,4,5,2,1


结论: 

根据输出猜测是快速排序法


注意: 

不要用sort来进行随机排序,因为快速排序法是一种不稳定的排序法!因此无法保证每个数获得相同的待遇,会导致每种结果出现的概率不尽相同。 


renshuming8231

The Adobe Flash plugin has crashed

下面两种情况的flash插件崩溃我都经常遇到:一种是调试as3程序的时候,断点时间过长,导致flash崩溃,调试终止;另一种是用firefox浏览网页,遇到flash插件崩溃的情况。

第一种情况:
【问题描述】当我们在进行Flex或者AS3程序开发的时候,在Flex程序中设置断点,然后在Firefox 3.6中debug,当debug的时间稍微长点的时候,总是会遇到 The Adobe Flash plugin has crashed 的问题,然后IDE中调试也终止。
【解决办法】
    1.打开Firefox,在地址栏输入about:config...
下面两种情况的flash插件崩溃我都经常遇到:一种是调试as3程序的时候,断点时间过长,导致flash崩溃,调试终止;另一种是用firefox浏览网页,遇到flash插件崩溃的情况。

第一种情况:
【问题描述】当我们在进行Flex或者AS3程序开发的时候,在Flex程序中设置断点,然后在Firefox 3.6中debug,当debug的时间稍微长点的时候,总是会遇到 The Adobe Flash plugin has crashed 的问题,然后IDE中调试也终止。
【解决办法】
    1.打开Firefox,在地址栏输入about:config
    2.找到 dom.ipc.plugins.timeoutSecs
    3.双击此行,将value改成 -1 。
    4.问题解决

第二种情况:

官方原文地址:

https://support.mozilla.org/zh-CN/kb/Adobe%20Flash%20%E6%8F%92%E4%BB%B6%E5%B7%B2%E5%B4%A9%E6%BA%83

官方解决方法:

方案1:更新 Flash
方案2: 降级到 Flash 10.3
方案3:禁用 Flash 沙箱特性

最近很长一段时间用firefox浏览多个含大量图片和flash视频的网页经常会卡顿然后出现flash已崩溃。方案1尝试n次无解。方案2没有考虑过。方案3尝试了两个星期,暂时没有出现flash崩溃。简单说下方案3:禁用 Flash 沙箱特性

32位、64位系统分别用记事本打开

C:\windows\system32\macromed\flash\mms.cfg
C:\windows\syswow64\macromed\flash\mms.cfg

加上下面这行,保存(不能保存则用管理员身份运行记事本)。

ProtectedMode=0


原文转自:http://blog.csdn.net/virgoboy2004/article/details/5995984

原文转自:http://nufeng.net/solve-firefox-often-adobe-flash-plugin-has-crashed/

浅墨子歌

认识Tweener缓动类

多年来,补间引擎Tweener赢得了相当多用户的欢迎。最初他是一个ActionScript 2.0版本的引擎,后来被移植到ActionScript 3.0,现在两个版本都有。实际上,Tweener至少部分是基于更早的一款ActionScript 1.0引擎MC Tween开发的,它发布于2003年。Tweener最初由Zeh Fernando(http://zehfernando.com)编写,也有其他一些人的贡献。

安装Tweener之前要到Google代码库:http://code.google.com/p/tweener/下载源文件。这个包的顶层目录叫做caurina。把这个文件夹放到与...

多年来,补间引擎Tweener赢得了相当多用户的欢迎。最初他是一个ActionScript 2.0版本的引擎,后来被移植到ActionScript 3.0,现在两个版本都有。实际上,Tweener至少部分是基于更早的一款ActionScript 1.0引擎MC Tween开发的,它发布于2003年。Tweener最初由Zeh Fernando(http://zehfernando.com)编写,也有其他一些人的贡献。

安装Tweener之前要到Google代码库:http://code.google.com/p/tweener/下载源文件。这个包的顶层目录叫做caurina。把这个文件夹放到与你其他的项目文件相同的文件夹(或者其他你的开发环境能找到的地方)。这个引擎的主类是 caurina.transitions.Tweener。

Tweener的语法很容易适应。与Adobe的Tween类不同,你不需要实例化主类Tweener。而是调用Tweener的静态方法。主要的方法是addTween。就像这样:



Tweener.addTween(target, tweeningParameters);



参数target和tweeningParameters的数据类型都是Object。target是你要改变的对象——通常是个 MovieClip, Sprite或者别的可视对象(虽然目标可以是任何具有至少一个可变数字公共属性的对象)。tweeningParameters属性是一个一般的 Object对象,它拥有若干属性让你可以控制补间的数值,缓动函数,时间等等。所以你可以像下面这样调用它,它将在3秒钟内把一个名为sprite的对象移动到x值为800的位置:



Tweener.addTween(sprite,{x:800, time:3});



或者像这样,把sprite移动到x值为800,y值为400的位置:



Tweener.addTween(sprite,{x:800, y:400, time:3});



显然这个过程比Adobe的两个Tween类都要简单得多。你添加到tweeningParameters的任何属性都会在target对象上被改变。请注意这里没有初始值。目标对象各个属性的当前值被默认为初始值。同需要注意的是你添加到tweeningParameters里的值都是目标的绝对值。换句话说,sprite不会在x轴方向移动800像素,y轴方向移动400像素,而是移动到800,400位置。



tweeningParameters的Object数据类型是Tweener的长项之一,也是很多严肃的开发者不太喜欢的地方之一。一方面,他带来了巨大的灵活性,让你可以改变任何对象的任何公共数值属性。比如,尽管Tweener是在Flash 10出现之前很早被写成的,你依然可以用它来改变一个Sprite的3D属性,没有任何问题:



Tweener.addTween(sprite,{x:800, z:800, rotationX:180, rotationY:270, time:3});



另一方面,因为使用了一般的Object类型,你可以给它添加任何数据类型的任何属性,包括各种不可能被执行的属性。编译器会高高兴兴地编译他,而你只有在看到运行时错误提示的时候才会意识到他们——如果你安装了调试版Flash播放器的话。比如,你可以这样创建一个补间:



Tweener.addTween(sprite, {dog:800, time:3});



显然,dog不是一个Sprite类的一个属性,不应该在那。在你运行SWF文件时它当然会出错,而在编译时不会有任何警告。你还可以给出错误的数据类型,像这样:



Tweener.addTween(sprite, {x:”dog”, time:3});



现在我们知道x应该是一个数值,但是如果一个字符串被放到这个位置,你会丢掉全部的编译时类型检测。这甚至连运行时都不会报错。sprite只是从屏幕上消失,跑到x坐标为把“dog”转换成数值的位置。当然,Tweener会相当聪明的把一个字符串形式的数值转换成数值类型。所以下面的语句会被正确执行:



Tweener.addTween(sprite, {x:”800”, time:3});

浅墨子歌

【转载】AS3 库资源 很多非常有用的类库

下面是非常有用的类库,找到他们的时候我兴奋的不得了
APIs、Libs、Components


1、as3ebaylib
http://code.google.com/p/as3ebaylib/

2、as3youtubelib
http://code.google.com/p/as3youtubelib/

3、as3flickrlib
http://code.google.com/p/as3flickrlib/

4、Yahoo ASTRA Flash Components
http://developer.yahoo.com/flash/astra-flash/

5、facebook...

下面是非常有用的类库,找到他们的时候我兴奋的不得了
APIs、Libs、Components

 

1、as3ebaylib
http://code.google.com/p/as3ebaylib/

2、as3youtubelib
http://code.google.com/p/as3youtubelib/

3、as3flickrlib
http://code.google.com/p/as3flickrlib/

4、Yahoo ASTRA Flash Components
http://developer.yahoo.com/flash/astra-flash/

5、facebook-as3
http://code.google.com/p/facebook-as3/

6、as3awss3lib
http://code.google.com/p/as3awss3lib/

7、Adobe ActionScript 3:resources:apis:libraries (官方,包括corelib、FlexUnit、Flickr、Mappr、RSS and Atom libraries、Odeo、YouTube)
http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries

8、Tweener   用于过渡与切换的一组动画库
http://code.google.com/p/tweener/

9、uicomponents-as3     一组轻量级的AS3 UI组件库
http://code.google.com/p/uicomponents-as3/

10、as3ds     AS3的数据结构实现
http://code.google.com/p/as3ds/

11、mecheye-as3-libraries     一组主要用于Flash 游戏开发的AS3库
http://code.google.com/p/mecheye-as3-libraries/

12、XIFF   一套XMPP协议的AS3实现
http://svn.igniterealtime.org/svn/repos/xiff/branches/xiff_as3_flexlib_beta1/

13、FZip   一套AS3库,可用作对ZIP压缩文件的载入、修改与创建
http://codeazur.com.br/lab/fzip/

14、FlexLib   一套开源的Flex界面组件库
http://code.google.com/p/flexlib/

15、AnimatedGIfLoader Flex Component     可载入GIF的Flex组件
http://dougmccune.com/blog/animatedgifloader-flex-component/

16、goplayground     一套轻量级的,可用创建属于你自己的AS3 动画工具的库
http://code.google.com/p/goplayground/

17、AlivePDF   开源的用于PDF创建的AS3库
http://www.alivepdf.org/

18、jwopitz-lib   一组开源的Flex用户界面组件
http://code.google.com/p/jwopitz-lib/

19、as3crypto   AS3实现的一套加密库,包括多种加密算法
http://code.google.com/p/as3crypto/

20、flare     一套强大的可视化交互的AS3类库
http://flare.prefuse.org/

21、SWFAddress     一小而强大的库,可以为Flash和Ajax提供深链接的功能
http://www.asual.com/swfaddress/

22、SWFObject     用于嵌入Flash,Adobe官方也认可了
http://code.google.com/p/swfobject/

23、ulse Particle System 一套开源的强大的AS3动态粒子系统
http://code.google.com/p/pulse-particle/
http://www.rogue-development.com/pulseParticles.html

24、SpringGraph Flex Component
http://mark-shepherd.com/blog/springgraph-flex-component/

25、GoASAP     AS3动画库
http://code.google.com/p/goasap/
http://www.goasap.org/index.html

26、asaplibrary   一套开源的Flash Actionscript3.0 RIA库
http://code.google.com/p/asaplibrary/
http://asaplibrary.org/
http://asapframework.org

27、as3mathlib 开源Flex/Actionscript数学库
http://code.google.com/p/as3mathlib/

28、as3corelib 包含一些基础功能AS3库
http://code.google.com/p/as3corelib/

29、minimalcomps 一组AS3 UI组件
http://www.bit-101.com/minimalcomps/

30、as3gif
http://code.google.com/p/as3gif/

31、queueloader-as3     一组AS3库,用来进行资源序列载入及监测
http://code.google.com/p/queueloader-as3/

32、TweenMax (AS3)
http://blog.greensock.com/tweenmaxas3/

33、Atellis Reflection Component             一款Flex反射效果组件
http://labs.atellis.com/2007/07/11/atellis-reflection-component/

34、AS3Eval     简单来说,就是用AS3实现的AS3编译器
http://eval.hurlant.com/

35、ByteArray的组件、库合集,包括liquid components、mousegesture、ASZip、GIF Player、GIF Animation Encoder、AlivePDF、Live JPEG Encoder、ScaleBitmap等
http://www.bytearray.org/?page_id=82

36、AS3C     针对AVM2虚拟机,用C#写的字节码编译器
http://code.google.com/p/as3c/

37、as3httpclientlib   as3实现的http客户端
http://code.google.com/p/as3httpclientlib/

38、as3ui   一组常规的as3 ui界面库
http://code.google.com/p/as3ui/

39、as3xls 让你在flex中可以读写Excel文件
http://code.google.com/p/as3xls/

40、as3flexdb 让你的flex程序可以连接到MySQL服务器,主要是使用AMFPHP来访问PHP服务器
http://code.google.com/p/as3flexdb/
这一是一篇详细使用介绍的教程
http://itutorials.ro/viewtopic.php?f=9&t=7

41、vivisectingmedia-as3  一组AS3/Flex实用库,是作者在实践中总结出来的
http://code.google.com/p/vivisectingmedia-as3/

Actionscript 3.0 Class

1、fZip   此类可允许你载入标准的zip文件并提取里面包含的文件
http://wahlers.com.br/claus/blog/zip-it-up/

2、AS3: Layout class for Flash CS3     一组用作布局的类
http://www.senocular.com/?id=2.8

3、CSSLoader     该类允许Flex应用程序在运行时载入CSS
http://www.rubenswieringa.com/blog/cssloader

4、AS3: QueryString     一个单例类,用来获取URL地址后所带参数值对
http://evolve.reintroducing.com/2008/07/03/as3/as3-querystring/#more-141

5、ActionScript 3 Contextual Menu Manager Class         AS3关联菜单管理类
http://www.blog.noponies.com/archives/103

2D & 3D Engine

1、APE (Actionscript Physics Engine)   物理引擎
APE前身是as2版本的Flade,呼声很高,优点就是清晰简单,一共没有几个类:),目前版本alpha 0.45 ,有API文档和示例,教程有一篇quick start ,在Google Group上有一个论坛可以讨论。svn上一直在更新目前svn上的版本为0.5a

http://www.cove.org/ape/

2、Away3D
http://code.google.com/p/away3d/

3、Papervision3D
http://code.google.com/p/papervision3d/

4、Sandy     开源3D库
http://www.flashsandy.org/versions/3.0

5、FORM   一套AS3完成的用于2D刚性物体的物理引擎
http://code.google.com/p/foam-as3/

6、Five3D   基于矢量的Flash 3D 交互动画创建
http://five3d.mathieu-badimon.com/

7、Flade (Flash Dynamics Engine)   一套开源的2D物理引擎,AS2实现
http://www.cove.org/flade/

8、Box2DFlashAS3     2D物理引擎,AS3实现,基于强大的Box2D C++物理库
http://box2dflash.sourceforge.net/

9、Paradox   基于Flash的第一称3D引擎
http://animasinteractive.com/propaganda/

10、ND3D AS3 3D Engine  一款简单的AS3开源3D引擎,编译后的引擎大小仅约10K
http://code.google.com/p/nd3d/
http://www.nulldesign.de/nd3d-as3-3d-engine/

11、motor2   基于Box2d的AS3刚体引擎,也是2D的.
作者就是 AS3数据结构的作者,2007年最后一天发布
作者主页:http://lab.polygonal.de/motor_physics/
代码:http://code.google.com/p/motor2/

12、WOW-Engine   法国人写的,基于Sandy library的算法 3D物理引擎
http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/

FrameWorks

1、Cairngorm   Adobe官方出的Flex框架
http://labs.adobe.com/wiki/index.php/Cairngorm

2、PureMVC   纯AS3框架,也有其它语言的实现
http://www.puremvc.org/

3、ASWing AS3   一套开源的AS3 GUI框架
http://www.aswing.org/

4、EasyMVC   由事件驱动的MVC框架
http://projects.simb.net/easyMVC/

5、Mate 基于Tag及事件驱动的Flex框架
http://mate.asfusion.com/

6、ARP     基于模式(Pattern)的RIA框架,Flash平台,支持AS2和AS3
http://osflash.org/projects/arp

7、Gaia   开源的Flash前端框架,支持AS2和AS3,用于快速开发
http://www.gaiaflashframework.com/

8、flest   Actionscript3.0/Flex应用程序框架,用来开发企业级的RIA
http://code.google.com/p/flest/

9、Gugga     Flash Framework     更新至AS3
http://www.gugga.com/flashblog/

10、Prana 另一个提供了IOC反转控制的框架,类似著名的Spring框架
http://www.pranaframework.org/

11、OpenFlux   开源的Flex组件框架,让开发Flex组件更加快速容易
http://code.google.com/p/openflux/

12、Degrafa       声明式的Flex图形框架,允许以MXML标签的方式绘制图形、创建皮肤,还包括对CSS的支持
http://code.google.com/p/degrafa/

13、FlexMVCs   针对AS3和Flex的应用程序框架,基于PureMVC,作了些修正和精简
http://code.google.com/p/flexmvcs/

Flash & Flex Tools、Servers

1、FlexUnit     Flex/Actionscript3.0单元测试框架
http://code.google.com/p/as3flexunitlib/

2、Visual FlexUnit 增强的FlexUnit,支持“可视化断言”
http://code.google.com/p/visualflexunit/

3、RED bug       debug调试控制器,让Flash、Flex、AIR应用程序更加容易
http://www.realeyesmedia.com/redbug/

4、reflexutil 可在运行时对Flex组件进行调试
http://code.google.com/p/reflexutil/

5、FxSpy   当Flex应用程序运行时可以检测和动态的改变可视化组件属性值
http://code.google.com/p/fxspy/

6、ThunderBolt 基于Firefox的Firebug插件的日志扩展,支持AS2及AS3
http://code.google.com/p/flash-thunderbolt/

7、FlashTracer Firefox扩展,可以以侧栏的方式将Flash中trace()的结果显示

8、RIALogger 另一款Flex/AIR的Debug工具
http://renaun.com/blog/flex-components/rialogger/

9、Alcon 一款轻量级的AS2及AS3的Debug工具,AIR方式将Debug信息展示出来
http://blog.hexagonstar.com/alcon/

10、GDS (Granite Data Services) 开源,提供了Adobe LiveCycle Data Services类似功能的服务器
http://www.graniteds.org/

Flex Explorers   (大部分为Flex2版本,但同样适用于Flex3)

1、Flex3 Component Explorer   Flex各类组件示例
http://examples.adobe.com/flex3/componentexplorer/explorer.html

2、Resize ManagerFX Explorer (此为商业作品,要收费的)
http://www.teotigraphix.com/explorers/ResizeManagerFX/ResizeManagerFXExplorer.html

3、Flex3 Style Explorer
http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html

4、Flex2 Style Explorer(添加了Kuler功能)Flex UI组件风格定制并可输出为CSS
http://www.maclema.com/content/sek/

5、Flex2 Style Explorer(Adobe 原始的版本)
http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html

6、Flex2 Filter Explorer   查看各类滤镜效果并可进行设置
http://merhl.com/flex2_samples/filterExplorer/
http://merhl.com/?p=40   (AIR版本)

7、Flex2 Primitive Explorer   在Flex中创建各种简单形状

http://www.flexibleexperiments.com/Flex/PrimitiveExplorer/Flex2PrimitiveExplorer.html

浅墨子歌

AS3.0编程 滤镜类(二)

ActionScript 3.0中加入了滤镜类,使用滤镜类,可以实现改变颜色、形状、大小、旋转或其它显示效果。本节将终点讲述滤镜类及其用法。

滤镜类

在ActionScript 3.0中所提供的滤镜都位于flash.filters包中,这些滤镜既可以用于在Flash中创作的显示对象,也可以用于位图对象。使用滤镜可以应用丰富的视觉效果来显示对象,实现模糊、斜角、发光和投影等效果。
常用的滤镜类有6中,如表所示:

投影效果

在ActionScript 3.0中,可使用DropShadowFilter类向显示对象添加投影效果。其用法格式如下所示:
DropShadowFilter(distance...

ActionScript 3.0中加入了滤镜类,使用滤镜类,可以实现改变颜色、形状、大小、旋转或其它显示效果。本节将终点讲述滤镜类及其用法。

滤镜类

在ActionScript 3.0中所提供的滤镜都位于flash.filters包中,这些滤镜既可以用于在Flash中创作的显示对象,也可以用于位图对象。使用滤镜可以应用丰富的视觉效果来显示对象,实现模糊、斜角、发光和投影等效果。
常用的滤镜类有6中,如表所示:

投影效果

在ActionScript 3.0中,可使用DropShadowFilter类向显示对象添加投影效果。其用法格式如下所示:
DropShadowFilter(distance,angle,color,alpha,blurX,blurY,strength,quality,inner,knockout,hideObject)
参数说明如下:
distance:表示阴影的偏移距离,以像素为单位。默认值为4。
angle:表示阴影的倾斜角度,用0到360度的浮点数表示。默认值为4.5。
color:表示阴影颜色,采用十六进制格式0xRRGGBB。默认值为0×000000,黑色。
alpha:表示阴影颜色的Alpha透明度值。有效值为0到1.0。默认值为1。
blurX:水平模糊偏移量。有效值为0到255的浮点数。默认值为4。
blurY:垂直模糊偏移量。有效值为0到255.0的浮点数。默认值为4。
strength:印记或跨页的强度。该值越高,压印的颜色越深,而且阴影与背景之间的对比度也越强。有效值为0到255。默认值为1。
quality:滤镜的品质。也可以使用BitmapFilterQuality常数:BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM和BitmapFilterQuality.HIGH。
inner:表示阴影是否为内侧阴影。值true指定内侧阴影。值false指定外侧阴影。
knockout:表示是否应用挖空效果(true),若应用,将有效地使对象的填色变为透明,并显示文档的背景颜色。
hideObject:表示是否隐藏对象本身。如果值为true,则表示没有绘制对象本身,只有阴影是可见的。

发光效果

在ActionScript 3.0中,显示对象上应用GlowFilter类可以实现加亮效果,能够使显示对象看起来像是被下方的灯光照亮,可创造出一种柔和发光效果。其构造函数用法格式如下所示:
GlowFilter(color,alpha,blurX,blurY,strength,quality,inner,knockout)
参数说明如下:
color:光晕颜色,采用十六进制格式0xRRGGBB。默认值为0xFF0000。
alpha:颜色的Alpha透明度值。有效值为0到1。默认值为1。
blurX:水平模糊偏移量。有效值为0到255的浮点数。以2的乘方值进行优化,呈现速度比其它值更快。默认值为6。
blurY:垂直模糊偏移量。有效值为0到255的浮点数。以2的乘方值进行优化,呈现速度比其它值更快。默认值为6。
strength:印记或跨页的强度。该值越高,压印的颜色越深,而且发光与背景之间的对比度也越强。 有效值为0到255。默认值为2。
quality:滤镜的品质。可使用BitmapFilterQuality常数:BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM、BitmapFilterQuality.HIGH。
inner:指定发光是否为内侧发光。值true 指定发光是内侧发光。值false 指定发光是外侧发光(对象外缘周围的发光)。
knockout:指定对象是否具有挖空效果。值为true 将使对象的填充变为透明,并显示文档的背景颜色。

浮雕效果

在ActionScript 3.0中,可以使用GradientBevelFilter类实现对显示对象或BitmapData对象应用增强的斜角,以产生类似浮雕的效果。也可以在斜角上使用渐变颜色可以大大改善斜角的空间深度,使边缘产生一种更逼真的三维外观效果。其构造函数用法格式如下所示:
GradientBevelFilter(distance,angle,colors,alphas,ratios,blurX,blurY,strength,quality,type,knockout)
参数说明如下:
distance:偏移距离。有效值为0到8。默认值为4。
angle:偏移角度,以度为单位。有效值为0到360。默认值为45度。
colors:渐变中使用的RGB十六进制颜色值数组。
alphas:colors数组中对应颜色的Alpha透明度值的数组。数组中每个元素的有效值为0到1。
ratios:颜色分布比例的数组;有效值为0到255。
blurX:水平模糊量。有效值为0到255。如果模糊量小于或等于1,则表明原始图像是按原样复制的。默认值为 4。采用2的乘方值进行优化,呈现速度比其它值更快。
blurY:垂直模糊量。。有效值为0到255。如果模糊量小于或等于1,则表明原始图像是按原样复制的。默认值为 4。采用2的乘方值进行优化,呈现速度比其它值更快。
strength:印记或跨页的强度。该值越高,压印的颜色越深,而且斜角与背景之间的对比度也越强。 有效值为0到255。值为0表示未应用滤镜。
quality:滤镜的品质。可以使用BitmapFilterQuality常数:BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM和BitmapFilterQuality.HIGH。
type:斜角效果的放置。可能的值为BitmapFilterType常数:BitmapFilterType.OUTER便是对象外缘上的斜角;BitmapFilterType.INNER表示对象内缘上的斜角;BitmapFilterType.FULL表示对象顶部的斜角。
knockout:Boolean:指定是否应用挖空效果。值为true将使对象的填充变为透明,并显示文档的背景颜色。

渐变发光效果

在ActionScript 3.0中,使用GradientGlowFilter类可以实现对显示对象或BitmapData对象应用增强的发光效果。此方法还可以很好的控制发光颜色,从而产生一种更逼真的发光效果。此外,渐变发光滤镜还可以实现在对象的内侧、外侧或上侧边缘应用渐变发光。其构造函数用法格式如下所示:
GradientGlowFilter(distance,angle,colorsl,alphas,ratios,blurX,blurY,strength,quality,type,knockout)
参数说明如下:
distance:光晕偏移距离。默认值为4。
angle:偏移角度,以度为单位。有效值为0到360。默认值为45度。
colors:渐变中使用的RGB十六进制颜色值数组。
alphas:colors数组中对应颜色的Alpha透明度值的数组。数组中每个元素的有效值为0到1。
ratios:颜色分布比例的数组;有效值为0到255。
blurX:水平模糊量。有效值为0到255。如果模糊量小于或等于1,则表明原始图像是按原样复制的。默认值为 4。采用2的乘方值进行优化,呈现速度比其它值更快。
blurY:垂直模糊量。。有效值为0到255。如果模糊量小于或等于1,则表明原始图像是按原样复制的。默认值为 4。采用2的乘方值进行优化,呈现速度比其它值更快。
strength:印记或跨页的强度。该值越高,压印的颜色越深,而且斜角与背景之间的对比度也越强。 有效值为0到255。值为0表示未应用滤镜。
quality:滤镜的品质。可以使用BitmapFilterQuality常数:BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM和BitmapFilterQuality.HIGH。
type:斜角效果的放置。可能的值为BitmapFilterType常数:BitmapFilterType.OUTER便是对象外缘上的斜角;BitmapFilterType.INNER表示对象内缘上的斜角;BitmapFilterType.FULL表示对象顶部的斜角。
knockout:Boolean:指定是否应用挖空效果。值为true将使对象的填充变为透明,并显示文档的背景颜色。

模糊效果

在ActionScript 3.0中,使用BlurFilter类可以对显示对象及其内容具有涂抹或模糊的效果。模糊效果可以用于产生对象不在焦点之内的视觉效果,也可以用于模拟快速运动,比如运动模糊。其类构造函数用法格式如下所示:
BlurFilter(blurX:Number = 4.0, blurY:Number = 4.0, quality:int = 1)
参数说明如下:
blurX:水平模糊量。有效值为0到255的浮点数。默认值为4。
blurY:垂直模糊量。有效值为0到255的浮点数。默认值为4。
quality:滤镜的品质。可以使用BitmapFilterQuality常数:BitmapFilterQuality.LOW、BitmapFilterQuality.MEDIUM和BitmapFilterQuality.HIGH。

Abel Lee

关于N个多相同Button共处的优化方案

假设同一个界面中,

有一堆的功能按钮,完全相同,只是指针的数据不同,

这时候可以采用类似cacheAsBitmap的方式去处理

首先, Button的所有状态的皮肤都需要是取自同一处的BitmapData

把BitmapData装到Bitmap里给Button设置相应状态的皮肤

然后新建一个继承自Sprite的类:BitmapButton

添加MouseEvent.ROLL_OVER、MouseEvent.ROLL_OUT、Event.CHANGE

如果Button.toggle = false的情况下,

非常轻松,在ROLL_OVER里addChild(btn);

在ROLL_OUT里removeChild(...

假设同一个界面中,

有一堆的功能按钮,完全相同,只是指针的数据不同,

这时候可以采用类似cacheAsBitmap的方式去处理

首先, Button的所有状态的皮肤都需要是取自同一处的BitmapData

把BitmapData装到Bitmap里给Button设置相应状态的皮肤

然后新建一个继承自Sprite的类:BitmapButton

添加MouseEvent.ROLL_OVER、MouseEvent.ROLL_OUT、Event.CHANGE

如果Button.toggle = false的情况下,

非常轻松,在ROLL_OVER里addChild(btn);

在ROLL_OUT里removeChild(btn);

在removeChild之前,取得按钮upSkin的皮肤,

btn.getStyle("upSkin");

是一个Bitmap

然后addChild(Bitmap);

也就是说,当鼠标离开这个视图的时候,我们把按钮移除掉,显示鼠标离开按钮那时候的状态的图片,也就是upSkin的图片。

当ROLL_OVER的时候 把这张图片remove掉 再次添加回这个Button

但如果Button.toggle = true的时候

这时候我们需要记录按钮的状态,在Event.CHANGE里判断,

按钮是否已经selected,并且记录下来,

当下一次ROLL_OVER的时候,判断已保存的状态并恢复回来。

这样有个好处是,不管你这个界面里有多少处用到这个按钮的地方,

对于按钮本身来说 它永远都只是一个存在的实例,只是在不同的容器中来回跑而已

我们也不用再次的创建它了。

再者,在当按钮被移除,并添加按钮当前状态的图片时,

由于我们是取自于按钮当前状态的Bitmap皮肤里的bitmapData

都只是在用同一个bitmapData

假设界面里有100处用到一个一模一样的按钮的地方,

如果不作以上处理,只是在设置按钮皮肤的时候,让Bitmap总是取同一个BitmapData

并且设置了按钮的4个不同状态,

也就是说 100个按钮用到的资源分别是:

100个按钮 + 4个BitmapData

而如果作以上处理 100个按钮用到的资源就变为:

1个按钮 + 4个BitmapData

其它产生的数据基本可以忽略不记了。。


一线工作室™

寻找美工一枚

迫切需要啊,俺是做游戏开发的,美术画画什么的却不在行,特此寻找美工一枚 共同协作,收益平分。

迫切需要啊,俺是做游戏开发的,美术画画什么的却不在行,特此寻找美工一枚 共同协作,收益平分。

下雨的声音

Air 打包 ipa的巨坑

如果根目录含有.DS_Store这个文件,ipa将无法安装。


蜀黍调试了两天,简直莫名其妙!

如果根目录含有.DS_Store这个文件,ipa将无法安装。


蜀黍调试了两天,简直莫名其妙!

flash163

BlitMask

BlitMask(
target:DisplayObject, //遮罩的目标影片
x:Number = 0, //遮罩层x坐标
y:Number = 0, //遮罩层y坐标
width:Number = 100, //遮罩层宽度
height:Number = 100, //遮罩层高度
smoothing:Boolean = false, //遮罩滑动动画
autoUpdate:Boolean = false,//遮罩更新
fillColor:uint = 0x00000000, //遮罩层填色
wrap:Boolean = false)//遮罩是否循环

example1:

TweenLite.to(mc...

BlitMask(
target:DisplayObject, //遮罩的目标影片
x:Number = 0, //遮罩层x坐标
y:Number = 0, //遮罩层y坐标
width:Number = 100, //遮罩层宽度
height:Number = 100, //遮罩层高度
smoothing:Boolean = false, //遮罩滑动动画
autoUpdate:Boolean = false,//遮罩更新
fillColor:uint = 0x00000000, //遮罩层填色
wrap:Boolean = false)//遮罩是否循环

example1:

TweenLite.to(mc, 3, {x:400, onStart:myBlitMask.enableBitmapMode, onUpdate:myBlitMask.update, onComplete:myBlitMask.disableBitmapMode

example2:

myBlitMask.scrollX = 0;
TweenLite.to(myBlitMask, 5, {scrollX:1});

example3:

//create a 200x200 BlitMask positioned at x:20, y:50 to mask our "mc" object and turn smoothing on:
var blitMask:BlitMask = new BlitMask(mc, 20, 50, 200, 200, true);

//position mc at the top left of the BlitMask using the scrollX and scrollY properties
blitMask.scrollX = 0;
blitMask.scrollY = 0;

//tween the scrollY to make mc scroll to the bottom over the course of 3 seconds and then turn off bitmapMode so that mc becomes interactive:
TweenLite.to(blitMask, 3, {scrollY:1, onComplete:blitMask.disableBitmapMode});

//or simply position mc manually and then call update() to sync the display:
mc.x = 350;
blitMask.update();

example4:
var bm:BlitMask = new BlitMask(mc, 0, 0, 300, 200, true);
TweenLite.to(mc, 3, {x:200, onUpdate:bm.update, onComplete:completeHandler});
function completeHandler():void { bm.bitmapMode = false; }

BlitMask.addEventListener(MouseEvent.ROLL_OUT,myevent)
BlitMask.normalizePosition()
BlitMask.bitmapMode=true

下雨的声音

FlashToIOS研究

Adobe宣布终止Flash支持,由于Air技术,其实Flash是做手机游戏、移动应用的非常方便、完整的解决方案。


由此我想到,如果有一天我们玩不到Flash了,是不是可以通过Air技术将Flash游戏移植到iOS上?


移植主要会遇到以下问题:

1.效率问题:通畅flash没有针对移动设备进行优化,利用CPU模式执行起来会卡。GPU模式又存在不支持滤镜的问题

2.显示问题:没有考虑移动设备的显示,会出现字体显示不全等情况

3.键盘问题:移动设备没有键盘

4.分辨率问题:移动设备不会去迁就应用,也不能允许应用窗口执行,应用必须是全屏。

5.加载Bug:有些swf独立运行可以...

Adobe宣布终止Flash支持,由于Air技术,其实Flash是做手机游戏、移动应用的非常方便、完整的解决方案。


由此我想到,如果有一天我们玩不到Flash了,是不是可以通过Air技术将Flash游戏移植到iOS上?


移植主要会遇到以下问题:

1.效率问题:通畅flash没有针对移动设备进行优化,利用CPU模式执行起来会卡。GPU模式又存在不支持滤镜的问题

2.显示问题:没有考虑移动设备的显示,会出现字体显示不全等情况

3.键盘问题:移动设备没有键盘

4.分辨率问题:移动设备不会去迁就应用,也不能允许应用窗口执行,应用必须是全屏。

5.加载Bug:有些swf独立运行可以,加载就会出错,因为加载时一些变量为空,比如loaderInfo.url、ContextMenu,导致非法访问。



以下是我的方案:

1.效率问题:无解,只能躲避

2.显示问题:具体问题具体分析

3.键盘问题:使用虚拟按键、多点触控、手势等代替

4.分辨率问题:利用舞台缩放+中对齐+(背景)完成,或利用舞台缩放+拉伸完成

5.利用ASV修改代码,将其变为无意义的语句。

LOFTER

让兴趣,更有趣

简单随性的记录
丰富多彩的内容
让生活更加充实

下载移动端
关注最新消息