`
wgcode
  • 浏览: 578089 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

位图的九宫格(flash用)

阅读更多

[url]http://bbs.blueidea.com/viewthread.php?tid=2915069 
[/url] 

最近做游戏,发现flash里位图是无法使用scale9Grid这个属性,,,没办法,只好自己写了一个,,,原理很简单,,用程序把位图切成九块,,装里一个Sprite里,然后重写Sprite的width和height这两个方法,根据改变大小来重新设置位图的各个位置…这样就实现了位图的不变形缩放…. 
ps:近期我会把以前做的一些小东西的源码放出来,供大家学习使用… 

严重声明,,, 
发现好多人都不知道这个问题,,用FLASH编译,位图使用scale9Grid也没用, 

/** 
* @project dynasty 
* @author 郭晟 or 猪哥靓 
* @copyright  
* @document  
* @history  
* create 2009-2-20 
* 位图Scale9Grid功能 
**/  
package  
{  
    import flash.display.Sprite;  
    import flash.display.Bitmap;  
    import flash.display.BitmapData;  
    import flash.geom.Rectangle;  
    import flash.geom.Point;  
      
    public class BitmapScale9Grid extends Sprite  
    {  
        private var source : Bitmap;  
        private var scaleGridTop : Number;  
        private var scaleGridBottom : Number;  
        private var scaleGridLeft : Number;  
        private var scaleGridRight : Number;  
          
        private var leftUp : Bitmap;  
        private var leftCenter : Bitmap;  
        private var leftBottom : Bitmap;  
        private var centerUp : Bitmap;  
        private var center : Bitmap;  
        private var centerBottom : Bitmap;  
        private var rightUp : Bitmap;  
        private var rightCenter : Bitmap;  
        private var rightBottom : Bitmap;  
          
        private var _width : Number;  
        private var _height : Number;  
          
        private var minWidth : Number;  
        private var minHeight : Number;  
          
        public function BitmapScale9Grid(source:Bitmap, scaleGridTop:Number, scaleGridBottom:Number, scaleGridLeft:Number, scaleGridRight:Number )   
        {  
            this.source = source;  
            this.scaleGridTop = scaleGridTop;  
            this.scaleGridBottom = scaleGridBottom;  
            this.scaleGridLeft = scaleGridLeft;  
            this.scaleGridRight = scaleGridRight;  
            init();  
              
        }  
          
        private function init() : void {  
            _width = source.width;  
            _height = source.height;  
              
            leftUp = getBitmap(0, 0, scaleGridLeft, scaleGridTop);  
            this.addChild(leftUp);  
              
            leftCenter = getBitmap(0, scaleGridTop, scaleGridLeft, scaleGridBottom - scaleGridTop);  
            this.addChild(leftCenter);  
              
            leftBottom = getBitmap(0, scaleGridBottom, scaleGridLeft, source.height - scaleGridBottom);  
            this.addChild(leftBottom);  
              
            centerUp = getBitmap(scaleGridLeft, 0, scaleGridRight - scaleGridLeft, scaleGridTop);  
            this.addChild(centerUp);  
              
            center = getBitmap(scaleGridLeft, scaleGridTop, scaleGridRight - scaleGridLeft, scaleGridBottom - scaleGridTop);  
            this.addChild(center);  
              
            centerBottom = getBitmap(scaleGridLeft, scaleGridBottom, scaleGridRight - scaleGridLeft, source.height - scaleGridBottom);  
            this.addChild(centerBottom);  
              
            rightUp = getBitmap(scaleGridRight, 0, source.width - scaleGridRight, scaleGridTop);  
            this.addChild(rightUp);  
              
            rightCenter = getBitmap(scaleGridRight, scaleGridTop, source.width - scaleGridRight, scaleGridBottom - scaleGridTop);  
            this.addChild(rightCenter);  
              
            rightBottom = getBitmap(scaleGridRight, scaleGridBottom, source.width - scaleGridRight, source.height - scaleGridBottom);  
            this.addChild(rightBottom);  
              
            minWidth = leftUp.width + rightBottom.width;  
            minHeight = leftBottom.height + rightBottom.height;  
        }  
          
        private function getBitmap(x:Number, y:Number, w:Number, h:Number) : Bitmap {  
            var bit:BitmapData = new BitmapData(w, h);  
            bit.copyPixels(source.bitmapData, new Rectangle(x, y, w, h), new Point(0, 0));  
            var bitMap:Bitmap = new Bitmap(bit);  
            bitMap.x = x;  
            bitMap.y = y;  
            return bitMap;  
        }  
          
        override public function set width(w : Number) : void {  
            if(w < minWidth) {  
                w = minWidth;  
            }  
            _width = w;  
            refurbishSize();  
        }  
          
        override public function set height(h : Number) : void {  
            if(h < minHeight) {  
                h = minHeight;  
            }  
            _height = h;  
            refurbishSize();  
        }  
          
        private function refurbishSize() : void {  
            leftCenter.height = _height - leftUp.height - leftBottom.height;  
            leftBottom.y = _height - leftBottom.height;  
            centerUp.width = _width - leftUp.width - rightUp.width;  
            center.width = centerUp.width;  
            center.height = leftCenter.height;  
            centerBottom.width = center.width;  
            centerBottom.y = leftBottom.y;  
            rightUp.x = _width - rightUp.width;  
            rightCenter.x = rightUp.x;  
            rightCenter.height = center.height;  
            rightBottom.x = rightUp.x;  
            rightBottom.y = leftBottom.y;  
        }  
    }  
} 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics