通过 AS3 访问(用于导出)在 Flash 编辑器中创建的矩形的渐变

Posted

技术标签:

【中文标题】通过 AS3 访问(用于导出)在 Flash 编辑器中创建的矩形的渐变【英文标题】:Accessing via AS3 (for export) the gradient of a rectangle created in the Flash Editor 【发布时间】:2011-06-05 02:15:52 【问题描述】:

我需要导出使用 Flash 编辑器创建的矩形的渐变设置。我们的艺术家在 .fla 中创建了一个带有渐变的矩形。是否可以从 .swf 或我可以编写的 flash 插件中检索渐变参数?

【问题讨论】:

也许这可以用 JSFL 脚本来完成。不确定。 【参考方案1】:

看看由 Claus Wahlers 编写的优秀库 as3swf,你可以从那里

解析、创建、修改和发布 SWF 文件

.

【讨论】:

看起来很整洁,但我有点紧张,因为图书馆还处于 alpha 阶段。【参考方案2】:

Sothink Decompiler 可让您反编译 swf,从而获得原始 FLA。 http://www.sothink.com/product/flashdecompiler/ 它是付费的,但他们有免费试用。

不记得是否可以在试用版中导出到 fla。

【讨论】:

【参考方案3】:

几年前我需要这个,幸运的是 Tink 已经写了一个扩展/JSFL 脚本:Copy Fill as AS3。

我记得在渐变方面遇到了一些小问题,具体取决于选择,但忘记了这是怎么回事。如果扩展不能正常工作,这里是我稍作改动的版本:

document = fl.getDocumentDOM();
selection = document.getSelectionRect();
selection.left != undefined ? useSelection = true : useSelection = false;
useSelection ? fill = document.getCustomFill( "selection" ) : fill = document.getCustomFill( "toolbar" );
fl.outputPanel.clear();
var output = "";
if(fill.style != "noFill")
    if( fill.style == "solid" )
    
        if( fill.color.length == 9 )
        
            a = Math.round( ( parseInt( "0x" + fill.color.substr( 7, 2 ) ) / 255 ) * 100 ) / 100;
            output += "beginFill( 0x" + fill.color.substr( 1, 6 ).toUpperCase() + ", " + a + " );";
        
        else
        
            output += "beginFill( 0x" + fill.color.substr( 1, 6 ).toUpperCase() + ", 1 );";
        
        
    
    else if( fill.style == "linearGradient" )
    
        output += "beginGradientFill( GradientType.LINEAR, ";
    
    else if( fill.style == "radialGradient" )
    
        output += "beginGradientFill( GradientType.RADIAL, ";
    
    if( fill.style != "solid" )
     
        c = new Array();
        a = new Array()
        for( i = 0; i < fill.colorArray.length; i++ )
        
            if(fill.colorArray)
                if( fill.colorArray[ i ].length == 9 )
                
                    c.push( "0x" + fill.colorArray[ i ].substr( 1, 6 ).toUpperCase() );
                    a.push( Math.round( ( parseInt( "0x" + fill.colorArray[ i ].substr( 7, 2 ) ) / 255 ) * 100 ) / 100 );
                
                else
                
                    c.push( "0x" + fill.colorArray[ i ].substr( 1, 6 ).toUpperCase() );
                    a.push( 1 );
                
            
        
        document.setSelectionRect(left:0,top:0,right:0,bottom:0,true);
        document.setSelectionRect(selection,true);
        localX = fill.matrix.tx - selection.left;
        localY = fill.matrix.ty - selection.top
        if(localX < 0 || localY < 0) error = true;
        else error = false;
        if(useSelection) 
        
            matrix = 'new Matrix(' + fill.matrix.a + ', ' + fill.matrix.b + ', ' + fill.matrix.c + ', ' + fill.matrix.d + ', ' + localX + ', ' + localY + ')';
        
        else
        
            matrix = 'new Matrix(' + fill.matrix.a + ', ' + fill.matrix.b + ', ' + fill.matrix.c + ', ' + fill.matrix.d + ', ' + fill.matrix.tx + ', ' + fill.matrix.ty + ')';
        
        
        switch(fill.overflow)
            case "Extend":
            spreadMethod = "SpreadMethod.PAD";
            break;
            case "Repeat":
            spreadMethod = "SpreadMethod.REPEAT";
            break;
            case "Reflect":
            spreadMethod = "SpreadMethod.REFLECT";
            break;
        
        !fill.linearRGB ? interpolationMethod = 'InterpolationMethod.RGB' : interpolationMethod = 'InterpolationMethod.LINEAR_RGB';
        
        if(fill.focalPoint != 0) output += "[ " + c.join( ", " ) + " ], [ " + a.join( ", " ) + " ], [ " + fill.posArray.join( ", " ) + " ], " + matrix + ", " + spreadMethod + ", " + interpolationMethod + ", " + fill.focalPoint + "); ";
        else output += "[ " + c.join( ", " ) + " ], [ " + a.join( ", " ) + " ], [ " + fill.posArray.join( ", " ) + " ], " + matrix + ", " + spreadMethod + ", " + interpolationMethod + "); ";
         
    
    
    if(error) 
    
        fl.trace("You have moved your selection!Please re-select the shape and run this command again");
    else
    
        fl.clipCopyString( output );
        fl.trace( output );
    
else
    fl.trace( 'No Fill is Selected' );

如果你将它保存为 Copy Fill as AS3.jsfl 在 Flash 的 Commands 文件夹中,它应该会在 IDE 的 Commands 菜单中弹出。

HTH

【讨论】:

以上是关于通过 AS3 访问(用于导出)在 Flash 编辑器中创建的矩形的渐变的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 Flash as3 中的阶段

Flash AS3全局安全设置 - 以编程方式

用flash as3语言如何将影片剪辑存入一个数组以及如何访问?

是否可以在外部编辑器(如 AS2/3)中编辑 Flash Pro CC 2015 HTML5 项目 JS 代码?

如何导出与 Flash Player 8 兼容的 Adob​​e Flash cc 文件?

AS3 Flash - 通过 ExternalInterface 渲染 html