如何在Java Micro Edition应用程序中使用Flash内容?

时间:2011-05-11 23:52:35

标签: java flash java-me

尽管有我的luddite倾向,我现在有一个支持Java的手机 - 但没有Flash支持。我也有Macromedia Flash MX2004的副本,虽然我不太可能很快升级。

我希望能够在Flash中开发一些内容(包括矢量动画),然后在Java Micro Edition应用程序中使用这些资源。我不需要Flash的所有功能 - 特别是,我不关心ActionScript支持。但我确实希望能够加载SWF文件(或者更好的是,可以使用转换器工具生成的替代文件格式),并且能够显示动画并使用其他资源(特别是播放声音)那个文件。

是否有一个很好的库和工具包来支持这种事情?显然(来自MX2004)它不需要完全是最新的。

在知识层面 - 我几十年来一直是程序员,现在我的日常用语是C ++。但是,我对Java的知识非常有限,而且几乎没有Micro Edition及其库的知识。

我已经听说过Flash to J2ME转换器,但据我所知,它们只需一步即可生成完整的应用程序,而不是将SWF文件视为从单独编写的Java代码控制的资源来源。 / p>

修改

我觉得这是(略有修改)可能很容易。 Java Mobile Edition支持SVG矢量图形。 SVG支持动画。有(我很确定)将Flash动画转换为SVG的方法 - 可能是应用程序中的简单导出到SVG,但我没有检查过。

这本身并没有给我一个方便的媒体资源包文件格式,但这是一个相对简单的问题需要解决,只要有办法从某种方式“加载”SVG和其他媒体文件非文件流类,它从媒体包文件依次获取其数据。

1 个答案:

答案 0 :(得分:1)

我之前从未使用过Java ME,所以我无法帮助那一方,但我每天都使用actionscript / flash。

我能想到的“最简单”的事情是一个两步过程:

  1. 通过文件>将动画导出为矢量序列出口>导出电影并选择正确的格式(例如.ai / .eps / .dxf)。
  2. 将矢量序列转换为svg。 Inkscape有一些方便的SVG conversion tools
  3. 漫长的方式是在Flash MX 2004中编写JSFL脚本。 您将为每个帧traverse the shapes,然后将路径数据写入SVG。 另一种稍微不同的方法是导出矢量序列,如上所述(遗憾的是没有JSFL功能来自动化),然后从JSFL读取并循环遍历每个文件,解析它并编写SVG。 这将给你带来的唯一好处是不必安装Inkscape,你不需要切换到另一个应用程序。 我不建议这样做,因为:

    1. 您需要编写解析器(dxf / eps可能是最简单的)
    2. 您需要制作一个SVG并且您只能使用Strings(在Flash CS3中添加了E4X XML支持)
    3. 我不是说这是不可能的,这似乎是不切实际的。

      在Inkscape论坛上找到共享bash脚本的this thread

        

      将SWF对象提取到SVG文件

      使用SWFTools,但尚未尝试过。作为参考,这是hadi的脚本:

      #!/bin/bash
      
      #USAGE ./swf2svg.sh /path/to/file.swf > output.svg
      
      FILE=$1;
      DUMP="dump.txt"
      
      echo '<?xml version="1.0" standalone="no"?>
      <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
      "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
      
      <svg width="100%" height="100%" version="1.1"
      xmlns="http://www.w3.org/2000/svg">
      
      ';
      
      swfdump -s $FILE > $DUMP
      
      fillCols=();
      lineCols=();
      lineWidth=();
      
      FILLREGEX="[0-9]+(\s*)SOLID [0-f]{8}";
      LINEREGEX="[0-9]+(\s*)[0-9]\.[0-9]{0,2} [0-f]{8}";
      
      lastStartPoint="";
      pathClosedTag="";
      firstGroup="TRUE";
      firstPath="TRUE";
      
      cat $DUMP | while read line 
      do
         #Remove ( and )
         line=`echo $line | sed "s/[()]//g"`
      
         #tmp=`echo $line | egrep -o "DEFINE(SHAPE|SPRITE)"`;
         tmp=`echo $line | egrep -o "DEFINE(SHAPE|SPRITE)[0-9]? defines id [0-9]+"`;
      
         if [ "$tmp" !=  "" ]
         then
            if [ "$firstGroup" == "TRUE" ]
            then
               firstGroup="FALSE";
            else
               if [ "$firstPath" == "FALSE" ]
               then
                  if [ "$lastStartPoint" != "" ]
                  then
                     if [ "$lastStartPoint" == "$curPoint" ]
                     then
                        pathClosedTag="Z";
                     fi
                  fi
      
                  lastStartPoint=$curPoint;
                  echo $pathClosedTag'" />';
               fi;
               firstPath="TRUE";
               echo '</g>';
            fi
      
            id=`echo $tmp | awk {'print $4'}`
      
            echo '<g id="'$id'">';
            fillCols=();
            lineCols=();
            lineWidth=();
         fi
      
         tmp=`echo $line | egrep -o  "($FILLREGEX)?((\s*)$LINEREGEX)?"`;
         if [ "$tmp" !=  "" ]
         then
            fillInx=`echo $tmp | egrep -o  "$FILLREGEX" | awk {'print $1'}`;
            fillCol=`echo $tmp | egrep -o  "$FILLREGEX" | awk {'print $3'}`;
      
            if [ "$fillCol" != "" ] 
            then
               fillCols[$fillInx]=$fillCol;
            fi
      
            lineInx=`echo $tmp | egrep -o  "$LINEREGEX" | awk {'print $1'}`;
            lineWth=`echo $tmp | egrep -o  "$LINEREGEX" | awk {'print $2'}`;
            lineCol=`echo $tmp | egrep -o  "$LINEREGEX" | awk {'print $3'}`;
            if [ "$lineCol" != "" ] 
            then
               lineCols[$lineInx]=$lineCol;
               lineWidth[$lineInx]=$lineWth;
            fi
         fi
      
         tmp=`echo $line | awk {'print $6'}`;
      
         if [ "$tmp" ==  "lineTo" ]
         then
            echo $line | awk {'print "L"$7" "$8'}
         fi
      
         if [ "$tmp" ==  "moveTo" ]
         then
      
            curPoint=`echo $line | awk {'print $9" "$10'}`;
      
            if [ "$lastStartPoint" != "" ]
            then
               if [ "$lastStartPoint" == "$curPoint" ]
               then
                  pathClosedTag="Z";
               fi
            fi
      
            lastStartPoint=$curPoint;
      
            if [ "$firstPath" == "TRUE" ]
            then
               firstPath="FALSE";
            else
               echo $pathClosedTag'" />';
            fi;
      
            #Remove : and /
            line=`echo $line | sed "s/[:/]/ /g"`
      
            fInx=`echo $line | awk '{printf "%d", $4}'`;
            lInx=`echo $line | awk '{printf "%d", $6}'`;
      
            stl="";
            val=${fillCols[$fInx]:0:6};
            if [ $fInx -gt 0 -a "$val" != "" ]
            then
               stl="fill:#$val;";
            fi
      
            val=${lineCols[$lInx]:0:6};
            if [ $lInx -gt 0 -a "$val" != "" ]
            then
               stl=$stl"stroke:#$val;";
      
               val=${lineWidth[$lInx]};
               if [ "$val" != "" ]
               then
                  stl=$stl"stroke-width:$val;";
      
               fi
            fi
      
            echo '<path style="'$stl'" d="';
            echo $line | awk {'print "M"$9" "$10'}
         fi
      
         if [ "$tmp" ==  "splineTo" ]
         then
            echo $line | awk {'print "Q"$7" "$8" "$9" "$10'}
         fi
      
      done
      echo 'Z" />';
      echo '</g>';
      echo '</svg>';
      

      如果其他人使用更新版本的Flash(如CS4或CS5)读取此内容,则可以使用Flash 2 SVG extension