基于 Alchemy 实现 AS3 与 C++ 交互(1)C++ 回传 Array 给 AS3
0 Alchemy 的使用
请参考 Adobe 官网,这里不赘述。
1 C++ 代码
1.1 接口函数
// AS3 Array 以参数形式传入
AS3_Val test(void *data, AS3_Val args)
{
// 创建一个数组
int array_size = 3;
int array_c[array_size];
array_c[0] = 1;
array_c[1] = 2;
array_c[2] = 3;
// 从参数获取 AS3 Array
AS3_Val asArray = NULL;
AS3_ArrayValue(args, "AS3ValType", &asArray);
// 得到 Array 的 push 方法
AS3_Val push_function = AS3_GetS(asArray, "push");
// 调用上面得到的方法
for (int i = 0; i < array_size; ++i)
{
// 一定要创建 Array 对象,然后把 Array 对象 push 到结果 Array中!!!
AS3_Val int_to_push = AS3_Array("IntType", array_c[i]);
AS3_Call(push_function, asArray, int_to_push);
AS3_Release(int_to_push);
}
AS3_Release(push_function);
return asArray;
}
1.2 封装、暴露
int main()
{
AS3_Val testFun = AS3_Function(NULL, test);
AS3_Val _API = AS3_Object("test:AS3ValType", testFun);
AS3_Release(testFun);
AS3_LibInit(_API);
return 0;
}
2 用 Alchemy 将 C++ 编译成 SWC
g++ test.cpp -swc -O3 -o test.swc
这个过程较慢。
3 AS3 代码
package
{
import cmodule.a.CLibInit;
import flash.display.Sprite;
public class test2 extends Sprite
{
private static var lib:Object = null;
public function test2():void
{
var loader:CLibInit = new CLibInit();
var lib:Object = loader.init();
var oldArray:Array = new Array();
// 调用 C++ 函数
var array:Array = lib.test(oldArray);
for (var i:int = 0; i < array.length; ++i)
{
trace(array[i]);
}
}
}
}
4 运行 AS3 程序
将上面生成的 test.swc 加入到 AS3 工程中,并添加路径。然后运行。我在 Flash Buider 中的结果如下:
1
2
3
[SWF] test2.swf - 解压缩后为 1,574,377 个字节
[卸装 SWF] test2.swf
-
转载请注明来自“柳大·Poechant的CSDN博客”:blog.CSDN.net/Poechant
-
分享到:
相关推荐
其次,Flash与C++的交互,这主要涉及到Adobe的Alchemy项目。Alchemy是一个实验性的工具,它允许开发者将C++代码转换为ActionScript字节码,以便在Flash Player环境中运行。这样,开发者可以利用C++的高性能和丰富的...
C++与Flash的交互主要通过Adobe的Alchemy或Flex SDK的Flash Player本地连接(NPAPI或ActiveX插件)实现。Alchemy允许将C/C++代码编译为SWF文件,直接在Flash Player中运行,而Flash Player本地连接则提供了一种在...
这里的 `CLibInit` 类是 AS3 中与 C 代码交互的接口,`echo` 方法就是 C 代码中实现的功能。 通过这种方式,我们能够利用 C/C++ 的高效计算能力,同时保持 Flash AS3 的灵活性和交互性。这对于需要高性能计算的 AIR...
Alchemy3D是一款强大的Flash3D引擎,它为开发者提供了在Adobe Flash平台上构建高度交互性和视觉效果丰富的3D应用的能力。这款引擎的出现,极大地扩展了Flash的潜力,使其不仅仅局限于2D动画和游戏,而是能够涉足更为...
- **1.2.10 AS3_Val AS3_Array(const char* tt,...)** 和 **1.2.11 AS3_Val AS3_Object(const char* tt,...)**: 用于构建ActionScript Array和Object对象,支持多种类型参数,并且需要调用`AS3_Release`释放。...
本文旨在为初学者提供 Alchemy 的入门教程,讲述如何使用 Alchemy 将 C/C++ 的代码转换为 AS3 可以调用的格式,从而提高 AS3 的效率。下面是本教程的详细内容: 什么是 Alchemy Alchemy 是 Adobe 开发的一款工具,...
编辑-》首选参数-》actionscript-》actionscript 3.0设置-》库路径-》浏览到swc文件,然后选择那个shineMP3_alchemy.swc 另外,在“发布设置”的flash选项里,也要勾选“发布swc” 不需要通过后台或者fms,直接在...
综上所述,该基于Alchemy Au1200的多媒体导航系统设计方案充分考虑了性能、功耗和便携性,集成了多媒体播放、GPS导航等多种功能,实现了车载与便携的完美结合,为用户提供高效、便捷的科技体验。
- **性能提升**:Adobe Alchemy 能够实现约 80% 的原生 C/C++ 代码执行效率,为 ActionScript 3 (AS3) 开发者提供了获取 C/C++ 代码的强大功能和高效执行能力的机会。 - **全面支持**:Alchemy 支持包括模板、异常、...
AS3可以利用Shader语言(如Alchemy或Stage3D)实现复杂的光照模型,如环境光、点光源、聚光灯等。光照计算涉及颜色混合、向量运算以及对材质属性的理解,如镜面反射、漫反射和环境光吸收。 至于"社交游戏"元素,这...
首先,Box2D是一个基于C++的物理模拟库,但通过Flash的Alchemy或Zinc工具可以将其转换为ActionScript 3(AS3)可用的形式。它允许开发者创建具有真实物理行为的游戏对象,如重力、碰撞检测、摩擦力和弹力等,极大地...
在网上无意中发现的 1,使用c实现A*寻路,c的实现里面使用了高效的2叉堆 2,把c代码用alchemy编译成swc 3,在as3中调用swc的接口,返回寻路结果。
1. **安装依赖**:首先,你需要通过Composer安装一个Laravel包装库,如`kriswallsmith/alchemy-api`,这是一个PHP客户端库,简化了与Alchemy API的交互。在终端中运行以下命令: ``` composer require ...
五、C/C++与JavaScript的交互 无论是通过Alchemy还是WebAssembly,C/C++代码在Web上运行时,都需要与JavaScript进行交互,因为JavaScript是Web页面的主要控制语言。这通常通过使用特定的API或库来实现,如Emscripten...
3. **学习算法**:Alchemy包含了多种参数学习算法,如在线学习、批量学习和基于采样的方法。这些算法允许用户根据数据调整公式权重,以优化模型的性能。 4. **推理服务**:工具包提供推理引擎,可以进行精确推理或...
玩炼金技术人有福气了,一键安装就可以直接使用的 alchemy 环境。
1. **模型定义**:Alchemy支持用户用Lisp或OWL格式定义马尔可夫逻辑网络,这使得用户能够灵活地表达复杂的知识结构。 2. **学习算法**:Alchemy包含了多种权重学习算法,如Maximum-Marginal Likelihood(MML)、...
### 基于AMD Alchemy Au1200嵌入式处理器的媒体播放器设计相关知识点解析 #### 一、便携式媒体播放器(PMP)概念与特点 便携式媒体播放器(Portable Media Player,简称PMP)是一种以播放多媒体文件为核心功能的...
Alchemy 是一个 C++ 应用程序,用于预测公开股票市场中的证券走势。 它包括以下功能: 作为具有反向传播的多层感知器的神经网络实现 用于检索历史数据的雅虎财经数据连接器 使用常用技术分析指标作为 NNet 输入...
Alchemy,源自Adobe的实验项目,旨在将C和C++的源代码编译成可在Adobe Actionscript VM2虚拟机上运行的程序,为开发者提供了利用大量现有C、C++代码资源的可能性。本文将详细介绍在Windows环境下,通过Cygwin进行...