登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

游戏记忆...

竹石 Blog

 
 
 

日志

 
 

alchemy c/c++的编写  

2010-09-12 10:04:20|  分类: as/flash |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
封装as接口:
要想编写的c库as能调用,必须按照一定的格式封装。api参考
这里。需要包含alchemy/avm2-libc/include/AS3.h文件。
1.  初始化库,在c的主程序的main函数中需要做如下初始化。
int main(int argc, char** argv) {
    //新建一个as3对象
    AS3_Val lib = AS3_Object("");

    //将在as3中可以调用的c函数设置为上面新建的对象的方法(在as3中就是使用这个对象和方法)
    AS3_Val fun = AS3_Function(NULL, p);
    AS3_SetS(lib, "setMap", setMap);
    AS3_Release(fun);

    // notify that we initialized -- THIS DOES NOT RETURN!  
    AS3_LibInit( lib );    //这个函数不会返回,所以这个函数后面的任何代码都不会执行
    return 0;
}

2.  函数参数和返回值
函数的参数和返回值只能是固定格式 ,如 AS3_Val setMap(void* data, AS3_Val args)。
data为包含客户端环境的数据,一般不使用。
args为一个as3数组,类似as3中的fun(data, ...args)形式。args就是用来接收从as3中传入的函数。可以用如下代码转换为c变量:
    int mapWidth;
    int mapHeight;
    char *walkalbe;
    int tileWidth;
    int tileHeight;

    //用来接收as3的ByteArray对象
    unsigned int size;
    AS3_Val btyArr;

    //将as3的数组转换为c变量
    AS3_ArrayValue(args, "IntType, IntType,  AS3ValType, IntType, IntType",  &mapWidth, &mapHeight, &btyArr, &tileWidth, &tileHeight);

    walkalbe = mallocFromByteArray(btyArr, &size);     //函数定义在下面
    AS3_Release(btyArr);

/**
 * 将as3的ByteArray对象转换为c的char数组
 */
char* mallocFromByteArray(AS3_Val byteArray, unsigned int* size) {
    AS3_Val byteArraySize = AS3_GetS(byteArray, "length");
    *size = AS3_IntValue(byteArraySize);
    AS3_Release(byteArraySize);
    char* bytes = (char*) malloc(*size);
    AS3_SetS(byteArray, "position", AS3_Int(0));
    AS3_ByteArray_readBytes(bytes, byteArray, (int)*size);
    return bytes;
 }

函数的返回值必须是AS3_Val,如果没有返回值可以返回AS3_True()。AS3_Val类型可以表示as3中的任何对象类型。

关于编译:
c用gcc,c++用g++。如果有多个文件需要分别编译(或写makefile),如下:
        g++ -c BinHeap.cpp
        g++ -c AStar.cpp
        g++ -c PathFinder.cpp
        g++ BinHeap.o AStar.o PathFinder.o -O3 -Wall -swc -o pathfinder.swc
另外,使用c++的标准库<cstdlib>,会使编译后的文件大许多(+200K),最好使用<stdlib.h> <stdio.h>。
  评论这张
 
阅读(1435)| 评论(1)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018