由于工作需要写了个C++的A星寻路算法,用在flash游戏里的自动寻路,而缩小寻路时间,提高效率
需要用到的是强大的工具FlasCC,下面记录下使用效率非常高的参数转换方法。
需要用到的头文件是 "AS3/AS3.h" 和"AS3/AS3++.h"
1、返回AS3的Array类型:
void returnArray() __attribute__((used,
annotate("as3sig:public function returnArray():Array"),
annotate("as3package:myLib")));
void returnArray()
{
inline_as3("var myArray:Array = new Array();\n");
inline_as3("var myAS3Number:int;\n");
for(int i=0; i<5; i++)
{
AS3_CopyScalarToVar(myAS3Number, i);
AS3_Trace(myAS3Number);
inline_as3("myArray.push(myAS3Number);\n");
}
//除了Number和int数字类型外,其它的类型返回均要用下面这个函数
AS3_ReturnAS3Var(myArray);
}
2、获取AS3传入的int,Number,String类型,并返回Number类型:
void getArgs() __attribute__((used,
annotate("as3sig:public function getArgs(intValue:int, strValue:String):Number"),
annotate("as3package:myLib")));
void getArgs()
{
double num;
AS3_GetScalarFromVar(num, intValue);
AS3::local::var cVar;
AS3_GetVarxxFromVar(cVar, strValue);
char* str = AS3::local::internal::utf8_toString(cVar);
printf("cVar=%s\n", str); // output: cVar=hello
inline_as3(
"trace(\"trace: \" +%0 + \": \" + CModule.readString(%1, %2));\n"
: : "r"(num), "r"(str), "r"(strlen(str))
);
free(str);
AS3_Return(num);
}
3、在flash中查看打印信息方法:
const char* words[] = {"O", "#", "X"};
for(i=0; i<3; i++) {
inline_as3(
"trace(\"trace: \" + %0 + \": \" + CModule.readString(%1, %2));\n"
: : "r"(i), "r"(words[i]), "r"(strlen(words[i]))
);
}