守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 1066|回复: 1

[基础入门] FlasCC例子研究之Drawing

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

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

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

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

    开源英雄守望者

    发表于 2015-5-29 10:23:18 | 显示全部楼层 |阅读模式
    这个例子主要是向大家展示 voronoi 图的绘制方法。

    Voronoi图,又叫泰森多边形Dirichlet图,其具体介绍可以参见这里http://baike.baidu.com/view/501103.htm,这不是本例子的重点。
    这个例子并没有向大家展示太多的东西,AS3相关的调用和C API的使用,也和先前没有太多区别。 唯 一不同的是,这个例子的voronoi图的生成,使用了C++ class. 也就是说,这个例子,让大家看到FlasCC对C++的支持。

    下面的代码,是例子原生代码,中间并没有注释。 这是因为,已经不需要注释了。所用到的,都是前面 Interop中已经介绍了的内容。
    1. #include <stdio.h>
    2. #include <time.h>
    3. #include <stdlib.h>
    4. #include "VoronoiDiagramGenerator.h"
    5. #include "AS3/AS3.h"

    6. int main(int argc,char **argv)
    7. {
    8.     int stagewidth, stageheight;
    9.     inline_as3(
    10.         "import flash.display.Stage;\n"
    11.         "import flash.display.Graphics;\n"
    12.         "import com.adobe.flascc.CModule;\n"
    13.         "var gfx = CModule.rootSprite.graphics;\n"
    14.         "gfx.lineStyle(1, 0);\n"
    15.         "gfx.beginFill(0, 0.0);\n"
    16.         "%0 = CModule.rootSprite.stage.stageWidth;\n"
    17.         "%1 = CModule.rootSprite.stage.stageHeight;\n"
    18.         : "=r"(stagewidth),"=r"(stageheight) :
    19.     );
    20.     const int cellcount = 512;
    21.     float xvals[cellcount], yvals[cellcount];
    22.     for(int i=0; i<cellcount; i++) {
    23.         xvals[i] = stagewidth * ((float)rand()/(float)RAND_MAX);
    24.         yvals[i] = stageheight * ((float)rand()/(float)RAND_MAX);
    25.     }

    26.     VoronoiDiagramGenerator vdg;
    27.     vdg.generateVoronoi(xvals, yvals, cellcount, 0, stagewidth, 0, stageheight, 3);
    28.     vdg.resetIterator();

    29.     float x1,y1,x2,y2;
    30.     while(vdg.getNext(x1,y1,x2,y2))
    31.     {
    32.         inline_as3("gfx.moveTo(%0,%1);\n" : : "r"(x1), "r"(y1));
    33.         inline_as3("gfx.lineTo(%0,%1);\n" : : "r"(x2), "r"(y2));
    34.     }
    35.     inline_as3("gfx.endFill();\n");
    36. }
    复制代码

    来个图!



    本帖子中包含更多资源

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

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

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

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

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

    开源英雄守望者

     楼主| 发表于 2015-5-29 10:23:51 | 显示全部楼层
    FlasCC例子研究之Drawing补充

    这个例子是建立在上一个interop示例的基础上的,这个例子演示了一些更复杂的交互。(绘制到舞台)。 这个例子由两个CPP文件组成,所以,可以去看它的makefile文件,看它们是如何用G++打包的(如果不熟悉G++的话,可以通过这个学习一下用法)。
    如果你不太熟悉Voronoi图,可以自己百度,但是,这不是本示例的重点。这个例子主要是想向大家展示的是一些在voronoi.cpp使用到的FLASH交互内容。

    如果你查看voronoi.cpp源代码,你可以看见一个叫console的类。 这个类的源代码放在了sdk/usr/share/Console.as位置。 这个类的目的就是提供一些libc的调用实现,比如printf什么的。
    Console.as除了提供基础调用以外,也是作为你编译为SWF文件的主类,大家都知道的,如果在AS3中想生成一个项目,必须是要有一个活动AS3文档,派生自Sprite作为入口函数的。 Console.as提供了一个TextField来接受所有的标准C/C++输出。 而在一个真正的SWF或者SWC中,你可能需要替换Console.as来实现自己的需求,比如输出重定向什么的。 下一个例子就会向你演示如何来实现一个自己的Console.as。
    但是,在这个例子中,大家只要把注意力集中在它的current变量上就可以了。
    当使用默认的SWF版本(-swf-version-18)编译时。FLASCC将会尝试在后台运行代码。 但是,在这个例子中,我们直接将想要绘制的东西绘制到舞台上。 因为舞台上的东西,在后台运行时,也会得到相应的处理。 至于 多线程的东西, 后面的教程会提到,所以,这个例子就没有必要演示得太多了。

    最后,这个例子使用了SWF 17进编译,它会运行在Flash的主线程中。


    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    
    关闭

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

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

    GMT+8, 2019-10-23 17:22 , Processed in 0.043625 second(s), 31 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

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