`
wgcode
  • 浏览: 599788 次
  • 性别: 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;  
        }  
    }  
} 
 
分享到:
评论

相关推荐

    Flex位图九宫格处理工具

    在实际开发中,首先需要根据位图内容设定九宫格的切割位置,这通常可以通过图形编辑软件完成,然后在代码中使用`BitmapScale9Grid`和`BitmapRepeatUtil`类来处理位图数据。在组件的皮肤中,通过指定位图的九宫格属性...

    ActionScript3位图九宫格缩放工具类

    帮助flash内实现图片的9宫格缩放,位图九宫格缩放,ActionScript3代码实现。

    as3 九宫格

    4. **创建Bitmap对象**:为每个位图数据创建一个Bitmap对象,这些对象将在舞台上用作九宫格的元素。 5. **布局与拉伸**:根据目标尺寸,计算每个Bitmap对象的新尺寸和位置。对于边缘和角落的Bitmap,保持它们的原始...

    [转]位图九宫

    【位图九宫格】是一种常见的图像处理技术,主要用于创建响应式布局或适应不同尺寸屏幕的设计。在网页设计和移动应用开发中,位图九宫格通常被用来展示图片,如用户头像、商品缩略图等,使它们在不同设备上能够自适应...

    J2ME 九宫格小游戏

    在这个场景中,我们关注的是一个使用J2ME技术开发的“九宫格小游戏”。这个游戏集成了背景音乐播放和积分存储功能,这展示了J2ME在游戏开发中的应用及其多媒体支持。 ### 1. J2ME基础知识 J2ME由几个配置和 ...

    js+html5实现手机九宫格密码解锁功能

    通过JavaScript动态获取浏览器窗口的宽度和高度,然后按照一定的比例调整Canvas的尺寸,从而保证九宫格在不同设备上的显示效果。同时,对于触屏设备的兼容性也进行了特别的优化。 6. 安全性问题 在实际的手机九宫格...

    自动处理并缩小九宫格图片类似9图

    "自动处理并缩小九宫格图片类似9图"的标题和描述指向了一种特定的图像处理技术,这种技术常用于Android应用开发,也适用于网页设计。9-patch(或称.9图)是一种图像格式,它允许开发者创建可伸缩的图片,以适应不同...

    javascript+canvas制作九宫格小程序

    本文主要讲述如何使用JavaScript和Canvas技术开发一个九宫格展示图片的小程序。通过这段内容,我们可以学习到如何将一张图片分割成九宫格,并以网格的形式展示出来。同时,我们还可以学到如何为这个九宫格添加动画...

    九宫格2(八数码)

    综合以上分析,这个项目是一个用C++编写的九宫格2(八数码)游戏,它利用API来实现游戏逻辑,特别是通过全局择优搜索算法来寻找解决滑动拼图问题的最短路径。开发者可以通过这个游戏学习到如何使用图形界面、处理用户...

    九宫格拼图游戏

    在九宫格拼图游戏中,可能使用了LinearLayout、GridLayout或RelativeLayout等布局管理器来组织9个小方块的显示位置。 8. **触摸事件处理**:为了响应用户的触摸操作,游戏需要监听并处理Android系统的MotionEvent。...

    Android九宫格手势密码代码设计

    首先,要实现九宫格密码界面,我们需要创建一个自定义View,因为Android的五大布局(LinearLayout, RelativeLayout, FrameLayout, GridLayout, ConstraintLayout)无法直接满足九宫格中每个点距离相等且围成正方形的...

    位图置换飘忽效果flash源文件

    位图置换飘忽效果在Flash编程中是一种常见的视觉特效,主要通过改变图像像素的位置来创造出动态、流动或飘忽不定的视觉感受。这种效果通常应用于游戏、动画、网页设计等领域,能够增加用户的交互体验和视觉吸引力。...

    9格切片位图脚本

    9格切片位图脚本 9格切片位图脚本 9格切片位图脚本

    一键Flash库中位图转成无损及平滑

    自已总结,觉得对于Flash文档中大量图片的保真...可以对Flash IDE中所有打开的文档一键操作,也可以仅对当前文档操作,结果是将位图转为无损格式并且平滑。有需要的朋有看看。因为我的米米不多,所以此文档要宰你2分。

    易语言位图句柄取位图模块

    11. **删除对象**:可能指的是释放不再使用的位图对象,如HBITMAP,以回收系统资源。 12. **取屏幕句柄**:获取屏幕的设备上下文(Device Context,DC),这是Windows中用于图形输出的一个重要概念,用于绘制到屏幕...

    MCGS位图.rar

    2. 位图复用:尽量使用相同的位图资源创建多个相似的元件,以减少项目中的重复位图,提高程序效率。 3. 位图分辨率:根据触摸屏的分辨率选择合适的位图尺寸,过大或过小都可能影响显示效果。 总结,MCGS位图是构建...

    flash加载外部位图

    位图是图形设计中的基本元素,它可以是PNG、JPG或GIF等格式,而将位图加载到Flash中,可以极大地提高程序的灵活性和性能。 首先,我们需要了解AS3.0中的Bitmap类和BitmapData类。Bitmap类用于表示位图对象,它可以...

    MFC位图定时移动

    在本文中,我们将深入探讨如何在Visual Studio 2010环境下使用Microsoft Foundation Class (MFC) 库实现一个功能,即"位图定时移动"。这个功能涉及到图像处理、事件处理以及定时器机制,是GUI编程中的一个重要实践。...

    flash动画优化——位图淘汰机制

    综合以上特性,我们可以使用Bitmap将矢量图动画缓存为位图动画,多个相同的对象共用同一份BitmapData数据,这样既可以大幅降低cpu占用,又可以节省内存,同时还避免了直接在库里面使用图片而造成flash文件变大的...

Global site tag (gtag.js) - Google Analytics