About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Mar

    29

    碎碎念:Egret 分类,删除

    • 0 Comments
    • Babblings

    删除了 Egret 分类,不是因为 Egret 不好(我到现在都没有拿它做过项目,包括测试项目,所以无法评价它的好坏),删除它的原因只是因为觉的 HTML5 这坑实在太大。

    Egret 最成功的案例之一《神经猫》,也仅仅只是昙花一现。在《神经猫》之后有许多其它基于 HTML5 的小游戏,但都被微信封杀了(凡是超过一定访问量的页面,且没有申请过分享权限的都会被封)。微信也出了对应的政策,不允许任何游戏申请微信的链接分享,游戏必须先通过腾讯开放平台的接入申请,然后才能再接入微信(包括一直到今天,游戏分享仍然只是分享截图,不允许分享链接)。这圈子绕的够大!

    微信封杀的 JS API 也是越来越多。比如,苹果公司对使用企业版开发者证书的 APP 有一个非常方便的发布方式,叫“inHouse(OTA),一开始时,微信分享网页时可以运行网页中的 JS 直接安装 APP,但随后被微信屏蔽了这个 API;再比如以往通过 JS 可以直接打开 App store 并跳转到指定的页面,随后也被屏蔽了。这些 API 对于个人或小公司在微信上推广企业的产品、自己的应用、自己的游戏其是非常重要的。正当你觉的某个 API 实用、用的爽的时候,不出三个月基本上会被封掉,至少我曾经喜欢的这些 API 没有一个能够在微信上“活过”三个月。当然还有许许多多我所不知道的和没有用过的 API,大家觉的重要的时候,微信自然也觉的重要,所以动不动就让公司和公司的开发者去申请这个权限,申请那个权限。一些权限是免费的(不排除将来也收费),一些权限是收费的。

    有哪个开放者平台是真正开放的呢?各种开放平台中的高级功能大多都是收费的,而且只向企业开放。个人有钱你就去注册一个公司,然后再去申请;没钱,那就。。。

    所以 HTML5 什么的其实大多是坑,一般也只有大公司在推崇 HTML5 。既便是像淘宝这样强大的 JS 前端团队,他们仍然需要一个淘宝的APP,天猫的APP,聚划算的APP,支付宝APP,虽然这些 APP 都离不开 JS,但它至少独立的运行在自己的 APP 内,不需要运行在微信这样的客户端内。反正我是从来没有在移动设备的网页中淘宝过,只在淘宝的 APP 里购买过东西,仍然在支付宝 APP 里支付。

    之于个人或小型团队以做应用或游戏为主(非 WEB 资料性的内容为主),是使用原生开发,还是 HTML5 开发,无论是开发周期,还是开发后 APP 的性能,这其中的利害关系应该很明了。

    剩下的那些在朋友圈里卖化妆品,卖衣服,卖鞋的,直接统统屏蔽。我宁可在朋友圈里看陌生人秀恩爱,也不愿意看见在朋友圈里看到做广告的。每天地铁、电视、电脑、灯箱、报纸上的广告看的还不够?开个微信还要继续看广告?

    Mar

    29

    问题症状:使用 AdMob 广告 ANE 后,如果显示的是全屏 / 插屏广告,显示广告有时会黑屏(广告会一闪而过,大概 1 秒左右就会黑屏),这个黑屏是因为广告的显示图形跑到了屏幕外面,如果手机和应用设定为允许旋转屏幕,在旋转屏幕后广告会重新显示,但大小会不正确(黑屏状态按返回键也是会退出广告的)。

    解决方法:在 manifest 中添加最小版本设定和主题设定,样例如下(注意黄色底的代码):

    <android>
            <manifestAdditions>
                <![CDATA[
                    <manifest android:installLocation="auto">
                        <!-- 防止移动设备自动进入休眠状态 -->
                        <uses-permission android:name="android.permission.WAKE_LOCK" />
                        <uses-permission android:name="android.permission.WRITE_SETTINGS" />

                        <!-- GOOGLE Play 所需的权限 -->
                        <uses-permission android:name="android.permission.INTERNET"/>
                        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
                        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
                        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

                        <!-- GOOGLE Play SDK 版本要求 -->
                        <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="16"/>

                        <application>
                            <meta-data 
                                        android:name="com.google.android.gms.version" 
                                        android:value="@integer/google_play_services_version" 
                                        />
                              <activity 
                                          android:name="com.google.android.gms.ads.AdActivity" 
                                          android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
                                          android:theme="@android:style/Theme.Translucent"/>
                        </application>
                    </manifest>
                ]]>
            </manifestAdditions>
        </android>

    重要备注

    1、主题 android:theme 一定要写,否则一些安卓机上广告出现后大概1秒左右就会进入黑屏状态;

    2、最小版本 android:minSdkVersion 不一定要写,但不写的话传到 Google Play 市场是会报错的。

    3、上传到 Google Play 市场时就按上面的写就可以,不建义加入百度的 activity 与广告 ANE 文件,因为百度的广告中部份广告会直接下载安装游戏,而 Google Play 市场政策不允许从第三方市场下载或直接安装来源不明的APP,所以只加 AdMob 就可以了(传国内市场的那还是加上比较好)。

    Mar

    27

    <android>
            <manifestAdditions><![CDATA[
                <manifest android:installLocation="auto">

                    <!-- 防止APP打开时移动设备自动进入休眠状态 -->
                    <uses-permission android:name="android.permission.WAKE_LOCK" />
                    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

                    <!-- 百度与AdMob所需权限 -->
                    <uses-permission android:name="android.permission.INTERNET"/>
                    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
                    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
                    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
                    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
                    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
                    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

                     <application>
                            <meta-data     android:name="com.google.android.gms.version"
                                           android:value="@integer/google_play_services_version" />
                                 <activity     android:name="com.google.android.gms.ads.AdActivity" 
                                               android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

                                 <activity android:name="com.baidu.mobads.AppActivity" android:configChanges="keyboard|keyboardHidden|orientation"/>
                     </application>

                </manifest>
            ]]></manifestAdditions>
        </android>

    Mar

    26

    Adobe AIR SDK 历史版本存档中心

    • 0 Comments
    • Flash Platform

    有时候将版本升级到最新时会发现有一些功能会有 Bug,一些底层功能的 Bug 想绕都绕不开,想要换回旧版的 SDK 时可以用到。

    https://helpx.adobe.com/air/kb/archived-air-sdk-version.html

    Mar

    22

    iOS APP 开发时启动画面(有些人称它为“闪屏”)名称和尺寸多的实在让人记不住。每出一个新设备就要添加一个对应的新名称和尺寸,这也太蛋疼了。苹果公司就不能直接搞个大图,然后直接按比例缩放么?

    #target photoshop
    app.bringToFront();

    //所有闪屏尺寸集合
    //以下所有尺寸来 2015 年 3 月 9 日 Adobe 官方博客 
    //官方博客地址: http://blogs.adobe.com/airodynamics/2015/03/09/launch-images-on-ios-with-adobe-air/
    var docNames = [
            //图像都使用 Default 开头

            //5s 之前的手机设备,没有方向修饰词,屏幕都是竖的
            //如果做横向的闪屏,可以将显示的图案旋转90度

            //加个默认图像,万一遇上个 iPhone3GS 渣机用户,或其它意外情况
            ["Default.png""320*480"],

            //设备名称 ~iphone 其实是可以省略的,默认就是 ~iphone。
            //如果是ipad它会通过方向修饰词去判断的,为了严禁起见,还是加上吧。
            ["Default~iphone.png""640*960"]//iPhone4 非 Retina屏
            ["Default@2x~iphone.png""640*960"]//iPhone4 、4s Retina屏
            ["Default-568h@2x~iphone.png""640*1136"],//iPhone 5,5c,5s

            ["Default-375w-667h@2x~iphone.png""750*1334"]//iPhone6 竖向                          
            ["Default-414w-736h@3x~iphone.png""1242*2208"],//iPhone6 plus 竖向

            ["Default-Landscape-414w-736h@3x~iphone.png""2208*1242"],//iPhone6 plus,已经可以加横向修饰词
                                                                       //由此可见 iPhone6 Plus 是手机和平板设备的综合体

            //iPad 平板设备有方向修饰词,因为只有平板有方向修饰词,所以可以省略设备修词
            //比如将 Default-Landscape~ipad.png 写成 Default-Landscape.png。
            //上面的 iPhone6 Plus 也一样,有方向修饰词,所以它也属于一种平板设备,虽然它写的是 ~iphone
            //但所有设修饰词无论是 ~iphone 还是~ipad 都是可以省略的
            ["Default-Portrait~ipad.png""768*1024"],//iPad 1 、iPad 2 等旧设备,正方向的
            ["Default-Landscape~ipad.png""1024*768"],//iPad 1 、iPad 2 等旧设备,左横方向
            ["Default-Portrait@2x~ipad.png""1536*2048"],//iPad 3, iPad Air 等新设备,正方向
            ["Default-Landscape@2x~ipad.png""2048*1536"]//iPad 3, iPad Air 等新设备,左横方向

            //我这里没有放设备倒转时的方向与右横方向,也就是带有 PortraitUpsideDown 与 LandscapeRight 修饰词的图片
            //因为我用不上,因为游戏 APP方向一般都是固定的,要不是是竖的,要不就是横的。
            //如果对倒的和右横方向有需要,请按 Adobe 官方博客网页中的名称添加
          ];
    run();
    function run()
    {
        var docs = app.documents;
        for (var i =0; i < docNames.length; i++)
        {
           var size = docNames[i][1].split("*");        
           docs.add(
                          UnitValue(size[0],"px")//宽
                          UnitValue(size[1],"px")//高
                          72//分辨率
                          docNames[i][0]//名称
                          NewDocumentMode.RGB, //颜色模式
                          DocumentFill.BACKGROUNDCOLOR, //使用背景色初始化文档
                          1//像素的宽高比
                          );
        }
    }

    Mar

    22

    iOS APP 开发时所需图标尺寸集

    • 0 Comments
    • Miscellaneous

    在适配 iOS8 时,要注意标准模式和放大模式的区别。

    程序启动页 / 闪屏

    Default-568h@2x.png 640*1136
    Default.png 320*480
    Default@2x.png 640*960
    LaunchImage-800-667h@2x.png 750*1334
    LaunchImage-800-Portrait-736h@3x.png 1242*2208
    LaunchImage-800-Landscape-736h@3x.png 2208*1242
    Default-Landscape@2x~ipad.png 2048*1536
    Default-Landscape~ipad.png 1024*768
    Default-Portrait@2x~ipad.png 1536*2048
    Default-Portrait~ipad.png 768*1024

    iTunes 上传图标

    Icon-1024.png(名称不限) 1024*1024

    iTunes 展示图

    3.5 英寸 640*960
    4.0 英寸 640*1136
    4.7 英寸 750*1334
    5.5 英寸 1242*2208

    程序图标(Flash Builder开发者请无视它们的名称)

    Icon-Small.png 29*29
    Icon-Small-50.png  50*50
    Icon-Small@2x.png  58*58
    Icon-Small@3x.png  87*87
    Icon-Small-50@2x.png 100*100
    Icon.png 57*57
    Icon@2x.png 114*114
    Icon-60.png 60*60
    Icon-60@3x.png 180*180
    Icon-76@2x.png 152*152
    Icon-76.png  76*76
    Icon-72@2x.png  144*144
    Icon-72.png 72*72
    Icon-40.png 40*40
    Icon-40@2x.png 80*80
    Icon-40@3x.png 120*120
    Icon-60@2x.png 120*120

    Mar

    16

    加载外部 SWF 文件或嵌入的资源报错:

    SecurityError: Error #3226: Cannot import a SWF file when LoaderContext.allowCodeImport is false.

    添加以下代码:

    var _loaderContext:LoaderContext=new LoaderContext();
        _loaderContext.applicationDomain=ApplicationDomain.currentDomain;
        _loaderContext.allowCodeImport = true;

    搞定。没搞定的可以换个姿势写代码试试…

    Mar

    15

    测试使用 StarlingSWF 时,感觉对元件进行操作时太机械化了。偶然发现这个 BatchPane 这个好东西,这些代码估计比较适合使用 StarlingSWF 的用户。

    一、将位图转影片剪辑元件

    //Flash IDE的舞台上先不要放任何元件
    var expName = item.name.split(".")[0]//不带后缀名 
    fl.getDocumentDOM().addItem({x:0,y:0}, item);
    fl.getDocumentDOM().selectAll();
    fl.getDocumentDOM().convertToSymbol("movie clip",expName,"top left") ;
    fl.getDocumentDOM().selectAll()
    fl.getDocumentDOM().deleteSelection();//清空舞台

    2、位图都改成 png / gif 压缩方式,并允许平滑

    if(item.itemType=="bitmap"){ 
     item.allowSmoothing = true;
     item.compressionType = "lossless";
    }

    3、修改类名(加前缀,后缀神马的都类似了)

    item.linkageExportForAS=true;
    item.linkageClassName="img_" + item.linkageClassName;//修改类名,给类名添加前缀

    4、获取舞台上的实例导出的类名(可以用来重命名实例) 

    var instance = element;
    var item = instance.libraryItem;
    fl.trace("This instance type is " + item.linkageClassName);

    JSFL 官方中文指南:http://help.adobe.com/zh_CN/flash/cs/extend/flash_extending_reference.pdf

    Mar

    15

    AS3 自定义手势识别

    • 0 Comments
    • Flash Platform

    Mar

    15

    Flash IDE 批处理面板:BatchPane

    • 0 Comments
    • Flash Platform

    Flash IDE 用来制作可视化的素材和元件时非常方便,但当元件数量非常多的时候,如果需要重复的操作相同的过程,就会需要用到 *.jsfl,用这个 BatchPane 能更方便的运行 jsfl 代码。在新的 CC 版本中也测试过可以使用。

    下载地址201503151418017635.rar

    安方方法:新建一个 Flash JavaScript 文件,然后往里填" fl.trace(fl.configDirectory); ",得到一个文件夹路径,在该路径中找到 WindowSWF 的文件夹,然后将压缩包中的文件解压到 WindowSWF 目录后,重启 Flash IDE CS6,在“窗口—其它面板”(在 CC 版本中它会显示在“窗口—扩展”菜单里)中可以打开它,然后就可以开始写屌爆的 jsfl 代码了。 

    原文链接http://bbs.9ria.com/thread-169382-1-1.html