守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

[基础入门] Crossbridge sample 03 Drawing

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

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

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

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

    开源英雄守望者

    发表于 2015-1-4 17:48:57 | 显示全部楼层 |阅读模式
    Crossbridge = FlasCC = Alchemy

    接續上一篇Crossbridge sample 02 Interop

    這篇來講講範例 3 Drawing。

    如果是用 Java 32 的話,先修改D:\Crossbridge_1.0.1\samples\03_Drawing內的Makefile在5行的後面輸入 -jvmopt=-Xmx1G




    運行D:\Crossbridge_1.0.1內的run.bat,並輸入cd 03_Drawing,再輸入make,等了27秒




    會編譯voronoi.cpp和VoronoiDiagramGenerator.cpp成一個voronoi.swf檔案




    運行voronoi.swf




    開兩個 voronoi.swf ,發現產生的圖竟然是一樣的,就算重先編譯還是根本來的一樣。果然 C 語言亂數是偽亂數。




    讓我們來分析一下 C++ 程式碼,niauwu 順便翻譯一下註釋,並註釋之好了,歡迎加入譯林軍

    名詞解釋
    • voronoi 沃羅諾伊圖
      由俄國數學家Georgy Fedoseevich Voronoi 建立的空間分割演算法。
    • CMoudle C語言程式模組
      Contains convenience functions for reading and writting to domainMemory; also manages any flascc-specific global state (for example, the VFS and Posix interface implementations.)
      CMoudle 包涵方便的函數,用來讀寫主要記憶體; 也管理任何 flascc 相關的全域狀態(例如,VFS 和 Posix 介面實現)
      詳見幫助文檔 D:/Crossbridge_1.0.1/README.html > AS3 API Reference > com.adobe.flascc > CModule
    • rootSprite 根Sprite
      A reference to the current rootSprite so that flascc code has an easy way of getting to the stage regardless of what preloaders might be employed.
      目前 rootSprite 的參考,以便 flascc 代碼不論 preloader 空與否,都可以輕易的獲得 stage。
      詳見幫助文檔 D:/Crossbridge_1.0.1/README.html > AS3 API Reference > com.adobe.flascc > CModule > rootSprite
    • gfx graphics 的縮寫
      應該是因為 ph 發音為 f、cs 發音為 x
    • rand()
      C 語言亂數函數,傳回一個介於 0 到 RAND_MAX 之間的一個數
    • RAND_MAX
      stdlib.h 定義的一個常數,其值在不同的系統有不同的大小,以 DOS 系統為例,其值為 32767 (215-1)。


    分析voronoi.cpp

    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.      
    10.     inline_as3(
    11.         "import flash.display.Stage;\n"
    12.         "import flash.display.Graphics;\n"
    13.         "import com.adobe.flascc.CModule;\n"
    14.         "var gfx = CModule.rootSprite.graphics;\n"
    15.         "gfx.lineStyle(1, 0);\n"  // 等同 AS3 graphics.lineStyle(1, 0);
    16.         "gfx.beginFill(0, 0.0);\n" // 等同 AS3 graphics.beginFill(0, 0.0);
    17.         "%0 = CModule.rootSprite.stage.stageWidth;\n" // %0獲得舞台寬度
    18.         "%1 = CModule.rootSprite.stage.stageHeight;\n" // %1獲得舞台高度
    19.         : "=r"(stagewidth),"=r"(stageheight) : //%0為stagewidth,%1為stageheight
    20.     );
    21.          
    22.     const int cellcount = 512; // 欄位數量
    23.         float xvals[cellcount], yvals[cellcount]; // x和y變數單精度浮點數陣列
    24.     for(int i=0; i<cellcount; i++) {
    25.         xvals[i] = stagewidth * ((float)rand()/(float)RAND_MAX); // 獲得0~1之間的亂數*舞台寬度,指定給xvals[i]
    26.         yvals[i] = stageheight * ((float)rand()/(float)RAND_MAX); // 獲得0~1之間的亂數*舞台寬度,指定給yvals[i]
    27.     }

    28.         VoronoiDiagramGenerator vdg;  //創建VoronoiDiagramGenerator實例vdg
    29.         vdg.generateVoronoi(xvals, yvals, cellcount, 0, stagewidth, 0, stageheight, 3); // 產生Voronoi
    30.         vdg.resetIterator(); //重設Iterator

    31.     float x1,y1,x2,y2;
    32.         while(vdg.getNext(x1,y1,x2,y2))
    33.         {
    34.         inline_as3("gfx.moveTo(%0,%1);\n" : : "r"(x1), "r"(y1)); // 等同 AS3 graphics.moveTo(x1, y1);
    35.         inline_as3("gfx.lineTo(%0,%1);\n" : : "r"(x2), "r"(y2)); // 等同 AS3 graphics.lineTo(x2, y2);
    36.         }
    37.     inline_as3("gfx.endFill();\n"); // 等同 AS3 graphics.endFill();
    38. }
    复制代码
    VoronoiDiagramGenerator.cpp 和 VoronoiDiagramGenerator.h 就不分析了,因為那不是重點,重點是VoronoiDiagramGenerator.cpp include VoronoiDiagramGenerator.h ,然後 voronoi.cpp include VoronoiDiagramGenerator.cpp 和 AS3/AS3.h 和 stdlib.h ,並用 stdlib.h 的 rand()函數取得亂數,紀錄為x、y變數陣列,傳進VoronoiDiagramGenerator,獲得x1,y1,x2,y2,再用 AS3/AS3.h 畫出 Voronoi 圖。

    本例就是要講調用已有的 c++ 演算法代碼,和 AS3.h 畫出 Voronoi 圖。


    本文来自:http://bbs.9ria.com/thread-417600-1-1.html

    本帖子中包含更多资源

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

    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
    金币
    52619
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2015-1-4 17:53:17 | 显示全部楼层
    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    
    关闭

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

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

    GMT+8, 2024-3-28 22:15 , Processed in 0.043824 second(s), 33 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

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