您的位置:首页 > 其它

flash绘图API:绘制一条虚线

2011-12-18 17:31 405 查看
绘制虚线方法有很多种,这几天看到一个另外一种方法,现在尝试一下来***。过去绘制的方法都是采用间隔的方法来***,现在利用一个小技巧可以通过位图来绘制。方法如下:

我们首先创建一个位图。然后进行填充。注意,填充的时候,并不是完全填充完的。其中的技巧就是在这里了。

var bmpData:BitmapData=new BitmapData(10,1,true,0x0);

bmpData.fillRect(new Rectangle(0,0,5,1),0xFF0000000);

位图的宽是10个像素,设置透明,而填充的时候,只是填充一半 。这样你看到的位图,其实有一半是填充了黑色,一半是没有被填充的。这样你看起来这个线就像被隔开一样,利用这种错觉来绘制一条虚线。效果也是非常好玩。

绘图Graphic 类里面有一个方法,是可以指定位图笔刷的:

lineBitmapStyle(bitmap:BitmapData, matrix:Matrix = null, repeat:Boolean = true, smooth:Boolean = false):void
指定一个位图,用于绘制线条时的线条笔触。

有了这个方法之后,下面的事情就变得乐趣多了。

import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.display.Sprite;

var bmpData:BitmapData=new BitmapData(10,1,true,0x0);
bmpData.fillRect(new Rectangle(0,0,5,1),0xFF0000000);

var pen:Sprite=new Sprite();
addChild(pen);
pen.x=200;
pen.y=100;

pen.graphics.lineStyle(1);
pen.graphics.lineBitmapStyle(bmpData);//指定位图做笔刷
pen.graphics.moveTo(0,0);
pen.graphics.lineTo(200,0);



绘制一条虚线,并不能让我们觉得满足,因为利用这个位图其实可以***其他的事情。

(2)结合动画的形式,让线条动起来
使用一种比较有趣的技巧,通过复制像素和移动位图结合产生了虚线滚动视角效果。
这个过程,利用位图scroll 方法,让图片进行一个像素移动,一边移动,一边进行复制,循环起来,产生视角错觉。这样虚线就想滚动一样了

import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.Bitmap;

var bmpData:BitmapData=new BitmapData(10,1,true,0x0);
bmpData.fillRect(new Rectangle(0,0,5,1),0xFF0000000);

var pen:Sprite=new Sprite();
addChild(pen);
pen.x=200;
pen.y=100;

pen.graphics.lineStyle(1);
pen.graphics.lineBitmapStyle(bmpData);
pen.graphics.moveTo(0,0);
pen.graphics.lineTo(200,0);
 

var timer:Timer = new Timer(200);
timer.addEventListener(TimerEvent.TIMER,onTimer);
timer.start();
function onTimer(event:TimerEvent):void
{
	
	var color:uint= bmpData.getPixel32(9,0);
	bmpData.scroll(1, 0);
	bmpData.setPixel32(0, 0, color);

}//利用位图移动的时候,一边复制像素一边移动


import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.Bitmap;
import flash.geom.Matrix;

var bmpData:BitmapData=new BitmapData(10,1,true,0x0);
bmpData.fillRect(new Rectangle(0,0,5,1),0xFF0000000);

var pen:Sprite=new Sprite();
addChild(pen);
pen.x=200;
pen.y=100;

pen.graphics.lineStyle(10);
pen.graphics.lineBitmapStyle(bmpData,new Matrix(0,-1,1));
pen.graphics.moveTo(0,0);
pen.graphics.lineTo(200,0);
 

var timer:Timer = new Timer(100);
timer.addEventListener(TimerEvent.TIMER,onTimer);
timer.start();
function onTimer(event:TimerEvent):void
{
	
	var color:uint= bmpData.getPixel32(9,0);
	bmpData.scroll(1, 0);
	bmpData.setPixel32(0, 0, color);

}//利用位图移动的时候,一边复制像素一边移动



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: