html - 在 Haxe/OpenFL 中等待动画结束

标签 html animation haxe openfl shockwave

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

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

最佳答案

有多种方式。如果您有一部名为“mySwf”的电影,在主时间轴上设置了 MovieClip 并带有链接“holder”,您可以按照此 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”,将链接设置为“Export for Actionscript”和“Export in first Frame”并放置在时间轴的第一帧。上面的示例适用于 CS3 flash swf ( as3 ) 或更新版本,我认为 NyanCat 示例需要更新的 flash 版本,例如 Animate。

如果您想使用 webgl 和 canvas 后备查看更简单、更有效的方法,您需要将您的时间轴作为一组 png 从 Flash 导出,然后您可以将图像加载到您的应用程序中,并在每一帧显示不同的图像。例如,如果您使用 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 支持对于渐变并不完美,并且不支持 Action 。但是 sprite sheet png 总是有效的。其他替代方法可能是尝试将帧导出为 svg。

关于html - 在 Haxe/OpenFL 中等待动画结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45805755/

相关文章:

javascript - Jquery 菜单和 Logo 切换

javascript - 用户输入的字母阴影

API 级别 11 之前的 Android 查看动画

compiler-errors - 斧头: "Int cannot be called"

syntax - 如何解决奇怪的 Haxe 编译器错误?

haxe - 基于Haxe编译器版本的条件编译?

html - 在输入上方带有标签的 Bootstrap 内联表单

html - 响应式设计改变div的顺序和位置

javascript - HTML 输入文本字段值。读取运算符时出现问题 '>'

wpf - 绑定(bind)更新时为WPF文本设置动画,如何?