flash绘图API:绘制一条虚线

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

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

         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);

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


   





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值