尽管有我的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和其他媒体文件非文件流类,它从媒体包文件依次获取其数据。
答案 0 :(得分:1)
我之前从未使用过Java ME,所以我无法帮助那一方,但我每天都使用actionscript / flash。
我能想到的“最简单”的事情是一个两步过程:
漫长的方式是在Flash MX 2004中编写JSFL脚本。 您将为每个帧traverse the shapes,然后将路径数据写入SVG。 另一种稍微不同的方法是导出矢量序列,如上所述(遗憾的是没有JSFL功能来自动化),然后从JSFL读取并循环遍历每个文件,解析它并编写SVG。 这将给你带来的唯一好处是不必安装Inkscape,你不需要切换到另一个应用程序。 我不建议这样做,因为:
我不是说这是不可能的,这似乎是不切实际的。
在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。