分享基于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.多人开发,需要注意开发人员之间的配合、协作,使用统一的接口,统一访问各种资源;事先约定好开发规范,否则项目可能会陷入进退两难的境地。 挺好的总结!文章转自 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |