About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Feb

    24

    虚拟摇杆在移动游戏开发中非常常见,以下为几个虚拟摇杆常见的样例代码参考

    虚拟摇杆(任意方向).rar 

    虚拟摇杆(八方向匹配).rar

    Adobe开发者中心(任意方向).rar

    附案例代码出处:

    “任意方向”版(英文):http://johnstejskal.com/blog/virtual-joystick-for-mobile-games-using-as3/

    “八方向匹配”版(葡萄牙文原版):http://www.tutoriaisflash.net/2011/06/criando-um-joystick-virtual-para_4885.html

    “八方向匹配”版(简体中文译版):http://www.kuqin.com/gamedev/20120525/320716.html

    Adobe 开发者版本:http://www.adobe.com/cn/devnet/actionscript/samples/interactivity_3.html

    Feb

    11

    AS3 版 Key.isDown()

    • 0 Comments
    • Flash Platform

    在 AS3 中重现 AS1/2 时代做游戏常用的方法:

    package {
     
     import flash.display.Stage;
     import flash.events.Event;
     import flash.events.KeyboardEvent;
     
     /**
      * 用法:
      * Key.initialize(stage);
      * if (Key.isDown(Keyboard.LEFT)) {
      *    // 左键被按下
      * }
      */

     public class Key {
      private static var initialized:Boolean = false; 
      private static var keysDown:Object;  
      public static function initialize(stage:Stage) {   
       if (!initialized) {    
        keysDown = new Object();    
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
        stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);    
        initialized = true;    
       }
      }  
      public static function isDown(keyCode:uint):Boolean {   
       if (!initialized) {
        throw new Error("Key class has yet been initialized.");
       }
       return Boolean(keyCode in keysDown);
      }  
      public static function deconstruct(stage:Stage):void {   
       stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
       stage.removeEventListener(KeyboardEvent.KEY_UP, keyReleased);   
       initialized = false;
      }  
      private static function keyPressed(event:KeyboardEvent):void {
       keysDown[event.keyCode] = true;
      }  
      private static function keyReleased(event:KeyboardEvent):void {
       if (event.keyCode in keysDown) {
        delete keysDown[event.keyCode];
       }
      }  
     }
    }

    Jan

    13

    几乎 AS1&2 的书都被我扔掉了,留下的这本 AS2 的书都是我从台湾露天市场花了 500 RMB 买来的,没舍得扔,因为这本书只有英文版和繁体版的,没有简体版。有些书国因为没有出版或绝版买不到了,所以是自己在淘宝上打印来的。淘宝打印非常划算,平均只有2分钱一页左右,而且打印的质量非常好。个别书看了二三十遍了,连封面上的泡沫都翻的掉了,书角也裂了。

    印象中被我扔掉的 AS1&2 书籍中,有两本颜金桫出的书很好,《闪客实战 Flash高级编程》和《Flash MX2004 ActionScript 2.0 与 RIA 应用程序开发》,可惜从06年下半年开始他看好了 AJAX ,并且声称 AJAX 一定会取代 Flash 技术,然后投入了 AJAX 的怀抱。不过这七八年过去了,只能对 AJAX 说:“呵呵”。现在也不知道他在搞什么了。其它 AS1&2 的书,除了 Moock 的经典书籍之外,真的只能说太一般了,大多是从 Flash 帮助手册上抄的。

    个别书值得收藏,但它们大多数我想某一天也会被我扔掉吧,给他们拍个照,留个记念 。

    More...

    Jan

    2

    在 AS2 时代,有一个全局变量的概念,全局变量不能使用 var 来定义,而是直接使用关键字“_global.变量名”的方式来读写变量。然而到了 AS3 时代,这个全局变量的关键字已经不存在了,所以用户需要利用一定的技巧来摸拟全局变量,比如技巧一:通过在匿名包中定义一个全局类加一个静态变量,这样就可以被其它所有类和对象在任何时候访问到。

    然后事实上,在 AS3 中虽然没有了 _global 这个关键字,但全局对象仍然存在,只是在一般状况下没有任何关键字或对象可以引用它。在嵌套函数中的 this 关键字它并不会指向当前类的实例,而是会指向这个全局对象 [object global],如果开发者不了解这一点,往往可能就会造成侦听器未移除,甚至是内存泄漏(所以当嵌套函数中需要引用当前类的实例时,需要在类的方法中定义一个变量引用当前类的实例)。

    但也正是由于嵌套函数中的 this 永远都是指向全局对象 [object global] 的,所以可以利用这一点,让 _global 在 AS3 中重现。技巧二:在匿名包中定义一个全局的 getter 方法如下:

    package{
     public function get _global():Object{
      return global();
      function global():Object{
       return this;
      }
     }
    }

    好了,现在可以像在 AS2 中一样在当前项目中直接使用 _global 了。

    More...

    Dec

    30

    //样例代码为Windows简体中文系统默认12号字体
    var field:TextField = new TextField();
    field.height = field.width = 100;
    field.border=true;
    field.width = 100;
    field.height = 58;
    field.wordWrap = true;
    field.text = "古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客";
    addChild(field);

    文本字符度量度信息是单个的个体信息,它所映射的就是单个字符的轮廓外形,文本渲染引擎(系统的文本渲染引擎或 Flash 矢量文本渲染引擎)都只能渲染以单个字符为最小单位的字符轮廓,不能渲染半个字符。就像单个的像素点个体信息,对应屏幕上一个点,没有半个像素这样的概念。所以 TextField (文本域)对象中的显示文本在上下滚动时它总是以行的方式滚动的。

    如果一定要实现,可以通过其它一定的技式来实现,比如使用一个文本域相同大小的位图数据对象 + 一个舞台外不可见的文本域,然后 draw 成位图后即可使用遮罩只显示半行的字符;或使用其它技巧实现。

    Dec

    30

    在函数或方法内明明可以使用 const 定义常量,但编译器会自动将它转换成 var 定义的变量(可以通过反编译验证),所以局部常量的语法只对编译期有效,在运行期它仍然是变量,自然运行效率也不会有区别(比如在类似C#这样的语言中,根本连编译期的局部定义的常量概念也没有,常量只能用于类级别的定义)。

    Jul

    17

    新旧版本 TweenLite

    • 1 Comments
    • Flash Platform

    有人喜欢旧版的 TweenLite,因为它简单方便只有一个类;新版本的功能更多一点,各个类的功能也分的更清晰一些,但新版本中不少插件是收费的。

    旧版本的: TweenLite旧版(单个类).rar

    新版本的:TweenLite-greensock-as3(新版).zip

    Jul

    16

    在AS3中可以通过一个var 定义多个变量,但每个变量必须注明类型 

    var a:int,b:int;//正确
    var a:int,b:String;//正确
    var a,b:int;//虽然也正确,但a不会有代码提示,编译时也不会进行类型检查;并却运行时它是一个无类型变量

    More...

    Aug

    9

    Yahoo ASTRA 作为一款在06年就开始已经存在的 AS3 轻量级的第三方类库,经过这几年来的更新,它相对其它轻量级的第三方类库而言已经非常成熟。它能支持布局容器类百分比设置布局,这一点在布局时很方便。能在 Flash 中编译,并且可视控件大都支持 setStyle() 方法来设置样式。编译的速度也非常快,执行效率也非常好。

    与 minimalcomps 第三方类库相比,minimalcomps 过于轻量级,比如不支持百分比布局,只有一个Style类能设置颜色,但不能通过 setStyle() 方法来设置样式;

    与 aswing 相比,aswing 首先第一眼看的皮肤默认样式非常令人难以接受,修改皮肤样式的工作量会非常大;另一方面,aswing 如果使用类源文件形式编译,编译速度非常慢,如果使用swc库文件形式编译,虽然速度上去了,但如果发现 Bug 想自己修改就比较麻烦了。

    Yahoo ASTRA 缺点是作为轻量级而言,它也缺少了一些高级功能的类库组件,比如像 Accordion 、AdvancedDataGrid 等类。

    简单来说,Yahoo ASTRA 非常适合小型项目的快速开发。

    Yahoo ASTRA 、minimalcomps 等第三方类库下载地址《AS3 第三方组件与类库资源》。

    More...

    Jul

    18

    Flex 格式化数据

    • 0 Comments
    • Flash Platform

     格式化相关的类只适用于原始的、未经格式的数据。如果针对用户可以编辑的文本域使用格式化相关的类,必须先删除输入数据中已经包含的所有格式化字符。