上几个例子向我们展示了,如何在main()函数里用C++和AS3进行交互。 但是,如果我们想在C++中实现一些动画效果(循环播放的),怎么办呢? AS3是单线程的,所以,我们不可能说放一个while(true)在main函数里。因为这会把Flash Player的线程阻塞,所有的图像,声音和输入就都不能被处理了。

所以,我们需要组织我们的代码,然后每帧进行调用。 这就需要用到enter frame或者timer事件。 这个示例就替换了默认的console实现, 而增加了一个enter frame处理器,来调用函数。

例子中的console.as这个AS文件,是本例子的实现,FLASCC内部有一个默认实现,用于处理一些输出,比如printf等。 根据不同的需要,可以像本例一样,替换这个console.as文件。从而实现自己的功能。

打开Console.as,你可以在Console的构造函数中发现一个叫CMoulde.startAsync的函数。这是一个帮助函数,它会调用main函数。 在继续讲一些内容之前,需要注意以下两个特点

1、在main函数运行之前,所有的C++静态变量(基础类型)会先运行并初始化

2、而在main函数运行时,C++中的静态构造函数会运行。一些静态全局实例

上面的两点很重要,因为在使用FLASCC将代码编译为SWC库,或者想要驱动一个动画时,main函数在返回时,不能执行上面两种代码的析构函数。 为了防止析构执行,我们在main函数结尾处抛出一个AS3异常,通知AS3。

在GameOfLife.cpp最后一行,可以发现 AS3_GoAsync(); 这个调用,它就是干这个事情的。

在GameOfLife.cpp中,你会发现一个叫updateUniverse的函数,它被标记为了 extern “C”. 这个是防止C++编译器对它的名字进行改动(C++因为支持函数重载,所以会把函数名加上一些标记,标记为C函数后,则不会做此改动)。 这样,AS3代码想调用这个函数的时候,才能够在符号表中,通过名字正确地找到它。 (不过,下一个例子你可以使用另外的方式来控制C++代码向AS3导出的名字,也就是说,你可以自己指定一个名字)。

让我们回到Console.as,我们还可以发现一个叫frameBufferBlit的函数。 这个函数就是enter frame事件的处理函数,在这个函数里,使用了一个叫getPublicSymbol的函数。 用脚也能想到了,这个函数肯定是拿来查找C/C++函数的了。 果不其然,可以发现,它查找的正是前面说到的updateUniverse函数。

最后,简单总结一下,要在FLASCC中实现你自己的主循环,你需要做下面的事。

1、替换Console.as,改为一个带enter frame或者timer的版本。

2、在Console构造函数中使用startAsync函数,在main函数结尾使用AS3_GoAsync()

3、使用CModule帮助函数调用你的更新函数。

另外,这个例子也向我们展示了AS3代码和C++代码混编的方法。 参考04_Animation中的Makefile可以知道,需要结合编译,得先将AS3代码编译为abc,然后再使用 -symbol-abc 参数一起编译。

这个例子收获较多啊。上个图吧。以作纪念。

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/archive/2013/05/17/3082983.html

FlasCC例子研究之Animation相关推荐

  1. FlasCC例子研究之Drawing补充

    这个例子是建立在上一个interop示例的基础上的,这个例子演示了一些更复杂的交互.(绘制到舞台). 这个例子由两个CPP文件组成,所以,可以去看它的makefile文件,看它们是如何用G++打包的( ...

  2. FlasCC例子研究之hellointerop

    例子中的注释已经很详细了,我觉得逐行翻译一下,就完全可以体现出此例子的意义 #include <stdio.h> #include <string.h> #include &q ...

  3. Mule 官方例子研究

    Mule 官方例子研究 一.编译导入Mule自带的例子 1.准备 安装Mule.这里就不介绍mule的安装了,请参考<Mule安装部署手册>. 2. 编译Mule自带例子中的Hello例子 ...

  4. linux mule,Mule 官方例子研究(2)

    Mule 官方例子研究(2) 日期:2011-10-28 点击:169 来源: 未知 分享至: exchange-pattern=\"request-response\"> ...

  5. CORE ANIMATION的学习备忘录

    CORE ANIMATION的学习备忘录(第一天) 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性 ...

  6. Skeletal Animation(骨骼动画)

    Skeletal Animation(骨骼动画) 有关骨骼动画的东西都放在这里好了. http://en.wikipedia.org/wiki/Skeletal_animation Skeletal ...

  7. Android Animation之ScaleAnimation用法详解

    ScaleAnimation用法详解 ScaleAnimation是Animation的子类,其有四个构造方法: 1.public ScaleAnimation(Context context, At ...

  8. 【好程序员笔记分享】——UIView与CALayer详解

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ UIView与CALayer详解 研究Core Animation已经有段时间了,关于Core Animati ...

  9. calayer 与uiview

    研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人,其 ...

最新文章

  1. 霍夫变换(直线检测、圆检测)
  2. [Logstash-input-redis] 使用详解
  3. 安装完Ubuntu桌面后要做的(待续)
  4. 岗位多多,招聘 23人 | 中国农业科学院深圳农业基因组研究所诚聘博士后和科研人员...
  5. HDU 5975 2016ICPC大连 E: Aninteresting game(树状数组原理)
  6. 最新免费计算机编程视频教程
  7. TP5路由知识简单个人汇总
  8. 用Python写的简易PDF阅读器
  9. 引导从打游戏到学计算机,【润笙学堂】暑假孩子沉迷游戏?妈妈一招化解!
  10. 一键获取graphpad同款主题
  11. Gym 102028D Keiichi Tsuchiya the Drift King(2018 ICPC 焦作站 D 题) 计算几何
  12. 手机屏幕常见故障_iPhone手机一些比较常见的维修故障分析
  13. 行业内参:2019年支付监管框架将有大调整 线上线下牌照合并重划
  14. 关于htons和htonl
  15. 中庸----做人的智慧
  16. LPC2294对片外EEPROM(24C04)进行读写操作,如何确定24C02EEPROM地址
  17. 2014年AVAYA IP Office 合作伙伴大会在北京举行,协作成长,乐在德云
  18. 在这里慢慢积累一些单词的记忆方法
  19. 在国内的现货白银生存要具备的心态
  20. 电机可以用到计算机应用吗,电机与控制应用是核心期刊吗_核心期刊_2018中国医学类核心期刊一览表...

热门文章

  1. echarts的词云图表类型有哪些_词云图的几种制作方法评测,你pick哪款
  2. 基于python的压测工具_Python Locust性能测试简介及框架实践
  3. 小程序生成网址链接,网址链接跳转小程序
  4. 封装一个计时器,记录页面的停留时间
  5. 【iOS】sqlite3的使用(増删改查)
  6. 记一次数据库崩溃的恢复
  7. Java面试题总结-Day4
  8. 最常用的Linux命令
  9. python 爬虫气象气象定时报 气象预警推送
  10. Springboot 中 Mybatis 的使用