About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Apr

    7

    FLASH 播放器在 11.3 版本开始 BitmapData 类提供了原生的 encode() 方法用于编码 JPG 或 PNG,并且编译的速度变的非常的快(JPG 10-20 倍,PNG 5-10 倍),但实际上它的功能有些不足。比如它不能够指定输出图像的分辨率密度(Pixel density ,即 DPI),因为原生 JPEGEncoderOptions 类对象只能指定编码的质量,但不能指定 DPI 值。

    可以用一个第三方的 Image Encoder 来实现指定的 DPI 值输出图像:as3-image-libraryr.zip

    此第三方类编译的时间会比较长,因为它是通过 AS 代码实现的,并不像原生类中的方法是通过底层播放器中的 C++ 代码实现的(所以性能不会像原生类那高的),适合在线编译一些小尺寸的图像(AIR 项目推荐桌面应用扩展 ImageMagick 命令行)。

    Jan

    26

    使用 lock() 方法提升位图编程很简单,但 unlock()方法带有一个 changeRect:Rectangle 参数;使用它并不是指解锁部个区域,而是在使用 unlock() 方法时通知更新的区域,但解锁的是整个 BitmapData 对象。以下样例代码分 4 步演示整个过程:

    var changeRect:Rectangle = new Rectangle(20206060);
    var clickCount:int = 0;
    var bitmapData:BitmapData = new BitmapData(100100, false, 0xFF);
    var bitmap:Bitmap = new Bitmap(bitmapData);
    addChild(bitmap);
    stage.addEventListener(MouseEvent.CLICK, click);
    function click(event:MouseEvent):void {
     clickCount++;
     switch(clickCount) {
      case 1:{
       bitmapData.lock();
       trace("bitmapData 对象被锁定");
       break;
      }
      case 2:{
       bitmapData.fillRect(bitmapData.rect, 0xFF0000);
       trace("bitmapData 对象更换颜色,但由于它仍然处于锁定状态,所以不会通知视图更新");
       break;
      }
      case 3:{
       bitmapData.unlock(changeRect);
       trace("bitmapData解锁了整个对象,但只有中间部份更新了视图,四周旁边并没有更新视图");
       break;
      }
      case 4:{
       clickCount = 0;
       bitmapData.fillRect(bitmapData.rect, 0xFFFF);
       trace("整个bitmapData都可以更新了");
       break;
      }
     }
    }

    Jun

    20

    一个游戏中常用的位图拼贴(贴片)技术类(可扩展至人物动画的提取)下载: SpaceMap.rar

    源码整理自:http://www.moock.org/eas3/examples/essential actionscript 3.0 examples 第26章的网络源码扩展

    More...

    Nov

    8

    Canvas 组件不能将 BitmapData 实例作为 backgroundImage 样式属性值,是因为在AS3中,setStyle() 和 getStyle() 方法都是基于CSS的,而CSS中只能使用URL、URI、数字、字符串、字体等值,无法使用字节数据值。而BitmapData是一种字节数据值类型,所以无法使用。

    但 Canvas 继续自 Sprite类,所以每个Canvas 实例与 Sprite 的实例一样都带有 graphics 属性实例作,graphics 属性实例因为可以使用 beginBitmapFill() 方法,所以可以将 BitmapData 间接的填充到Canvas 的 backgroundImage 样式属性中。在 beginBitmapFill() 方法中,可以使用一个Matrix类的实例矩阵变形来模似 Canvas 组件中的 backgroundSize 样式属性。

    以下为一个样例代码: 

    var canvas:Canvas=new Canvas();
    canvas.width=500;
    canvas.height=500;
    var matrix:Matrix = new Matrix();
    matrix.scale(canvas.width/bitmapData.width,canvas.height/bitmapData.height);
    canvas.graphics.clear();
    canvas.graphics.beginBitmapFill(bitmapData,matrix,true,true);
    canvas.graphics.drawRect(0,0,canvas.width,canvas.height);
    canvas.graphics.endFill();