守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 1409|回复: 0

[基础入门] FlashCC学习札记

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51696
    钢镚
    1422

    开源英雄守望者

    发表于 2015-6-3 15:39:32 | 显示全部楼层 |阅读模式
    本帖最后由 破晓 于 2015-6-3 15:41 编辑

    前段时间项目中有一个功能模块用到了FlashCC,将C++的代码编译成swc文件,以便在Flash工程中使用。开发过程中遇到一些问题,现在记录下来,以便日后查阅。


    一、开发环境搭建

    说明:本文所使用的FlashCC版本为1.0.1, 操作系统为Windows7 Professional 32位

    相对于FlashCC的前身Alchemy来说,FlashCC的开发环境搭建已经简化了许多,一些开发过程中依赖的组件已经默认集成到官方提供的定制Cygwin当中。首先需要注意最小系统需求,下面是官方给出的标准:

    • Flash Player 11 or higher
    • Flex SDK 4.6 or higher
    • Java Virtual Machine (64-bit)
    • Window平台需要:Microsoft® Windows® 7 (64-bit edition)

    其中前两点必须要满足。至于后两点,我的开发机器用的是Win7 32位系统,装的Java虚拟机也是32位的,实际操作中也没有发现太大问题(不过建议有条件的话最好还是使用官方标准)。

    了解基本需求后到各个网站上下载Flex SDKJREFlashCC开发包(1.0.1版本),下载完成后继续下面的步骤:

    1、解压FlexSDK(本文中解压路径为F:\Flex\flex_sdk_4.6)

    2、安装JRE

    3、解压FlashCC开发包(已经内置了定制版的cygwin) (本文中解压路径为F:\Flash\FlasCC_1.0.1)

    4、使用文本编辑器打开F:\Flash\FlasCC_1.0.1\samples\Makefile.common, 修改FLASCC及FLEX变量为下面的值:

    FLASCC:=/cygdrive/f/Flash/FlasCC_1.0.1/sdk
    FLEX:=/cygdrive/c/flex

    至此,FlashCC的开发环境就搭建好了,下面来尝试编译FlashCC开发包中自带的示例程序。


    二、编译样例程序

    直接运行F:\Flash\FlasCC_1.0.1\run.bat,切换工作目录到01_HelloWorld下:

    注意:如果使用的是32位Java虚拟机,则需要修改一下01_HelloWorld下的Makefile, 在编译命令后加上-jvmopt=-Xmx1G



    否则会报下面的错误:“LLVM ERROR: Error: Unable to launch the Java Virtual Machine.
    This usually means you have a 32bit JVM installed or have set your Java heap siz
    e too large.
    Try lowering the Java heap size by passing "-jvmopt=-Xmx1G" to gcc/g++.”在cygwin窗口中输入make:




    一切顺利的话,会在01_HelloWorld目录下多出hello.exe和hello.swf两个文件,使用FlashPlayer打开hello.swf,效果如下:



    三、开发中遇到的问题


    1、FlashCC使用cygwin编译代码,而cygwin是一个linux环境的模拟器,所以要求被编译的代码要使用标准C/C++。或者是做一些跨平台处理。

    2、一开始在项目中编译C++代码成swc文件之后,使用Flash Professional CS5.5建立以一个测试项目,实际运行的时候发现有个地方总是分配不到内存,后来在FlashCC官方论坛上提问,才发现是由于编译时指定的flash版本过低所致(FlashCC要求编译时flash版本最低为11), 论坛上的提问

    3、以前安装的Flash Professional CS5.5发布swf时flash版本最高只能指定到10.2,可以参考下面的文章来添加更高版本的flash支持Adding Flash Player 11 support to Flash Pro CS5 and CS5.5

    4、关于从AS3代码中向C++中传递ByteArray参数的方法,一开始参考了这篇文章,实际测试中发现这种方法在我编写的功能模块中并不能正确工作。

    后来采用官方Demo中的数据传递方法成功解决了ByteArray传参问题。


    贴出参考代码:
    AS3:


    1. <font color="rgb(51, 51, 51)"><font face="verdana, Arial, Helvetica, sans-serif">// First lets fill a ByteArray like we normally would in ActionScript
    2. var bytes:ByteArray = new ByteArray();
    3. bytes.endian = "littleEndian";
    4. for (var j:int = 0; j < 10; j++)
    5.    bytes.writeInt(j);

    6. bytes.position = 0;

    7. // Now we want a pointer to that ByteArray
    8. var bytesPtr:int = CModule.malloc(bytes.length);

    9. // Use CModule.writeBytes() to write the ByteArray we created into flascc's
    10. // main memory.  The parameters of writeBytes() are first the pointer in flascc
    11. // memory, the length of the ByteArray, and the ByteArray itself
    12. CModule.writeBytes(bytesPtr, bytes.length, bytes);
    13. printLine("Checksum: " + MyLib.examineBytes(bytesPtr, bytes.length));
    14. CModule.free(bytesPtr);</font></font>
    复制代码

    C:

    1. __attribute__((annotate("as3sig:public function _wrap_examineBytes(buffer:int, bufferSize:int):int")))
    2. void _wrap_examineBytes() {
    3.   unsigned char *arg1 = (unsigned char *) 0 ;
    4.   int arg2 ;
    5.   int result ;
    6.   {
    7.     AS3_GetScalarFromVar(arg1, buffer);
    8.   }
    9.   {
    10.     AS3_GetScalarFromVar(arg2, bufferSize);
    11.   }
    12.   result = (int)examineBytes((unsigned char const *)arg1,arg2);
    13.   {
    14.     AS3_DeclareVar(asresult, int);
    15.     AS3_CopyScalarToVar(asresult, result);
    16.   }
    17.   {
    18.     AS3_ReturnAS3Var(asresult);
    19.   }
    20. }
    复制代码




    PS:附上FlashCC 官方论坛地址

    http://forums.adobe.com/community/game_developers/flascc



    版权说明:本文章版权归本人及博客园共同所有,未经允许请勿用于任何商业用途。转载请标明原文出处:

    http://www.cnblogs.com/talywy/archive/2013/04/03/2997702.html


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-8-25 18:43 , Processed in 0.039394 second(s), 32 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表