rulururu

post 判断计算机显卡是否支持Adobe Flash Stage3D

七月 14th, 2011

Filed under: Flash,Game,R&D — Peter @ 10:46 下午

Adobe Flash Player支持GPU加速的Stage3D功能无疑对未来的Web game渲染性能带来质的飞跃。目前包含这一功能的Flash Player 11 Beta版本已经发布在Adobe Labs。
或许很多开发者都有这样的问题,我如何知道哪些设备支持Stage3D呢?
按下面方法即可获取到:
运行这个工具 http://zp.amsnet.pl/cdragan/d3dcaps.html 得到一个叫 ‘devcaps.txt’ 的文件。 查看两个着色器的值。
如:
VERTEX_SHADER_VERSION FFFE0200
PIXEL_SHADER_VERSION FFFF0200

忽略FFFE/FFFF, 只看红色部分的值,这个值必须都大于0200 才能支持molehill, 否则就软解。
注意,这两个值会在devcaps.txt文件中出现两次,用后面出现的那一组 (第一组的值是0104,忽略即可)。

 

post Flash打包的iOS程序里到底是啥?

五月 6th, 2011

Filed under: Flash,Flash Mobile — Peter @ 8:54 下午

是打包了个虚拟机?还是完全转换为Objective-C的Bytecode?答案是后者:)
看看Adobe传教士James Ward的说明:
Apps created with Flex and bundled for iOS are standard iOS applications consisting only of Objective-C Bytecode. By converting the Flex application to Objective-C Bytecode there is no longer a dependency on the ActionScript Virtual Machine. The process of converting an application to native Objective-C Bytecode is one employed by numerous other Apple accepted technologies like Appcelerator Titanium and Corona.

看这里:http://www.jamesward.com/2011/04/11/tour-de-mobile-flex-on-ios/#comments

post 运用Flash Pro CS5编译及发布基于AIR2.6或更高版本的iOS应用

四月 6th, 2011

Filed under: Flash,Flash Mobile — Peter @ 11:45 下午

上周发布了关于AIR新一代ADT工具打包的iOS应用性能提升的 视频 之后,很多朋友都在问我关于如何运用Flash Pro CS5发布基于AIR2.6或更高版本的iOS应用,所以今天简单给大家介绍下。
我们知道运用最新版本的Flash Builder “Burrito”可以发布最新版本的AIR程序,并通过ADT打包为iOS应用。但是很多开发者开发制作的是FLA格式的Flash应用,所以他们也很希望通过Flash Pro来实现同样的功能。即将出现的最新版本CS pro也会集成这个功能,想用CS5尝鲜的朋友根据下面几个步骤就可以轻松搞定。

1. 看看你是否安装了Flash Professional CS5上的AIR for Android开发插件,(http://labs.adobe.com/technologies/flashpro_extensionforair/),不过这个插件目前官方已经不再提供,以后的发布会集成在最新版本的Flash Pro中。如果安装过,下面步骤的操作请对应名称为2.5的目录
2. 下载最新版本的AIR2.6 SDK , http://www.adobe.com/go/air_sdk
3. 将下载的AdobeAIRSDK\frameworks\libs\air目录中的airglobal.swc,替换Program FIles\Adobe\Adobe Flash CS5\Common\Configuration\ActionScript 3.0\AIR2.0\airglobal.swc
(注意,如果你安装了第1步中说的AIR for Android开发插件,对应的请替换AIR2.5目录下的airglobal.swc,若没有安装则替换AIR2.0目录下同名文件,替换前建议备份)
这步替换是让你能运用AIR2.6中对应的最新功能,例如前置摄像头,访问照片库等。
4. 将下载的AdobeAIRSDK目录替换 Program Files\Adobe\Adobe Flash CS5\AIK2.0 目录 (安装过AIR for Android开发插件的替换 AIK2.5目录)
5. 将FLA文件发布设置为AIR2.0(安装过AIR for Android开发插件的设置为AIR2.5),发布你的项目。
6. 在你发布目录下,有Flash Pro生成的swf和对应的 *-app.xml文件。打开这个xml,确认文件中这一行 末尾是对应最新的AIR版本(2.6, 2.7等等),不是的话手动改之。
7. 现在,运用ADT将上面生成的 swf和xml打包为 iOS运行的ipa应用。打开命令行,输入语句:
adt -package -target ipa-test -storetype pkcs12 -keystore iOS打包的KEY文件名.p12 -storepass KEY的密码 -provisioning-profile MOBILE_PROVISION文件名.mobileprovision IPA文件名.ipa 上面生成的xml.xml 上面生成的swf.swf icon文件名.png
关于更多ADT的用法,请参考官方文档:http://help.adobe.com/zh_CN/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7fd9.html
稍作等待,你的iOS应用就生成了:)

post Flash 3D API演讲稿下载@2011RIA天地行北京城市精英论坛

三月 28th, 2011

Filed under: Flash,Presentation&Demo — Peter @ 12:43 上午

今天演讲稿PDF版本下载地址 :[点击此处

很久没有看到这么多开发者聚集在一起。

今年Flash会是相当给力的一年,相信大家每个季度都会有惊喜:)

作为一个游戏开发者,我对即将到来的各种功能的欣喜和期待,一点不亚于6年前Flash 8ball发布的时刻。

愿大家在开发中取得进步,在开发中获得收益~

post 快速创建精彩的Flash游戏 (二) Flash3D引擎简介

三月 25th, 2011

Filed under: Flash,Game — Peter @ 9:43 下午

从Flash Player 5开始,3D开发者就尝试做一些伪3D的演示;Flash Player 6时代,引入了Drawing API,大大方便了开发者进行图形绘制;2006年引入AS3,开始改变很多Web游戏的规模;Flash Player 10;2008年10月引入内置2.5D绘图支持,同时加入内置3D属性,比如旋转和变形,内置API控制空间三角形,并且允许处理透视;今年3月,Adobe在实验室推出了支持GPU加速的真正3D API - Molehill,将把互联网带入全新的三维时代。
今天我们来看看一些流行的Flash 3D引擎,他们都已经或者即将支持全新的Flash 3D API。

Away3D

Away3D从07年的1.0版本开始,至今已经4个年头。除了官网上比较丰富的教程及文档之外,还有些不错的书籍详细介绍此引擎,例如《3D in Flash》和《Away3D 3.6 essential》等。
值得一提的是,Away3D具有一个可视化编辑场景及模型的工具- Prefab3Dhttp://www.closier.nl/prefab/),这个运用Adobe AIR开发的工具功能相当强大,开发者和设计人员可以方便的对三维场景进行材质贴图,编辑光照及设置动画等,并输出为Away3D使用的文档。
在Adobe Molehill公布的当天,他们也发布了最新支持Molehill的4.0 Alpha版本。
引擎相关特性
• 支持加载大多数流行3D文件,如Collada, OBJ 等
• 拥有可视化编辑场景及模型的免费工具Prefab3D
• 功能全面的资源加载、事件处理、光照、摄像机、骨骼动画及音效处理等
官方网址http://www.away3d.com/
授权方式:开源且免费
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
演示案例
http://infiniteturtles.co.uk/projects/away3d/broomstick/ShallowWaterDemo.html
http://www.ringo.nl/projects/away3d/broomstick/LoaderOBJTest.html
http://not-so-stupid.com/clients/not-so-stupid/away4/duck/
http://infiniteturtles.co.uk/projects/away3d/broomstick/LoaderMD5Test.html

更多采用此引擎的游戏展示: http://away3d.com/projects-using-away3d

Alternativa3D

在Molehill出来之前,用此引擎开发的Tanki Online就让大家惊艳。去年Adobe MAX大会上的3D赛车让大家印象深刻,这个游戏就出自Alternativa3D引擎。
引擎相关特性
• 支持加载大多数流行3D文件,如Collada, OBJ 等
• 拥有3ds MAX 2010输出插件
• 可以类似DisplayObject方式方便的管理3D对象
• 高效的三维深度排序
• 光照系统、鼠标交互、多摄像机系统等。
官方网址http://www.alternativaplatform.com/
授权方式:免费但不开源,今年4月就将推出支持Molehill的最新免费版本。
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
演示案例
http://www.alternativaplatform.com/en/demos/maxracer/
http://www.alternativaplatform.com/en/demos/metro2033online/
http://tankionline.com/
http://war.q1.ru/art/screenshots/

更多采用此引擎的游戏展示:http://www.alternativaplatform.com/en/showcase/

Flare3D

Flare3D是一个 创建Flash 3D游戏的引擎。其最大特色是具有较完整的Flash 3D游戏开发工作流程。
引擎相关特性
• 支持导入3ds MAX模型
• 可视化的对场景及模型进行编辑、贴图等
• 光照系统、骨骼、摄像机系统等
• 比较直观的开发流程
官方网址http://www.flare3d.com/
授权方式:商业授权,30天试用版本 。
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
演示案例
http://www.flare3d.com/games/AlmaxRace/
http://www.beyond-reality-face.com/demo
http://www.flare3d.com/demos/animations/

更多采用此引擎的游戏展示:http://www.flare3d.com/showcase

CopperCube

CopperCube是一个具有 3D引擎及编辑器的开发工具,开发者可以通过它将自己的游戏及程序发布为多种格式,Flash,WebGL,Windows及Mac OS的单机应用等。
引擎相关特性
• 能发布为多种格式
• 支持多达20多种的三维模型格式
• 可视化的对场景及模型进行编辑、贴图、动作设置等
• 代码编写量小,号称无需编程即可创建3D应用
• 比较直观的开发流程
官方网址http://www.ambiera.com/
授权方式:商业授权,14天试用版本 。
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
演示案例
http://www.ambiera.com/coppercube/demo.php?demo=backyard
http://www.ambiera.com/coppercube/demo.php?demo=panorama
http://www.ambiera.com/coppercube/demo.php?demo=configurator

更多采用此引擎的游戏展示:http://www.ambiera.com/coppercube/demo.php

Yogurt3D

Yogurt3D是一个功能较为全面的Flash 3D引擎,在Facebook上有他们用此引擎创建的3D多人互动社区。
引擎相关特性
• 免费的各种3D软件插件,如Softimage、Maya、3ds Max等。
• 三维场景相关的摄像机、物体等API
• 角色骨骼动画、材质编辑等
• 动画、材质、骨骼文件等资源加载API
官方网址http://www.yogurt3d.com/
授权方式:免费但不开源,即将发布支持Molehill的新版本 。
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
演示案例
http://www.yogurtistan.com/

更多采用此引擎的游戏展示:http://www.yogurt3d.com/showcase/

Sophie3D

Sophie3D引擎为开发者提供了Flash SWC组件,让开发者可以创建交互的3D内容。从功能上讲,Sophie3D更适合电子商务等产品细节的立体展示。而且这个引擎还将提供类似红蓝、红绿分色的三维立体场景功能 。
引擎相关特性
• 支持Collada及Wavefront三维文件格式导入。
• 文件压缩以提高加载速度
• 摄像机及对象的运动
• 在三维场景中添加交互的2D热区
• 将三维厂家导出为图片
官方网址http://www.sophie3d.com/
授权方式:商业授权,即将发布支持Molehill的新版本 。
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
演示案例
http://www.sophie3d.com/website/flash_player_11_demo/sophie3D_demo_01/SOPHIE_3D_FLASH_PLAYER_11.html
http://www.sophie3d.com/website/flash_player_11_demo/sophie3D_demo_02/SOPHIE_3D_FLASH_PLAYER_11.html

更多采用此引擎的展示:http://www.sophie3d.com/website/index_en.php?page=821u68u0

除了上面介绍的内容,还有很多不错的Flash 3D引擎,如 Papervision 3D、Sandy3D等等,这里就不一一介绍了。相信随着Adobe Flash功能的不断给力更新,越来越多的3D游戏及应用会如雨后春笋般出现。

post 快速创建精彩的Flash游戏(一) Flash2D游戏引擎简介

三月 24th, 2011

Filed under: Flash,Game — Peter @ 7:13 下午

Adobe Flash自诞生之日就与游戏结下不解之缘。时至今日,无数游戏通过Flash制作并传播,Flash游戏已经从最初的浏览器小游戏,扩展到大型的客户端单机游戏、多人即时互动网页游戏、移动平台游戏等等领域。
从本篇开始,将为大家介绍Flash游戏相关的引擎、框架及实用API,方便开发者快速的选择适合自己项目的工具,创建精彩的Flash游戏。

Flixel 位图引擎


Flixel是我非常喜欢的开源位图引擎。作者运用ActionScript的Bitmap创建了这个全位图引擎,所谓全位图,就是游戏场景中所有元件最终均绘制在一个位图对象上,在游戏过程中每帧进行重绘。也正因为如此,此引擎非常擅长处理同屏同时出现大量的游戏元件,其高效的渲染会让你激动不已。当你需要创建2D卷轴游戏或者场景中需要大量运动元素的游戏,Flixel引擎是你的首选。
Flixel还具有一些不错的特性:
• 采用QuadTree的对象链,高效的碰撞检测
• 位图动画Sprite
• 通过文本及图片创建Tiles地图
• 简单易用的粒子系统
• 高效的滚屏
• 自定义的鼠标光标
• 方便的debug显示终端
此外在引擎开发者论坛中,还有用户将此引擎移植到Android平台上。
官方网址http://www.flixel.org/
运行环境:ActionScript 3,Flash Player 9 及以上版本
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
典型案例
• Canabalt ( http://adamatomic.com/canabalt/
这个游戏在作者的网站上每月会消耗2.5T的流量,可见流行的程度。游戏中高速流畅的滚屏会让你惊叹Flash的效率。此游戏还移植到iOS上,并在App Store中销量不菲。
• Omega Crisis ( http://www.kongregate.com/games/lucidrine/omega-crisis ) 这个塔防类游戏,画面、游戏性与操作性都相当不错。
更多采用此引擎的游戏展示: http://flixel.org/games/

Pushbutton engine


PushButton是一个开源的Flash游戏引擎,其实它更像一个游戏框架。引擎由ActionScript 3开发,需要Flash Player 9及以上的运行环境。官方还提供与游戏构建相关的组件,例如Box2D,Rendering2D等。同时在引擎中包含了资源管理、日志、调试监控、线程及时间管理等功能。
开发者可以运用这套框架按模块方式集成各种渲染模块、物理模块、网络通信模块来创建游戏。
官方网址 http://pushbuttonengine.com/
运行环境:ActionScript 3,Flash Player 9 及以上版本
开发环境:Flash CS4及以上版本,Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
典型案例
∗ Social City ( http://pushbuttonlabs.com/games/social-city/ )
这个在Facebook上月活跃用户超过一千万的游戏,采用了PushButton引擎。
∗ The Incredible Machine Mega Pack ( http://www.gog.com/en/gamecard/the_incredible_machine_mega_pack )
不可思议的机器系列想必大家不陌生,这个版本的近400兆大小的单机游戏也出自该引擎。

FlashPunk 引擎


FlashPunk同样是个针对位图的开源引擎。它具有清晰的框架以及创建游戏需要的动画、碰撞等类库,让开发者更专注与游戏的设计与测试中。
其主要特性包括:
• 相对独立与固定的帧频时间步长控制
• 像素、矩形区及网格的碰撞检测
• 高效的运动tweening
• Z-sorted的渲染列表,方便深度排序
• 高效的粒子系统
官方网址http://flashpunk.net/
运行环境:ActionScript 3,Flash Player 9 及以上版本
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
典型案例
• Tiny Hawk ( http://www.kongregate.com/games/pekuja/tiny-hawk
类似超级玛丽,不过这次你脚下踩着的是滑板,一共32关。
• Mr. Fat Snake (http://www.kongregate.com/games/ReviveGames/mr-fat-snake?acomplete=mr+fat+snake )
贪吃蛇的横轴飞速版。:)
更多采用此引擎的游戏展示: http://flashpunk.net/?p=games
还有大量的开发者运用Flash创建2.5D的游戏,所谓2.5D,我们也称之为Isometric,也就是游戏视角采取倾斜视角(如斜45度角等),以平面的方式展现固定视角的3D效果。目前很多网页游戏均采用2.5D的方式。
需要注意的是,前面为大家介绍的位图2D引擎同样可以用来开发2.5D游戏。
接下来为大家介绍几个专注于2.5D开发的引擎。运用这些引擎,你可以把一些烦人的2.5D相关的坐标转换交给引擎处理,专注在你的游戏逻辑及设计上。

As3isolib - 开源的2.5D库


As3isolib是一个基于ActionScript 3的 Isometric库,开发者运用它可以方便的开发2.5D的游戏或应用。其主要特性包括:
• 简易的2.5D场景创建方式
• 方便的于各种缓动(tween)引擎交互
• 增强的2.5D元件深度排序
• 场景显示渲染的性能优化
官方网址http://code.google.com/p/as3isolib/
运行环境:ActionScript 3,Flash Player 9 及以上版本
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
典型案例
• Zex Lex Duel ( http://apps.facebook.com/cp_zexlexduel/
Facebook上的一个机器对战小游戏 。
• Down Town (http://apps.facebook.com/downtowngame/ )
Facebook上的虚拟城市交友。
另外,还有开发者将这个2.5D的库制作成 PushButton引擎的一个组件。 http://code.google.com/p/pushbutton-ooo-extras/

OpenSpace - 多人虚拟世界引擎


OpenSpace是一个非常不错的引擎,用户可以非常快速方便的创建2.5D游戏。配合该公司的另外一款通信服务器SmartFoxServer,可以搭建多人实时交互的虚拟场景。
其特点包括:
• 完善的地图编辑方式
• 可缩放的场景
• 自定义地图滚屏方式
• 自定义的游戏角色
• 地图自动寻径
官方网址http://www.openspace-engine.com/
运行环境:ActionScript 3,Flash Player 9 及以上版本
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
典型案例
• The Settlers – My City ( http://apps.facebook.com/tsmycity
殖民者的网页版,你可以创建属于自己的殖民国 。
• Petpet Park (http://www.petpetpark.com/)
很可爱的宠物公园虚拟社区。
更多的案例展示: http://www.openspace-engine.com/showcase

TheoWorlds – 快速开发2.5D游戏的商业套件


TheoWorlds 除了包含Iso引擎之外,还包含聊天、地图编辑器等组件,可以帮助开发者快速的开发2.5D的虚拟世界。
主要特性有:
• 8方向的运动角色
• 自定义角色形象
• 自定义角色动作
• 快速寻径及自动滚屏
• 与SmartFox Server及ElectroServer等第三方即时通信服务器通信
• 聊天历史、表情图标等
官方网址http://www.theoworlds.com/
运行环境: Flash Player 8 及以上版本
开发环境:Flex(Flash)Builder,FlashDevelop及其他ActionScript开发环境。
相关演示
• 场景演示 ( http://www.theoworlds.com/labs/09/
• 地图编辑器演示 (http://www.theoworlds.com/mapeditor/)

以上为大家介绍了一些流行的Flash 2D游戏引擎,希望大家能在开发中获益。后期将为大家介绍Flash游戏相关的物理引擎、人工智能、UI、音效等第三方API,请关注。

post Flash游戏优化技巧讲座PPT及示例下载

二月 23rd, 2011

Filed under: Flash,Game — Peter @ 1:46 下午

昨天下午在infoQ做了在线的讲座,感谢到场的朋友们的支持。
PPT下载:
http://www.fans8.com/download/presentation/20110222/flash_game_optimization.pdf

Demo:
http://www.fans8.com/download/presentation/20110222/demo.zip

不少朋友希望我提供最后我做的那个基于位图引擎的 BloodSnow 游戏下载,这个游戏还没有做完,等完工后,一定会放到网上的:)

post 创建基于Android移动设备及Flash Media Server 4 的音视频应用

二月 19th, 2011

Filed under: Flash,Flash Media Server,Flash Mobile — Peter @ 1:00 上午

要求
你需要先安装下列产品:
Flash Professional CS5 ( 试用购买
Flash Media Server 4 ( 试用购买
Flash Professional CS5上的AIR 2.5 for Android开发插件( 下载
示例文件原Flash音视频程序最终代码
预备知识
ActionScript 3.0 中级编程水平
会运用Flash Pro及Flash Media Server开发项目

我们知道,Flash与Flash Media Server( FMS )可以创建丰富的音视频交互应用。从Flash Player10开始支持P2P,并且可以方便的将Flash程序发布为基于Android系统的移动设备的应用。
下面我们将一个Flash音视频聊天程序,移植为基于Flash Media Server4的,支持P2P的音视频Android移动应用。
通过接下来的学习,我们将了解以下3个关键的知识点。
1. 客户端如何创建P2P连接
2. 运用Flash Media Server4 来实现P2P连接
3. 运用最新的Flash CS5 AIR2.5插件来发布Android的移动设备应用程序

在原有的Flash程序中,客户端通过RTMP协议与Flash Media Server创建连接,在Flash Media Server端通过SharedObject来管理在线用户的列表,客户端之间的通信采用Netconnection的Call的方法来发送视频邀请相关的信息。

• 客户端创建与Flash Media Server的RTMFP连接

要创建P2P的应用,首先我们需要与服务器端创建RTMFP(Real Time Media Flow Protocol)协议的连接。我们可以将原有代码中的RTMP协议直接修改为RTMFP,但是RTMFP协议是基于UDP协议的,并不是所有的网络环境都支持UDP协议。所以为了我们应用的可用性,我们依然保留RTMP连接方式。
在负责通信的Communicator类中,修改 connect函数为:

public function connect(rtmp:Boolean=false) : void
{
	//为函数添加布尔参数,通过参数来切换连接FMS服务器的方式
	//默认情况下我们采用rtmfp的连接
	var url=(rtmp?"rtmp:" : "rtmfp:") + "//"+serverURL+"/vchat"
	nc.connect(url,userName);
 
	// 判断当采用rtmfp协议连接时候,增添一个连接时间计数器
	// 通过这个计算器设置的连接超时来判断rtmfp连接是否成功
	if (!rtmp)
	{
		rtmfpTimer = new Timer(connectTimeout, 1);
		rtmfpTimer.addEventListener(TimerEvent.TIMER_COMPLETE,rtmfpTimeoutHandler)
		rtmfpTimer.start();
	}
}

添加事件侦听函数,这个函数在当RTMFP连接失败的时候,关闭原连接,创建RTMP连接。

private function rtmfpTimeoutHandler(e:TimerEvent):void
{
	isRTMFP=false;
	rtmfpTimer.stop();
	rtmfpTimer = null;
	nc.close();
	connect(true);
}

在原有Netconnection连接状态侦听函数 ncStatusHandler中添加代码:

if (rtmfpTimer)
{
	rtmfpTimer.stop();
	rtmfpTimer = null;
}

这样当Netconnection连接有响应的时候,关闭计数器。
到此,我们已经将客户端的连接修改为兼容P2P的RTMFP连接方式。现在我们来看看Flash Media Server端的代码。

• Flash Media Server 4中管理并分配P2P连接

当客户端与Flash Media Server 4成功创建RTMFP连接的时候,服务器会为每个客户端连接创建一个256位的唯一ID,通过这个ID,客户端之间就可以进行P2P连接。
要创建P2P方式的音视频流,我们就需要通过Flash Media Server 4将客户端各自对应的此唯一ID发送给通信对方。

在客户端与FMS连接成功时,FMS将此连接的唯一ID保存在名为farID的属性值中。打开示例中fms > vchat目录中的Flash Media Server端脚本main.asc,在其中onConnect函数里,我们将此唯一ID在保存在名为peerID的参数中 。

application.onConnect = function(client, userName)
{
	……
	client.peerID=client.farID;
	……
}

在视频邀请的通信函数videoChat中添加如下代码:

case "accept":
	var myPeerID=""
	var otherPeerID=""
	if(userList[myname].protocol=="rtmfp" && userList[othername].protocol=="rtmfp")
	{
		myPeerID=userList[myname].peerID
		otherPeerID=userList[othername].peerID
	}
	userList[othername].call("vc", null, stat, myname,myPeerID);
	userList[myname].call("vc", null, stat,othername,otherPeerID);

上述代码表示,在一方接收另一方视频聊天邀请时,我们判断双方与FMS的连接 协议是否为RTMFP,如果是,将各自的对等ID传送给对方。
在修改完毕服务端脚本之后,不要忘记将vchat目录复制到Flash Media Server的applications子目录中。

• 客户端创建兼容P2P的音视频交互

现在我们回到客户端代码Communicator.as 编辑,在初始化发布音视频流函数initOutStream中,添加传递参数 peerID:String,用来接收FMS服务器发送的对方的peerID。

initOutStream(user:String,peerID:String)

然后添加代码:

if(isRTMFP && peerID!="")
{
	outStreamDirect = new NetStream(nc, NetStream.DIRECT_CONNECTIONS);
	var c:Object = new Object();
	c.onPeerConnect = function(peer:NetStream):Boolean
	{
		if (outStream)
		{
			outStream.close();
			outStream = null;
		}
	outStreamDirect.attachAudio(Microphone.getMicrophone());
	outStreamDirect.attachCamera(cam);
	return true;
}
outStreamDirect.client = c;
outStreamDirect.publish(mySteamName+"_direct");
}

上述代码中,我们首先判断自己与FMS服务器的连接以及对方是否为RTMFP协议,如果是,我们创建一个通过P2P直连的发布流 outStreamDirect,与原来的发布流区别,我们为这个新的发布流创建了新的名称”_direct”。
请注意这里我们同时保留了原来的基于FMS的发布流,这是因为,即使音视频聊天的双方都跟FMS服务器创建了RTMFP协议,由于不同网络环境,例如防火墙,路由器的限制等,都有可能让双方最终不能创建点对点的连接。所以,我们通过onPeerConnect这个方法来判断双方是否P2P连接成功。当P2P连接成功时,关闭原有的基于RTMP协议的发布流outStream。
通过上述代码的修改,能保证我们的应用真正的适应各种网络环境的用户。

同样的方法,我们对于播放音视频流的函数initInStream,也采取同时播放原有流和P2P流的方式。

if(isRTMFP && peerID!="")
{
	inStreamDirect=new NetStream(nc,peerID)
	inStreamDirect.addEventListener(NetStatusEvent.NET_STATUS, inStream_NetStatusHandler);
	inStreamDirect.play(user+"_direct");
}

请注意代码中新建的播放流inStreamDirect,指定了需要播放的对方的peerID,这个唯一ID就来自与刚才我们修改的FMS服务器端程序。
因为我们同时播放了2个流,所以我们为新建的P2P直连流添加如下的事件侦听函数 inStream_NetStatusHandler ,这样在P2P流成功播放的时候,将原有的RTMP协议流关闭,并且将当前显示的视频切换到这个流。

private function inStream_NetStatusHandler(event:NetStatusEvent) : void
{
	if (event.info.code == "NetStream.Play.Start")
	{
		if(inStream)
		{
			inStream.close();
			inStream = null;
		}
		VideoChat.instance._chatScreen.showUserVideo(inStreamDirect)
	}
}

最后,为保证我们创建的这个Android应用在实际的移动设备运行过程中,用户点击返回键或程序关闭时断开与FMS服务器的连接,在主程序类VideoChat.as中添加代码

if(Capabilities.cpuArchitecture=="ARM")
{
	NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE,
	handleActivate, false, 0, true);
	NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE,
	handleDeactivate, false, 0, true);
	NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN,
	handleKeys, false, 0, true);
}
private function handleActivate(event:Event):void
{
	NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE;
}
private function handleDeactivate(event:Event):void
{
	communicator.onExit()
	NativeApplication.nativeApplication.exit();
}
private function handleKeys(event:KeyboardEvent):void
{
	if(event.keyCode == Keyboard.BACK)
	{
		communicator.onExit()
		NativeApplication.nativeApplication.exit();
	}
}

同时在 Communicator类中添加onExit函数

public function onExit():void
{
	nc.close()
	nc=null;
}

这样,当用户点击返回键或者退出程序的时候,自动关闭与FMS的连接。

到此为止,我们已经将客户端与FMS4配合支持P2P音视频流的相关代码修改完毕。接下来我们将这个程序发布为基于Android移动设备的应用。

• 运用最新的Flash Pro AIR2.5插件发布Android移动端应用

由于原始代码是基于Flash Professional的,所以要方便的发布一个基于Android的移动设备应用,我们可以从Adobe实验室中下载最新的AIR 2.5 for Flash Pro CS5 插件,下载地址:

http://labs.adobe.com/technologies/flashpro_extensionforair/

在安装好这个插件之后,打开Flash发布设置,选择AIR Android,点击打开设置选项。

在通用设置(General)面板中,我们可以设置应用是否全屏,发布名称等。
在部署(Deployment)面板中,创建你的应用程序证书,在发布之后选项中,如果你的电脑连接了Android的移动设备,可以勾选发布后自动安装此应用到设备上,并且可以自动运行。
在访问权限(Permissions)面板中设置此应用的访问权限,因为我们做的这个应用需要连接网络及使用摄像头,所以需要选择Internet和Camera选项。

发布我们最终修改好的程序,现在你可以通过Android移动设备进行音视频通讯了。:)
下图为程序在Samsung Galaxy Tab上运行得效果。

post Flash P2P 游戏入门讲座PPT及示例源码下载

一月 13th, 2011

Filed under: Flash,Flash Media Server,Game,Presentation&Demo — Peter @ 10:35 下午

谢谢大家今天晚上的参与!下次见~

点击右键另存为。。。:)

PPT下载地址:

www.fans8.com/download/presentation/20110113/flash_P2P_Game.pdf

源码下载地址:

本地局域网聊天:www.fans8.com/download/presentation/20110113/demo/LAN_chat.zip

Cirrus连接方式的小球运动:www.fans8.com/download/presentation/20110113/demo/Cirrus_moveBall.zip

DIRECT_CONNECTIONS方式的数据传输(实时鼠标位置共享):www.fans8.com/download/presentation/20110113/demo/DirectCon_move.zip

[Bonus]P2P视频传输:www.fans8.com/download/presentation/20110113/demo/Cirrus_P2P_video.zip

post 如何将Adobe CS5 Master套件中的Flash Builder4由Standard版本升级为Premium

十二月 27th, 2010

Filed under: Flash — Peter @ 4:48 下午

公司的笔记本安装了cs5 master套件,不过很郁闷,master版本的FB4居然是Standard标准版….因为没有我最常用的Profile。

如果你有FB4的Premium 序列号,那就按下面来操作。

1.关闭其他cs5套件软件,开启FB,运行 Help -> Deactivate Flash Builder.

2.关闭FB,打开任何一个cs5套件,比如PS,确认你的套件真的Deactivate,关闭PS.

3.打开FB,在激活窗口中填入你的Premium序列号, 重启FB,点击About..确认你的FB已经是Premium版本了,关闭FB.

4.打开任何一个cs5套件,比如PS,在激活窗口中填入cs5的序列号。关闭PS.

ok,现在你的FB已经是Premium版本了。:)

下一页 »
ruldrurd