2

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

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

4

1 回答 1

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 );
     }
  }
 }

确保将要附加的影片剪辑以不同的名称附加到链接标识符,例如代码需要为“holder”,将链接设置为“Export for Actionscript”和“Export in first Frame”并放置在第一帧时间线。上面的这个例子适用于 CS3 flash swf ( as3 ) 或更新版本,我认为 NyanCat 例子需要更新的 flash 版本,比如 Animate。

如果您想使用 webgl 和画布后备查看更简单更有效的方法,您需要将时间线导出为 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++ 的支持。此外,对 NME/OpenFL 的 swf 支持对于渐变并不完美,并且不支持操作。但是精灵表 png 总是可以的。其他选择可能是尝试将帧导出到 svg。

于 2017-08-22T00:30:03.760 回答