Actionscript 3 如何将对炼金术asm声明变量的引用获取到flash中?
我在alchemy asm中声明了一个变量:Actionscript 3 如何将对炼金术asm声明变量的引用获取到flash中?,actionscript-3,actionscript,alchemy,Actionscript 3,Actionscript,Alchemy,我在alchemy asm中声明了一个变量: asm("var buffer:Vector.<Number> = new Vector.<Number>(100, true);"); 我不明白的是如何将asm“buffer”变量的引用获取到actionscript中 (我确实想到了一种方法……我所做的是从alchemy asm中抛出“缓冲区”,然后在actionscript中捕获它,但不幸的是,它似乎泄漏了大量内存) 有没有更好的替代方法 请注意,性能至关重要,而使用默
asm("var buffer:Vector.<Number> = new Vector.<Number>(100, true);");
我不明白的是如何将asm“buffer”变量的引用获取到actionscript中
(我确实想到了一种方法……我所做的是从alchemy asm中抛出“缓冲区”,然后在actionscript中捕获它,但不幸的是,它似乎泄漏了大量内存)
有没有更好的替代方法
请注意,性能至关重要,而使用默认的alchemy封送太慢。
asm
仅用于来回传递数字,这意味着我们必须使用alchemy的内部int到对象映射。通过挖掘中间AS3代码(要查看它,请将ACHACKS\u TMPS
环境变量设置为“1”),似乎CTypemap.AS3ValType
会进行映射。因此,您可以返回asm创建的对象,如下所示:
static AS3_Val alc_return_obj(void *self, AS3_Val args) {
int len= 100;
// create custom data in AS3
asm("var as3Buffer:Vector.<Number> = new Vector.<Number>(%0, true);" : : "r"(len));
// populate the vector with multiples of pi (just for fun)
for (int idx= 0; idx < len; idx++) {
double value= 3.14159265 * idx;
asm("as3Buffer[%0] = %1;" : : "r"(idx) , "r"(value));
}
// get a C reference to the AS3 object
AS3_Val alcBuffer;
asm("%0 CTypemap.AS3ValType.createC(as3Buffer)[0];" : "=r"(alcBuffer));
return alcBuffer;
}
static AS3_Val alc_return_obj(void*self,AS3_Val args){
int len=100;
//在AS3中创建自定义数据
asm(“var as3Buffer:Vector.=新向量。(%0,true);”::“r”(len));
//用pi的倍数填充向量(只是为了好玩)
for(int-idx=0;idx
注意:虽然这是有趣的黑客行为,但它可能不是解决此问题的最佳方法。这可能不是从炼金术中获取数据并进入Flash的最快方法。为此,我建议使用ByteArray将数据复制到Alchemy的RAM中或从中复制出来。有关该领域的一些技术,请参见本节。在这种情况下,我需要调用Graphics.drawTriangles,不幸的是,它不采用ByteArray。啊,那么使用asm可能是最好的方法:)
static AS3_Val alc_return_obj(void *self, AS3_Val args) {
int len= 100;
// create custom data in AS3
asm("var as3Buffer:Vector.<Number> = new Vector.<Number>(%0, true);" : : "r"(len));
// populate the vector with multiples of pi (just for fun)
for (int idx= 0; idx < len; idx++) {
double value= 3.14159265 * idx;
asm("as3Buffer[%0] = %1;" : : "r"(idx) , "r"(value));
}
// get a C reference to the AS3 object
AS3_Val alcBuffer;
asm("%0 CTypemap.AS3ValType.createC(as3Buffer)[0];" : "=r"(alcBuffer));
return alcBuffer;
}