加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

分享基于Flash AIR和Starling、Feathers的经验积累

发布时间:2020-12-15 17:39:52 所属栏目:百科 来源:网络整理
导读:1.iOS中加载本地json文件,其键值必须是字符串,如{"tileWidth":"106"} 否则decode时报错(待验证)。 2.File.applicationDirectory为App安装目录是只读的,File.applicationStorageDirectory可以写入。 3.位图尺寸要尽量接近2的幂次方,把多个相关图片用Tex
1.iOS中加载本地json文件,其键值必须是字符串,如{"tileWidth":"106"} 否则decode时报错(待验证)。

2.File.applicationDirectory为App安装目录是只读的,File.applicationStorageDirectory可以写入。
3.位图尺寸要尽量接近2的幂次方,把多个相关图片用TexturePacker制作成纹理集(SpriteSheet)。
4.静态Sprite要平面化即调用flatten方法,不需要触碰的话把touchable设为false。
5.Touch事件没有捕获阶段;要在冒泡阶段判断触碰对象可遍历对象数组用Touch.isTouching方法判断。
6.Starling中尽量不要使用滤镜,用的话一定要注意,在同一时刻,每一个滤镜只能应用于一个显示对象。否则,它就会变的很慢,需要更多的资源和缓存,并导致无法预料的后果。
7.使用Starling框架的QuadBatch批次渲染模式,可以优化渲染、提升性能。
8.FlashBuilder 4.7中使用Air SDK则无法直接使用swc中嵌入的BitmapData,需要换成flex sdk:打开.actionScriptProperties文件,修改useFlashSDK值为false。
9.AssetsManager加载位图字体文件后会自动注册TextField,可用TextField.getBitmapFont获取字体。
10.AIR好像不支持[Frame]元标签进行预加载。
11.用FileStream异步操作文件后要使用setTimeout(fs.close,1)方式关闭流,否则当再次打开文件时会引发被占用异常。
12.当json字符串中有用科学计数法表示的值时,注意'-'前后不要出现空格如4.9406564584124654e-324,否则解析错误(用格式美化工具后可能会出现这种情况)。
13.Startling单个纹理最大限制为2048x2048,Player11.8 & AIR3.8支持到4096,需修改Starling profile参数为Context3DProfile.BASELINE_EXTENDED。
14.Feathers的Theme是对皮肤统一管理(换肤、复用),所以资源可分为主题风格和游戏内素材。
15.使用位图字体替代系统字体;不要频繁的读取显示对象的宽高;Image替代Button;使用ATF纹理格式。
16.如果有完全不透明的矩形纹理,我们可以让GPU禁用那些纹理混合。这对于大背景图像特别有用。设置displayObject.blendMode = BlendMode.NONE。
17.NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE;可以运行时唤醒屏幕。
18.在FlashBuilder4.7编译器选择启用遥测数据可以用Scout分析性能,移动端需要装AdobeScout。
19.使用uint类型时要确定不会出现负值,否则会有bug,如 for(var i:uint = length - 1; i >= 0; i--)。
20.SQLite不支持非标准SQL,如一次插入多条数据 INSERT INTO TABLE(col1,col2) VALUES(val11,val12),(val21,val22);替代方案:INSERT INTO TABLE(col1,col2) SELECT val11,val12 UNION ALL SELECT val21,val22;这样的写法是属于复合SQL语句,表示先把两个SELECT的结果集进行无删减的联合,再把联合结果插入到TABLE中;当数据量大时也可使用事务提交多语句的方式。
21.File::copyToAsync 好像不支持移动设备(android上无反应),用FileStream写文件代替。
22.切记在使用LoaderContext时每次需要new新的实例。
23.本地存储文件时,如果applicationStorageDirectory内还含有目录,则使用file.parent.createDirectory();创建文件的父目录(parent不能少)。
24.App间跳转URI配置:
<android>
? ?? ???<manifestAdditions><![CDATA[
? ?? ???<manifest android:installLocation="auto">
? ?? ???<application>
? ?? ?? ?? ?? ? <activity>
? ?? ?? ?? ?? ?? ?? ?? ?<intent-filter>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<action android:name="android.intent.action.MAIN"/>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<category android:name="android.intent.category.LAUNCHER"/>
? ?? ?? ?? ?? ?? ?? ?? ?</intent-filter>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<action android:name="android.intent.action.VIEW"/>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<category android:name="android.intent.category.BROWSABLE"/>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<category android:name="android.intent.category.DEFAULT"/>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<data android:scheme="todoair"/>
? ?? ?? ?? ?? ? </activity>
? ?? ???</application>
? ?? ???</manifest>
? ?? ???]]></manifestAdditions>
</android>
<iPhone>
? ?? ???<InfoAdditions><![CDATA[
? ?? ?? ?? ?? ? <key>UIDeviceFamily</key>
? ?? ?? ?? ?? ? <array>
? ?? ?? ?? ?? ?? ?? ?? ?<string>1</string>
? ?? ?? ?? ?? ?? ?? ?? ?<string>2</string>
? ?? ?? ?? ?? ? </array>
? ?? ?? ?? ?? ? <key>CFBundleURLTypes</key>
? ?? ?? ?? ?? ?? ?? ?? ?<dict>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<key>CFBundleURLSchemes</key>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<array>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? <string>todoair</string>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???</array>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<key>CFBundleURLName</key>
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???<string>MobileB</string>
? ?? ?? ?? ?? ?? ?? ?? ?</dict>
? ?? ???]]></InfoAdditions>
? ?? ???<requestedDisplayResolution>high</requestedDisplayResolution>
</iPhone>
MobileA跳转代码:navigateToURL(new URLRequest("todoair://me=neo&you=jack"));
MobileB接收参数:NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE,onInvoke);
25.Feathers TextInput组件在2x分辨率下背景图有黑底现象,把9宫格图换成普通Image即可解决。
26.可使用socket模拟http请求方式来获取HTTP头,如服务器文件最后修改时间等,如果只需要服务器返回HTTP头(不返回内容),请设置提交方法为:URLRequestMethod.HEAD。
27.当局部变量属性类型为*时,在条件判断语句赋值后多次调用可能会存在bug(变量值变为一科学型数值?);解决:在条件判断后直接return数据 不再赋值后return变量。
28.锁屏或黑屏或运行大量复杂动画等,在程序降频后,会影响程序的执行 如setInterval。(所以socket应用不要在客户端发心跳,因为时间间隔受帧频影响不够准确,有待测试)。
29.android设备上app切换后,应用在后台运行,仍可激活当前屏幕;在锁屏或黑屏情况下切回app(激活状态下正常),starling会黑屏(GPU纹理丢失,但仍在运行),设置handleLostContext亦无效,解决方法:在app切换前让屏幕激活,或让starling重新上传纹理 Starling.current.dispatchEventWidth(Event.CONTEXT3D_CREATE);(较慢)
30.AIR4.0开始Starling启动加快,并可自动选择最佳profile(加载4k纹理时不用手动设置Context3DProfile.BASELINE_EXTENDED)。
31.starling项目加载另一starling的swf的临时解决方案:发现直接传对象行不通;在子swf不new Starling,而在父项目中通过getDefinitionByName获取子starling的root类,生成实例再添加到父项目中。
32.registerClassAlias(),如果想要传递任何非原生数据类型时(即使是一些原生的类也需要),这个调用就非常重要。所以记着,需要在两端都调用registerClassAlias()方法。如果不调用这个,传输的数据将会被作为原始Object对象。(在当前域或子域,两端都存在的自定义类无需注册别名)
33.Worker多线程之间共享内存,要共享一个byteArray对象,你需要设置byteArray.shareable=true,然后调用messageChannel.send(byteArray)或者worker.setSharedPropert(“byteArray”,byteArray)方法来共享它。
34.Away3d 4.0后包含了一个叫做Stage3DManager的实现Stage3D结合其他ActionScript库的渲染的API,如和Starling协作,前提是要共享away3d的stage3d。
35.starling项目加载一个away3d项目,目前还没找到共享使用stage3d的方法,但可以使用Starling.current.stop(true);先暂停一切渲染,这时可能2d界面无法显示,可以加上setTimeout(Starling.current.render,100); 卸载swf后记得调用Starling.current.start();启动Starling。(真实项目有纹理的时候有待测试)
36.feathers目前在新主题中非嵌入字体(使用设备字体),文字显示会偏上。
37.feathers中位图字体和设备字体无法混合使用,特别是用到了feathers组件(除非用starling文本框)。
38.关于Android和Ios后台运行机制:Android允许app后台运行,只是帧频降为4(满足socket最低连接要求);Ios应用在后台模式10分钟后整个进程会休眠,所以有些游戏打开后会进行重连。(这样某些需求就无法在ios下实现,如锁屏后app接到socket指令自动激活屏幕)
39.对于快速原型开发,使用flex mobile是个不错的选择(特别是应用类app),spark组件已针对移动端做了优化,但尽量不要使用矢量图和矢量动画。

40.多人开发,需要注意开发人员之间的配合、协作,使用统一的接口,统一访问各种资源;事先约定好开发规范,否则项目可能会陷入进退两难的境地。


挺好的总结!文章转自

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读