守望者--AIR技术交流

标题: Crossbridge sample 03 Drawing [打印本页]

作者: 破晓    时间: 2015-1-4 17:48
标题: Crossbridge sample 03 Drawing
Crossbridge = FlasCC = Alchemy

接續上一篇Crossbridge sample 02 Interop

這篇來講講範例 3 Drawing。

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


[attach]194[/attach]

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


[attach]195[/attach]

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


[attach]196[/attach]

運行voronoi.swf


[attach]197[/attach]

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


[attach]198[/attach]

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

名詞解釋


分析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

作者: 破晓    时间: 2015-1-4 17:53
本系列目录:

初探 Alchemy 之下載篇


Crossbridge 編譯後運行 Sample 1 HelloWorld


Crossbridge sample 02 Interop



Crossbridge sample 03 Drawing






欢迎光临 守望者--AIR技术交流 (http://www.airmyth.com/)