About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • 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;
      }
     }
    }