在Haxe / OpenFL等待动画的结束

时间:2017-08-21 21:26:33

标签: html5 animation haxe openfl shockwave

我正在使用Haxe + OpenFL + swf + Actuate进行回合制游戏(我的目标是js)。最重要的游戏方面之一是使用能力。每种能力都有一个动画,当然,这个动画需要花费一些时间。

我想知道如何处理swf动画的结束?提前致谢

1 个答案:

答案 0 :(得分:1)

有各种方法。如果你有一部名为'mySwf'的电影,在主时间轴上设置了一个带有连接'holder'的MovieClip设置,你可以根据这个Haxe NME示例(OpenFL非常相似)将它附加到一个Enterframe循环控制。没有用html5尝试它,因为我的代码是NME,我经常更喜欢OpenFL,但遗憾的是NME不支持html。您可以在NME haxelib中的NyanCat示例中找到替代方法,可能有一个类似的使用OpenFL示例文件夹中的“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 );
     }
  }
 }

确保使用不同的名称将要附加的MovieClip命名为链接标识符,例如代码需要为“holder”,设置Linkage为“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();
    }

显然你也可以探索Khamp,Luxe,OpenFL,NME,Flambe支持的Flump(从fla的png和json / xml导出嵌套结构)。或者您可以查看SpriteSheet / TileSheet解决方案。然而,Swf很好并且受到支持但是没有太多使用,并且可能是最佳文件大小但是我想对于html来说这是一个相当大的开销并且可能在OpenFL Javascript目标上得不到很好支持,至少可能不如C ++上的支持。此外,对于NME / OpenFL的swf支持并不适用于渐变,并且不支持操作。但精灵表png始终有效。其他替代方案可能是尝试将帧导出到svg。