本文作者:IMWeb 黄龙 原文出处:IMWeb社区 未经同意,禁止转载
介绍
CrossBridge是Adobe FlasCC的开源版本,它提供了一个完整的C/C 开发环境,目的是把C/C 程序编译成Flash程序,运行于Flash Runtime之上。 CrossBridge前身为Alchemy,它提供了一个完整的类似于BSD的C/C 开发环境,基于GCC编译器,可以把C/C 源代码编译成目标Adobe Flash Runtimes程序。使用CrossBridge,可以把现有的大多数C/C 代码移植到Web上。
CrossBridge技术特征:
- 支持现有的C/C 项目文件和makefile文件;
- 可以通过GDB在Flash Runtime中调试代码;
- 可通过C 类访问完整的Flash Runtime API,包括Stage3D for OpenGL/DirectX GPU图形加速库;
- 可充分利用现有的C/C 库的文档、指南和代码实例;
- 支持使用C/C 创建ActionScript库(SWCs)
安装
- 下载crossbridge、AIR SDK
- 安装64位java运行环境
- 从CrossBridge中安装Cygwin
- 编译
- cd 01_HelloWorld
- make FLASCC=/cygdrive/d/crossbridge/sdk FLEX=/cygdrive/d/air_sdk
- Launch the hello.swf file
debug
代码语言:javascript复制//用法:tracef("%s=%u","sizeInt", sizeInt);
#define tracef(...) {
size_t size = 256;
char cstr[size];
AS3_DeclareVar(tracef_str, String);
AS3_CopyCStringToVar(tracef_str, cstr, snprintf(cstr, size, __VA_ARGS__));
AS3_Trace(tracef_str);
}
常见问题
- 'xxx' was not declared in this scope 解决办法:变量范围内未定义,定义一下就好。
- byteswap.h: No such file or directory 解决办法:复制https://github.com/adobe-flash/crossbridge/blob/master/cygwin/usr/include/byteswap.h到本地crossbridge/sdk/usr/include下即可
- tchar.h: No such file or directory 解决办法:用
#include <stdlib.h>
替换#include <tchar.h>
- warning: (perhaps the
offsetof' macro was used incorrectly) 解决办法:Makefile 中添加参数
-Wno-invalid-offsetof`
语法
AS3_Trace
#define AS3_Trace(STR)
简单的包装器去输出字符串到flash日志文件, 你可以在这些位置找到它:
代码语言:javascript复制* Windows 95/98/ME/2000/XP
- C:Documents and SettingsusernameApplication DataMacromediaFlash PlayerLogs
* Windows Vista/Windows 7
- C:UsersusernameAppDataRoamingMacromediaFlash PlayerLogs
* Macintosh OS X
- /Users/username/Library/Preferences/Macromedia/Flash Player/Logs/
* Linux
- /home/username/.macromedia/Flash_Player/Logs/
参数:STR
字符串类型 用法示例:
#include <AS3/AS3.h>
int main() {
AS3_Trace("Hello World!");
}
AS3_DeclareVar
#define AS3_DeclareVar(AS3NAME, AS3TYPE)
声明在当前function的AS3变量。 参数: AS3NAME
在ActionScript变量的名称 AS3TYPE
ActionScript变量的类型声明(例如:String) 用法示例:
#include <AS3/AS3.h>
int main() {
int x = 5;
// 定义一个as3变量,类型是Number
AS3_DeclareVar(myAS3Number, Number);
// 赋值给变量
AS3_CopyScalarToVar(myAS3Number, x);
// 输出这个值
AS3_Trace("myAS3Number=" myAS3Number);
}
AS3_CopyScalarToVar
#define AS3_CopyScalarToVar(AS3VAR, VAL)
从C复制一个值到一个AS3的局部变量 参数: AS3VAR
AS3变量 VAL
c语言的值 用法实例:
#include <AS3/AS3.h>
int main() {
int x = 5;
// 定义一个as3变量,类型是Number
AS3_DeclareVar(myAS3Number, Number);
// 赋值给变量
AS3_CopyScalarToVar(myAS3Number, x);
// 输出这个值
AS3_Trace("myAS3Number=" myAS3Number);
}
AS3_GetScalarFromVar
#define AS3_GetScalarFromVar(CVAR, AS3VAR)
复制一个AS3局部变量为C局部变量 参数: CVAR
C变量 AS3VAR
AS3变量 用法实例:
#include <AS3/AS3.h>
#include <stdio.h>
int main() {
inline_as3("var myAS3Number:Number = 5");
int x;
AS3_GetScalarFromVar(x, myAS3Number);
printf("x=%dn", x); // output: x=5
}