| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
Blog站点如何用RS
如何查看BLOG网站
Geesee广告计划详
无限网络提供50M 
苏能科技100M/FTP
悠博科技50M/FTP/
华云网络30M/FTP/
ASP+FLASH+ACCESS
使用 Flash Remot
ProgressBar+Load

《 Essential ActionScript 2.0 》中文精华版 第 13 期           

《 Essential ActionScript 2.0 》中文精华版 第 13 期

作者:佚名 来源:闪吧 作者: tigerkin 更新:2007-1-13 20:46:33 错误报告 我要投稿

说明:周日休息,停发一期。大家也整理一下两周以来所学知识,温故知新嘛!
大家可以到置顶索引贴中下载最新译文!

4.6 Completing the Box Class (完整的Box类)

通过本章我们学习了Box类的例子。在现实世界中,我们的Box类可能是纯概念上的(即,永远不显示在屏幕上)也可能是一种直观表示。由于大多数Flash应用程序都是可见的,因此我们将总结本章,来看一看如何使一个Box实例显示在屏幕上。

并非所有的Flash应用程序都以同一种方式在屏幕上显示内容。每个应用程序必须决定如何绘制屏幕、何时绘制、以及哪个类或者哪些类包含绘制代码。当设计一个应用程序系统时,主要应考虑以下几个问题:

? 首先决定显示的元素是否是自己渲染(render themselves)或是通过一个中心类渲染(be rendered by a central class)。例如,是为Box类提供一个自己的drawBox( )方法,还是在其他的某个类中有一个drawBoxes( )drawScreen( )方法?

? 决定时隔多久更新一次显示的元素——或者当某些事件放生时(例如一次鼠标点击)或者反复刷新(于Flash Player的帧速一致)。

? 决定渲染技术(rendering technique)。Flash影片中的每个可见元素必须显示在一个影片剪辑中。然而,影片剪辑可以在创作时手工放置或者在运行时使用ActionScript添加到舞台上。一个影片剪辑的内容同样可以使用MovieClip绘图API勾勒出来。

? 决定屏幕刷新策略。将每个可见元素作为一个单独表示的影片剪辑(有规律地更新)来维护,或者在显示更新时将舞台上的全部内容统统清除、然后从新创建?

在我们的例子中,由Box类来负责其屏幕显示。当创建一个Box实例时,我们将添加一个空的影片剪辑(命名为container_mc),在那上面来绘制我们的Box实例。如果Box实例调整尺寸,我们将重新绘制container_mc中的内容。为了移动Box实例,我们将移动container_mc,而不是在container_mc中移动Box实例。这是我们免于重新绘制container_mc中的内容。

我们的Box显示策略是唯一的运行时策略(runtime-only strategy)。在Flash Player中出现的每个Box实例,在编辑一个.fla文件时都不能被放置到舞台上。在第十三章,我们将看到如何创建一个可见的类,在运行时以及在Flash创作工具中都可以将实例放置到舞台上。

例如4-6 给出了一个Box类的最终的、完全的、包括屏幕显示代码的样子,请注意以下几点:

? widthheight属性(不是伪属性)

? 存取器getWidth( )getHeight( ) 方法(不是gettersetter方法)

以下内容对于这个版本的Box类而言是完全陌生的:

? container_mc属性,存储一个用于绘制Box图形的影片剪辑的引用

? 存取器方法getX( ), setX( ), getY( ), setY( ),用于取得并设置container_mc影片剪辑的位置

? draw( )方法,用于在container_mc影片剪辑中绘制Box图形

最后,以下内容在这个版本的Box类中已经被改变:

? 构造函数使用了额外的参数,如下:xy指定container_mc的初始水平和垂直位置;target指定container_mc影片剪辑添加到哪个影片剪辑中去;depth指定添加的深度。

? 在设置Box实例的高度和宽度后,setHeight( )setWidth( )方法调用draw( )。(注意,存取器方法的灵活度为我们提供了:我们改变我们的类如何工作,而无须改变如何去使用它)。

详细的注释将帮助我们学习代码。

4-6 一个具有完整绘图程序的Box

class Box {
// Box 的尺寸
private var width:Number;
private var height:Number;
// 用于包含Box实例直观表示的影片剪辑
private var container_mc:MovieClip;
//
// 构造函数
//
public function Box(w:Number, h:Number, x:Number, y:Number, target:MovieClip, depth:Number) {
// 创建用于保存Box可视实例的容器
container_mc = target.createEmptyMovieClip("boxcontainer" + depth, depth);
// 初始化尺寸
setWidth(w);
setHeight(h);
// 初始化位置
setX(x);
setY(y);
}
// 得到 width
public function getWidth():Number {
return width;
}
// 为 width 赋值
// 这个版本不但为 width 赋新值,而且根据新的 width 值重新绘制 Box 实例
public function setWidth(w:Number):Void {
width = w;
draw();
}
// 得到 height
public function getHeight():Number {
return height;
}
// 为 height 赋值
// 这个版本不但为 height 赋新值,而且根据新的 height 值重新绘制 Box 实例
public function setHeight(h:Number):Void {
height = h;
draw();
}
// 得到 x
// 为了方便,x 和 y 坐标直接存储影片剪辑容器的坐标。
// 如果关注数字的准确度,我们应该将 x 保存为一个独立的Box属性,
// 以便它不会被MovieClip类四舍五入。
public function getX():Number {
return container_mc._x;
}
// 为 x 赋值
public function setX(x:Number):Void {
container_mc._x = x;
}
// 得到 y
public function getY():Number {
return container_mc._y;
}
// 为 y 赋值
public function setY(y:Number):Void {
container_mc._y = y;
}
// 在屏幕上显示 Box 实例。使用 MovieClip 绘图方法在 container_mc 中画线。
public function draw():Void {
// 清除前一个Box
container_mc.clear();
// 使用 1-point 的黑线
container_mc.lineStyle(1, 0x000000);
// 定位画笔
container_mc.moveTo(0, 0);
// 开始白色填充
container_mc.beginFill(0x0000FF, 50);
// 绘制 Box 的边界
container_mc.lineTo(width, 0);
container_mc.lineTo(width, height);
container_mc.lineTo(0, height);
container_mc.lineTo(0, 0);
// 正式停止填充
container_mc.endFill();
}
}
以下代码展示了如何将Box类用于一个Flash文件(.fla)时间线的一帧上:

// 创建一个250*260像素的Box实例,
// 并放置到当前影片剪辑(100, 110)坐标点上,深度为1
var b:Box = new Box(250, 260, 100, 110, this, 1);
在Box实例被创建后,我们可以调整起位置和尺寸,如下所示:
b.setX(400);
b.setY(400);
b.setWidth(10);
b.setHeight(20);

trace(b.getX( )); // 显示: 400
trace(b.getY( )); // 显示: 400
trace(b.getWidth( )); // 显示: 10
trace(b.getHeight( )); // 显示: 20
4.7 Putting Theory into Practice
(理论与实践相结合)

代码,就像艺术一样,是永远不会真正完成的。你应该探索你的思想,即使是本章讨论的一个简单的Box类也是如此。你能为它添加自由放置每个Box实例到舞台上的代码吗?或者改变Box实例的颜色?旋转一个Box实例或者延直线运动的动画又该怎么写?试着为每个Box实例添加文本域显示其宽度和高度以及面积。你甚至可以让文本域接受用户输入来改变Box的尺寸。
在下一章你将看到如何添加这些特色,我们将研究ImageViewer类。本章涉及了大量的理论基础,因此如果你有些吃不消,不要着急。下一章将涉及具体的实现,以帮助你运用你所学到的知识。再见!
文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。