我正在使用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/

10-11 11:59