用Flash的beginBitmapFill平铺背景

  之前写过在flashmx2004中平铺背景的方法,虽然它也是有效果的,但相对使用flash8时还是显得有些复杂.这次介绍的是flash8中的MovieClip的新方法MovieClip.beginBitmapFill()法.使用这种方式来平铺背景会非常的简单.下面开始.

  演示文件:

1.    我们需要先准备一张小图.当前我们使用的是一张小的gif图像如下图所示:

  如果你想测试可以直接下载些图像来测试.

  2.    新建一个flash文档,大小随意,将我们选定的这张图像导入到库中,并在库中直接为此图像设置链接.当前我们设置为pattern1,基本方法是选中库中刚导入的图像,右击选择链接,如下图所示:

  3.完成这一步操作之后,按下来我们准备使用代码来平铺背景.在前面我们提到过我们将使用MoiveClip.beginBitmapFill()方法.我们先看一下beginBitmapFill()方法:
public beginBitmapFill(bmp:BitmapData, [matrix:Matrix], [repeat:Boolean], [smoothing:Boolean]) : Void
beginBitmapFill方法是用位图来添充绘画区域,也就是说它需要先有一个绘画区域,它有四个参数,bmp参数可以是一张透明或不透时的图像,matrix参数主要用来用bmp进行变换操作,包括旋转,缩放和移动,后面两个参数repeat是设定是否重复, smoothing参数是设计是否平滑,默认为false即不平滑.针对于beginBitmapFill()最基本的应用是你可以只使用bmp参数.ok.下面我们准备编码.
4.    选中场景中的第一帧,在其中加入如下代码:

//导入flash8 bitmapData类 
import flash.display.BitmapData; 
//创建bitmapData实例,这里使用的是flash8的loadBitmap.如不清楚可以//参看本站的flash8 bitmapData教程 
var tile:BitmapData = BitmapData.loadBitmap("pattern1"); 
//使用beginBitmapFill()方法开始添充. 
this.beginBitmapFill(tile); 
//下面一段是根据屏幕的大小来绘制绘画区域,用以beginBitmapFill来添充. 
this.lineTo(Stage.width, 0); 
this.lineTo(Stage.width, Stage.height); 
this.lineTo(0, Stage.height); 
this.lineTo(0, 0); 
this.endFill(); 
5.    现在测试你的影片,你就可以看到如下图所示的效果了.

  6.呵呵,看上去的确很简单,只需要几行代码即可,相对于flashmx2004的平铺效果来说,现在你不在需要计算屏幕的宽高能容纳多少张小图了.ok.现在点击右上角的窗口放大按钮,我们发现只有中心区域有添充,四周并没有,也就是说它没随屏幕的变化而进行重绘,这并不是我们想要的,对于背景来说,需要让它随着屏幕大小的变化而变化. 接下来我们继续添加代码.
  7.要想让它随着屏幕的大小变小,我们需要使用flash8中的Stage类来处理.如下代码:

Stage.scaleMode = "noScale"; 
Stage.align = "TL"; 
var stageListener:Object = new Object(); 
stageListener.onResize = function() { 
    trace("w:"+Stage.width+", h:"+Stage.height); 
    tilebg(); 
}; 
Stage.addListener(stageListener); 
//调用tilebg()函数第一次绘制 
tilebg(); 

******************************************* 
import flash.display.BitmapData; 
function tilebg(){ 
var tile:BitmapData = BitmapData.loadBitmap("pattern1"); 
this.beginBitmapFill(tile); 
this.lineTo(Stage.width, 0); 
this.lineTo(Stage.width, Stage.height); 
this.lineTo(0, Stage.height); 
this.lineTo(0, 0); 
this.endFill(); 

我们在我们原有的代码之上加入了一段Stage大小变化的侦听,这一段应当说是我非常常用的代码,为了方便起见,我们把原来的代码定义成一个函数即tilebg(),这样当屏幕大小发生变化时,就会执行onResize()方法,就会调用定义好的tilebg()函数.ok.现在在测试你的影片,刚才的问题已经解决了,你可以点击swf窗口的放大按钮来查看效果

  8.接下来我们深入研究一下beginBitmapFill()其它的几个参数.假设我们希望我们平铺完的效果始终是光滑的.那么我们就设定smoothing始终为true; 我们来看Matrix和repeat两个参数.选中第一帧,打开actionscript面板.我们做如下的简单的修改.

function tilebg(){ 
var tile:BitmapData = BitmapData.loadBitmap("pattern1"); 
var matrix = new flash.geom.Matrix(); 
    repeat = false; 
    smoothing = true; 
this.beginBitmapFill(tile,matrix,repeat,smoothing); 
this.lineTo(Stage.width, 0); 
this.lineTo(Stage.width, Stage.height); 
this.lineTo(0, Stage.height); 
this.lineTo(0, 0); 
this.endFill(); 

  我们只需要在tilebg()函数中做一点修改, 分别定义了matrix, repeat,和smoothing三个参数,还有一处不要忘记了,this.beginBitmapFill(tile,matrix,repeat,smoothing)把其它三个参数加入进去.默认状态下repeat为true;现在我们改成false.测试我们可以观看到这样的效果. 

  看上去也是不错的效果. 当然此时它仍会随屏幕的大小发生变,接下来我们看Matirx,flash8中Matrix变换矩阵相对比较复杂.但flash8提供了几种关于matrix的简单方法,比如旋转,缩放,位移等,这里我们示范一下旋转.

  9.再次修改上面的tilebg()函数.加入matrix变换.如下:

function tilebg(){ 
var tile:BitmapData = BitmapData.loadBitmap("pattern1"); 
    var matrix = new flash.geom.Matrix(); 
    matrix.rotate(Math.PI/4); 
    repeat = false; 
    smoothing = true; 
this.beginBitmapFill(tile,matrix,repeat,smoothing); 
this.lineTo(Stage.width, 0); 
this.lineTo(Stage.width, Stage.height); 
this.lineTo(0, Stage.height); 
this.lineTo(0, 0); 
this.endFill(); 

我们在其中加入了一行matrix.rotate(Math.PI/4)即转动45度.
测试效果如下所示:
演示文件

  如果你对matrix的其它方法感兴趣,你可以继续试试看.可以根据你的需要求来进行定制.ok.

时间: 2024-09-18 19:41:05

用Flash的beginBitmapFill平铺背景的相关文章

Android平铺背景图片

Android的图片平铺效果,主要有三种方法:1)系统API: 2)XML配置: 3)自定义绘制 方法1: 系统api实现 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic); //bitmap = Bitmap.createBitmap(100, 20, Config.ARGB_8888); BitmapDrawable drawable = new BitmapDrawable(bitmap

网上找到可以平铺背景,求Android下用法

问题描述 网上看到可以这样做到背景图平铺,但是不知道怎么引用. 只接放到 layout时不能用. <bitmap xmlns:android="http://schemas.android.com/apk/res/android"android:src="@drawable/background_tile" android:tileMode="repeat" /> 解决方案 这个XML文件代表一个BitmapDrawable,因此应该

Flash8平铺网页背景-flash tile image

网页|网页背景 之前写过在flashmx2004中平铺背景的方法,虽然它也是有效果的,但相对使用flash8时还是显得有些复杂.这次介绍的是flash8中的MovieClip的新方法MovieClip.beginBitmapFill()法.使用这种方式来平铺背景会非常的简单.下面开始. 演示文件: 1.    我们需要先准备一张小图.当前我们使用的是一张小的gif图像如下图所示: 如果你想测试可以直接下载些图像来测试. 2.    新建一个flash文档,大小随意,将我们选定的这张图像导入到库中

FLASH MX 2004:平铺底纹

本文译者:egoldy文章性质:原创文章出处:http://www.webstudio.com.cn/tutorial/show.php?id=30 FLASHMX2004 AS 平铺背景 对于网站designer来经常要用到平铺背景,一般习惯上我们用的方法在PS中先将背景平铺好,然后保存成图,导入到FLASH中,这种方式固然可以,但缺点有两个,一个是文件的大小会比较大,另一个问题是当想要变化文件的大小时,背景图片要重新在PS中来做,在导入.现在我们要研究的如何用ActionScript来平铺背

如何用DIV套DIV实现水平居中布局和背景图片平铺

#login { width:100%; height:345px; background-color:#e2e8c4; } #login div { /* background-color:Green; */ height:345px; width:1280px; margin:0 auto; /*水平居中*/ padding-top:0px; background-image:url(images/login/1_08.gif);background-repeat: no-repeat;ba

CSS控制背景图像平铺实现边框阴影效果

一款用CSS控制背景图像平铺,从而实现区域边框阴影的效果,虽然用到了图片,但可贵之处是本代码不管你需要阴影的区域是多大,它都能自动适应,因些还是很值得收藏一下的,兼容所有的IE浏览器.   复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> &

网站设计-网站背景图片平铺的问题

问题描述 网站背景图片平铺的问题 我想用一个宽度为一像素的图片X轴平铺作为网站背景图片,为什么是这个效果.IE和chrome显示两条线,火狐显示一条线,想显示第三张图那样,怎么回事用这个 body{background:url(../images/ecommerce-psdtemplate.png) repeat-x;} 用这个连线都不显示了body{background-image:url(../images/ecommerce-psdtemplate.png) background-repe

css html-html背景图平铺浏览器问题

问题描述 html背景图平铺浏览器问题 拿到ui设计的背景图,直接设置宽高100%,会导致图片变形,各位大牛有什么好的解决方法吗? 解决方案 http://www.itnose.net/detail/6110755.htmlhttp://blog.sina.com.cn/s/blog_a7b8ab2801019lh7.html 解决方案二: http://blog.csdn.net/liuliang841210/article/details/39993541

CSS背景100%平铺 浏览器缩小背景显示不全解决办法

把浏览器的窗口缩小时,拖动滚动条时你会发现原本设定的CSS背景100%平铺的背景少了一块,而且窗口越小时,空白越大. 解决方法: width:100%;min-width:990px; 在width:100%; 后面加个 min-width:**px; 这个长度取于你的网页最低宽度. Ps: 逐风个人认为上诉的解决方案还不够人性化, 想要实现不同分辨率下灵活覆盖,逐风推荐以下处理方式: 1.结合JS,当窗口变化时执行事件进行width的固定值调整: 2.CSS限定最小宽度,当浏览器还有继续往小缩