Quantcast
Channel: LicKy's blog - AS3
Viewing all articles
Browse latest Browse all 11

C++和AS3的各种参数转换实例

$
0
0

由于工作需要写了个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]))
        );
    } 

 

 


Viewing all articles
Browse latest Browse all 11

Trending Articles