我正在使用Haxe+OpenFL+swf+Actuate(我的目标是js)制作一个基于回合的游戏。一个最重要的游戏方面是使用能力。每个技能都有一个动画,当然,要播放这个动画需要时间。
我想知道如何处理swf动画的结尾?提前谢谢
最佳答案
有多种方法。如果你有一部名为“mySwf”的电影,在主时间线上有一个带有链接“holder”的MovieClip设置,你可以按照这个Haxe-NME示例(OpenFL非常类似)将其附加到Enterframe循环中并进行控制。由于我的代码是NME,所以我没有尝试使用html5,但不幸的是,NME不支持html。在NME haxelib的NyanCat示例中可以找到另一种方法,很可能有一种类似的方法使用OpenFL sample文件夹中的“swf”库,因此希望这只是一个问题或切换导入。
package;
import nme.display.Sprite;
import nme.display.StageAlign;
import nme.display.StageScaleMode;
import nme.Assets;
import format.SWF;
import format.swf.instance.MovieClip;
import flash.events.Event;
class Main extends Sprite{
public function new(){
super ();
loadMovie( 'mySwf');
}
var mc: format.swf.instance.MovieClip;
public function loadMovie( movie: String ){
var swf = new SWF ( Assets.getBytes ("assets/"+movie + ".swf") );
mc = swf.createMovieClip("holder");
mc.gotoAndStop(0);
mc.play();
mc.addEventListener( Event.ENTER_FRAME, loop ,false,0,true );
addChild( mc );
}
function loop( e ){
if( mc.totalFrames == mc.currentFrame ){
mc.stop();
mc.removeEventListener( Event.ENTER_FRAME, loop );
}
}
}
确保用不同的名称命名要附加到链接标识符(例如代码需要是“holder”)的MovieClip,将链接设置为“Export for Actionscript”和“Export in first Frame”,并放置在时间线的第一帧上。上面的这个例子对于CS3 flash swf(as3)或者更新的版本都很好,我认为NyanCat的例子需要更新的flash版本,比如Animate。
如果你想用webgl和canvas回退来寻找更简单、更有效的方法,你需要将你的时间线从Flash中导出为一组png,然后你可以将图片加载到你的应用程序中,并在每个帧中显示不同的图片。例如,如果使用Kha而不是OpenFL,则可以在渲染循环中执行类似于。。。
function render2D( g2: kha.graphics2.Graphics ){
g2.begin(false);
g2.transformation = FastMatrix3.translation( dx, dy ); // or rotation etc..
if( count < images.length ){
g2.drawImage( images[count++], posx, posy );
}
g2.transformation = FastMatrix3.identity();
g2.end();
}
显然,您还可以探索Kha、Luxe、OpenFL、NME、Flambe中支持的Flump(将fla中的嵌套结构导出为png和json/xml)。或者你可以看看SpriteSheet/TileSheet解决方案。然而,SWF很好,并且被支持,但是没有太多的使用,可能是最佳的文件大小,但是我想对于HTML来说,它是相当大的开销,在OpenFL JavaScript目标上可能没有得到很好的支持,至少不支持C++上的支持。此外,swf对NME/OpenFL的支持对于渐变并不完美,并且不支持操作。但是sprite表单png总是有效的。其他的选择可能是尝试将帧导出到svg。
关于html5 - 在Haxe/OpenFL中等待动画结束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45805755/