Making Things Move 第四章

创建日期:2008年5月17日 来自:蓝色理想 浏览:910次 作者:匿名

使用 clear 删除绘制

clear 是所有方法中最简单的,它可以用来删除在影片中所绘制的直线,曲线或填充色。请注意,这个命令中对其它 graphics 绘制的图像不起作用。换句话讲,如果在编辑环境下绘制了一个图形,再对其使用 clear() 命令,结果是无效的。

在绘图中,使用 clear 方法会有些意想不到的效果。在绘图 API 中,如果绘制的影片剪辑越多,运行速度就越慢。对于有很多绘制图形的影片来说,速度不会立刻慢下了,而是随着每个图形所占用的绘制时间会越来越长,从而逐渐地变慢。就算新的图形完全覆盖住了所有旧图形,旧图形的矢量信息也仍然存在并且每次都会被重绘,只有使用 clear 函数才可以完全删除之前旧图形的矢量信息。

使用 lineStyle 设置线条样式

使用 lineStyle(width,color,alpha)方法,作用是为以后使用的绘图线条设置线条样式,该命令对于前面使用的绘图线条不会产生影响。实际上,除了清除或覆盖之外,没有方法可以影响或改变已经绘制的线条或填充。

前面列出的这些参数将来会经常使用,还有一些额外的可选参数如像素提示(pixel),缩放模式(scale mode),端点(caps),拐角类型(joints)和切断尖角(mitres)。如果大家需要更多的设置,也许会用到它们,但是大多数情况下,只会用到下面这些参数。对于它们无需做太多解释,只是来复习一下:

  • width:线条的宽度以像素为单位。只能使用0或正整数。虽然可以使用十进制浮点数,但会被取整为最接近的正整数。如果输入的是0或负数, Flash 将绘制1像素宽的线。这与在 Flash IDE 中在属性面板中选择“细线”的功能相同。
  • color:线条的颜色。使用十进制或十六进制的24位色彩值表示。
  • alpha:线条的透明度。使用0.0到1.0数字之间的数表示透明度的比例。值为1.0表示完全不透明,值为0.0表示完全透明或不可见。注意,这与 AS 2 中使用 0到100 表示法是不同的。

由于这些参数是可选的,可以只使用 lineStyle(1) 来设置一条1像素宽的黑色线条。其实第一个参数也是可选的,如果不填 widh 参数,只使用 lineStyle() 的话,那么线条就被清除,只获得了一条不可见的线,相当于使用绘图指令时没有设置线条样式(lineStyle)。另一个容易出错的地方是,在使用 clear 方法时,不仅清除了当前绘制的图形而且也清除了当前使用的线条样式。如果在影片绘图时设置了一个普通的线条样式,而后又将线条清除,那么在绘制其它图形之前还需要重新设置线条样式。否则的话,接下来绘制的线条就是不可见的,调用 clear 方法同时还会将绘图指针位置归为0,0。

使用 lineTo 和 moveTo 绘制直线

在一种绘图语言中会有多种方法用来绘制直线。一种是使用画线指令,需要有一个起点和一个终点,并在这两点之间画一条直线。另一种是使用 lineTo 指令,只需要一个终点。那么 ActionScript 是怎样工作的呢,如果向某一点画线,哪里才是起点呢?如果之前没有进行过画线,那么起点就是0,0点,可以这样写:lineTo(100, 100);

结果将会看到一条从左上角(0,0)画到100,100像素位置的线(假设已经设置了线条样式)。在绘制完最少一条线后,这条线的终点位置就会成为下一条线的起点位置。不过,我们还可以使用 moveTo 方法为下一条线指定一个新的起点位置。

可以把绘图 API 想像成一个拿着笔和纸的机器人,开始的时候,笔处在0,0点。当我们告诉它向某点画一条线时,它就将笔在纸上划过,并向这个位置移动。 moveTo 方法就像在说“ok,现在抬起笔,放到下一个点上。”虽然仅使用 moveTo 指令不会产生一个新的图形,但是它会影响下一次绘图时的位置。通常使用 moveTo 作为第一条绘图指令,用于将绘图 API 的“笔”移动到起点位置。现在大家已经拥有了足够的知识可以来实践一下了,让我们创建一个简单的绘图应用程序,这个程序是完全依赖绘图 API 完成的。这里是文档类:

package {
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 public class DrawingApp extends Sprite {
  public function DrawingApp() {
   init();
  }
  private function init():void {
   graphics.lineStyle(1);
   stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
   stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
  }
  private function onMouseDown(event:MouseEvent):void {
   graphics.moveTo(mouseX, mouseY);
   stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
  }
  private function onMouseUp(event:MouseEvent):void {
   stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
  }
  private function onMouseMove(event:MouseEvent):void {
   graphics.lineTo(mouseX, mouseY);
  }
 }
}

首先,导入 MouseEvent 类,因为这里的每件事都要用到鼠标事件。在 init 方法中,线条样式设置为 1 像素黑色线,并增加 mouseDown 和 mouseUp 作为事件侦听器。

然后是 onMouseDown 方法,每当用户按下鼠标是都会调用它,这意味着用户要开始在当前鼠标位置画线了。这个函数通过使用 moveTo 方法将那支虚拟的笔放置在当前鼠标的位置,以鼠标坐标为参数,随后为 mouseMove 添加了一个侦听器。
每当用户移动鼠标时,都会调用 onMouseMove 方法,向当前鼠标的位置画一条线。
最后是 onMouseUp 方法,用于删除 mouseMove 侦听器使其不再进行画线。
好的,现在已经制作好了一个短小精悍的绘图程序。我们不需要再费太大的力气就可以为这个程序加入一些简单的控制,让它具有完整绘图程序的功能。只需要为线条颜色(color)和线条宽度(width)创建一些变量,再创建一些按钮什么的用来改变它们,并重新调用 lineStyle 方法使用这些新的值。对了,还可以再放一个按钮用于调用 clear 方法。把这个留做是一个练习,希望大家有兴趣的话,能够自行完成。

  首页   上一页   1   2   3   4   5   6   7   8   9   下一页   尾页 

责编:yezi
相关搜索: Making   Things   Move   第四章  
Google
嗷嗷毙技术网版权申明:大家可以自由转载我站点的文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来链接,自行链接)。文章版权归作者所有。
特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。
子栏目
搜索 
Google