About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Apr

    19

    官方的教程就是简洁,两个箭头就把一切说清楚了。

    Apr

    19

    struct Color
    {
        let red, green, blue:Double

        mutating func someColor()
        {
            //虽然这里什么也没有调用
        }

        init(g:Double)
        {
            red = g
            green = g
            //someColor()//但这里就是错的
            blue = g
            someColor()//隐式的调用self.someColor(),而这个self的储值属性必须是经过初始化的
        }
    }

    Apr

    18

    刚刚又看到一个新玩艺儿 Starling for Haxe,真是有点感叹。

    先是 Egret 一个 HTML5 游戏引擎框架,提供了 TS Conversion,可以将 AS3 项目快速的转换成为 HTML5 项目(只是从代码上的转换,并不是跨平台的编译,据说转换率能达到 90% 以上,然后稍作修改就可以生成 HTML5  项目)。

    然后 StarlingSwf 提供了将 Flash 资源转换为 Egret 资源的 StarlingSwf-Egret 版本以及 Egret 的依赖库。

    接着是最近一直在各 Flash 群里发布各种培训广告的 Layabox(号称能快速的将 Flash 游戏项目转换成 HTML5 项目,具体的工具冒似还没有正式的上线,只是在宣传视频里看到了,估计他们的培训班内部可能已经在使用了)。

    然后又看到了这个新玩艺儿 Starling for Haxe……估计还有其它很多杂七杂八的工具。

    不知是该替 Flash & AS3 高兴还是悲伤。一个明明已经连 Adobe 官方都想要放弃的东西,结果却成了打不死的小强。

    Apr

    17

    Swift 引用类型

    • 0 Comments
    • Swift

    Swift 除了强引用与弱引用(weak 关键字修饰)之外,还有非持有引用(unowned 关键字修饰)。

    Swift 虽然也使用引用计数的方式自动化管理内存,但不采用垃圾回收机制(垃圾回收机制只在空闲时或内存不足时进行“碎片化”的回收)。Swift 的对象如果没有任何引用时会被立即回收,强引用会超造成两个或两个以上的对象循环引用而造成内存泄漏,此时可以使用弱引用或非持有引用。

    非持有引用在内存存活期间会一直有值,不会是 nil,所以不会是非可能值类型;弱引用时使用变量一定是可能值类型,当关联对象在内存清除后,自动设置为 nil。

    可能值链在绑定时所产生的强引用只对当前行代码有效,不会保存到下一行。

    Apr

    17

    mutating 关键字的使用

    • 0 Comments
    • Swift

    默认情况下,Swfit 语言中只有类对象的方法可以直接修改类对象的值类型属性;而结构体和枚举虽然也可以定义自己的方法,但它们的实例方法中不可以修改值类型的属性,如果需要修改就要添加 mutating 关键字。而且需要使用变量引用结构体对象或枚举对象,而不能使用常量(编译会报错)。

    Apr

    16

    MAC OS X 基础入门教程

    • 0 Comments
    • Miscellaneous

    习惯是很难改变的,思维习惯比行为习惯更改难。习惯了 WIN 系统的操作习惯的用户,估计都会很难适应苹果的思维习惯和操作习惯……

    MAC OS X 基础入门教程地址:http://www.swiftv.cn/course/hy9hpryw

    这个适合刚开始接触 MAC 电脑的用户,讲的比较详细,包含了 MAC 机中同时安装 WIN 双系统的说明。

    Apr

    16

    如果没有 MAC 电脑,但又想学习 Swift 语言,可以直接在 http://swiftstub.com/ 输入 Swift 代码测试语法。只需要一个最新版本的网页游戏器,推荐使用 Google Chrome 浏览器。

    缺点是没有代码提示,也不会像 XCode 里的 Playground 能即时显示结果,输出结果必须要使用 println() 函数来打印。

    Apr

    16

    一个入门级的视频教程,讲的非常快,也非常全,适合懒的看书学习的人。

    视频地址:http://www.swiftv.cn/course/hwcuol4d

    Apr

    15

    纯 AS3 将图片转换为 SWF

    • 0 Comments
    • Flash Platform

    比较简单方便的通过纯 AS3 代码将图片转换为 SWF 格式,可以免去 SWFTools 需要通过命令行将 *.jpg / *.png 之类的文件转换成 *.swf。

    package
    {
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.JPEGEncoderOptions;
        import flash.display.Loader;
        import flash.display.LoaderInfo;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.net.FileReference;
        import flash.net.URLRequest;
        import flash.utils.ByteArray;
        import flash.utils.Endian;

        public class Image2Swf extends Sprite
        {
            private var isCompress:Boolean = true;//是否为压缩格式的SWF

            private var loader:Loader;
            private var bitmapData:BitmapData;

            public function Image2Swf()
            {
                loader = new Loader();
                loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
                loader.load(new URLRequest("test.jpg"));
            }

            private function initHandler(e:Event):void
            {
                e.target.removeEventListener(Event.INIT, initHandler);

                var bitmap:Bitmap = e.target.content as Bitmap;

                if(bitmap)
                {
                    bitmapData = bitmap.bitmapData;

                    var byteArray:ByteArray = new ByteArray();

                    bitmapData.encode(bitmapData.rect, new JPEGEncoderOptions(), byteArray)

                    loader = null;
                    loader = new Loader();
                    loader.contentLoaderInfo.addEventListener( Event.COMPLETE, completeHandler );
                    loader.loadBytes(byteArray);        
                }
            }

            private function completeHandler(e:Event):void
            {
                e.target.removeEventListener( Event.COMPLETE, completeHandler );

                if(isCompress)
                {
                    //保存为压缩格式的SWF
                    saveContentToSWF_compress( e );
                }
                else
                {
                    //保存为非压缩格式的SWF
                    saveContentToSWF( e );
                }
                loader.unload();
                loader = null;
                bitmapData.dispose();
                bitmapData = null;
            }

            //压缩格式
            private function saveContentToSWF_compress( e:Event ):void
            {
                var swf_head:ByteArray = new ByteArray();
                    swf_head.endian = Endian.LITTLE_ENDIAN;
                    swf_head.writeBytes((e.target as LoaderInfo).bytes, 08 );
                    swf_head[0] = 0x43; // 'C'; 
                    swf_head.position = 0;

                var swf_body:ByteArray = new ByteArray();
                    swf_body.endian = Endian.LITTLE_ENDIAN;
                    swf_body.writeBytes((e.target as LoaderInfo).bytes, 8 );
                    swf_body.position = 0;
                    swf_body.compress();
                    swf_body.position = 0;

                var swf_ByteArray:ByteArray = new ByteArray();//包含 head 与 body 的二进制

                    swf_ByteArray.writeBytes(swf_head);
                    swf_ByteArray.writeBytes(swf_body);

                var file:FileReference = new FileReference();
                    file.save(swf_ByteArray, "压格式的SWF.swf");//SWF head CWS
            }

            //非压缩格式
            private function saveContentToSWF( e:Event ):void
            {
                var file:FileReference = new FileReference();
                    file.save((e.target as LoaderInfo).bytes, "非压格式的SWF.swf");//SWF head 为FWS
            }
        }
    }

    Apr

    13

    在 Flash IDE 环境中开发应用时如果使用了 RL2 库,推荐使用 *.swc 库文件预编译格式,如果使用的 *.as 源格式在 IDE 中无法通过编译,在发布设置中勾选“导出 SWC”文件,再编译(参考《Robotlegs Framework 常见问题与解决方法》)。

    如果在 FlashBuilder 中开发 iOS APP 时使用动态加载的方式加载外部的 SWF 文件(同一个应用内多个 SWF 动态加载的技术说明参考 Adobe 官方博客《External hosting of secondary SWFs for AIR apps on iOS》),有可能会遇到类似下面这样的错误,记得将应用的 externalApp.swc 也放到 app 开发环境的库配置路径。

    TypeError: Error #1034: Type Coercion failed: cannot convert org.swiftsuspenders.reflection::DescribeTypeReflector@5289a91 to org.swiftsuspenders.reflection.Reflector.

     如果资源类比较多,主应用类中没有调用到的类并不会被编译,可以通过 FlashBuilder 编译器参数加: 

    -include-libraries ..\libs\externalApp.swc