编程技术分享平台

网站首页 > 技术教程 正文

写几句代码 - 完美复活 Flash 动画

xnh888 2024-11-16 02:15:00 技术教程 29 ℃ 0 评论

Flash 动画在现代浏览器环境下虽然没有生存空间了,但是作为桌面软件的动画控件还是有些剩余价值的。现在系统已不再自带 Flash 控件。如果说让你的软件用户自己去找旧版本控件再啃着上万字的教程自己摸索复活 Flash 播放器 - 先不说别人有没有这个耐心,单单是修改版的控件加安装时跳出来的管理权限警告、或者冷不丁蹦出来的弹窗广告估计就能把别人吓跑了。

下面我介绍一个更简单复活 Flash 播放器的方法,用打包后只有 3MB 的 WebKit(WKE) 内核浏览器组件嵌入 Flash 插件(绿色免安装),可以生成独立 EXE 文件,兼容 com.flash 的接口。

这里我们需要用到 web.kit 扩展库里的 web.kit.flash ,先看个简单的例子:

import win.ui;
/*DSG{{*/
var winform = win.form(text="web.kit.flash 动画")
/*}}*/

import web.kit.flash;
var flash = web.kit.flash( winform ); 
winform.show(); 

//导出函数给 Flash
flash.external = {
  func = function(){} 
}

//指定初始化属性,建议在指定 movie 属性以前指定
flash.bgcolor = "transparent";
flash.wMode = "transparent"; 
flash.flashVars = {a="v1",b="v2"};

//修改此属性或调用 render() 函数才会打开 Flash 动画。
flash.movie = "https://update.aardio.com/v10.files/demo/transparent.swf";

//调用 Flash 控件函数
var flashVersion = flash.getVariable("$version")
winform.msgbox("Flash 版本:" + flashVersion)

//如下调用 Flash 导出的函数
/*
flash.xcall("Flash导出函数名",任意个调用参数)
flash.Flash导出函数名(任意个调用参数)
*/

win.loopMessage();

上面就是一个桌面软件的完整代码,在 aardio 里新建一个空白工程,把上面的代码复制到 main.aardio 中,然后按「发布」按钮就可以生成独立 EXE 文件了。

要注意用浏览器控件播放 Flash ,那么 Flash 的地址必须传入通过 HTTP 服务器访问的网址。如果你要打开本地文件,这在 aardio 中非常容易,一句代码就可以搞定,如下:

import wsock.tcp.simpleHttpServer;
flash.movie = wsock.tcp.simpleHttpServer.startUrl("/res/test.swf");

"/res/test.swf" 是加入 aardio 工程目录的文件,"/res/"可以是嵌入EXE的资源目录。不需要改动任何代码,aardio 会自动支持内存加载这个 "/res/test.swf" 文件,可以生成独立 EXE,可以在运行时自动创建 HTTP 服务端并分配访问这个文件的网址 —— 并且 HTTP 服务端自动获取空闲端口( 不会出现端口冲突 )。

wsock.tcp.asynHttpServer 也能创建嵌入式 HTTP 服务器,区别是 wsock.tcp.asynHttpServer 是单线程异步服务器,而 wsock.tcp.simpleHttpServer 是多线程服务器。

在 aardio 中你可以用任何内存数据虚拟一个通过 HTTP 访问的文件地址,例如 com.cube3 扩展库就是这样做的:

import wsock.tcp.asynHttpServer;
httpServer = wsock.tcp.asynHttpServer();

httpServer.run({ 
    ["/cube3.swf"] = #34;~\lib\com\cube3\.res\cube3.swf"
});
flash.movie = httpServer.getUrl("/cube3.swf");

上面的代码就是通过嵌入 HTTP 服务器虚拟的文件网址访问内存中的 swf 数据(请注意在文件路径前面加上 $ 就会将该文件的内容编译到程序中并返回二进制字符串)。

扩展库 com.cube3 是一个魔方公式转动画的组件,这个扩展库原来是使用 com.flash 实现,我们现在使用 web.kit.flash 复活了这个扩展库,com.cube3 的完整源码如下:

import web.kit.flash;
import wsock.tcp.asynHttpServer;
import string.conv;

namespace com;

class cube3{
  ctor( winform,param ){
    this = ..web.kit.flash(winform);
  }; 
  start = function(param){
    if(param){
      var fm = function(move){
        if(!#move) return; 
        move = ..string.conv.fromWide( move ); 
        move = ..string.replace(move,"\n","\\n");
        move = ..string.replace(move,'\t',' ') ;
        return move;
      }

      param.initmove = fm(param.initmove);
          param.move = fm( param.move );
          param.speed = param.speed;
          param.mirror = param.mirror;
          
          this.flashVars = param;
    }
    
    this.movie = httpServer.getUrl("/cube3.swf");  
  } 
}

namespace cube3{
    httpServer = ..wsock.tcp.asynHttpServer();
    httpServer.run({ 
      ["/cube3.swf"] = #34;~\lib\com\cube3\.res\cube3.swf"
    });
}

看下调用 com.cube3 的运行效果:


在 aardio 扩展库管理器中双击 com.cube3 扩展库可以打开上面的范例源代码。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表