欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

AS基礎教程整理第10/13頁

 更新時間:2007年03月22日 00:00:00   作者:  

第十一章 一點面向對象編程知識

At is heart, OOP simply means that you treat portions of your program as self-contained, but interrelating modules called objects. 
這是什么呀?我不翻譯了,概念的我們就先不懂吧,對象主要構成包括屬性(properties)和方法(methods)
一個對象通常都以現實世界里的某個東東做藍本
例如我們可以定義一個對象叫球
那么這個球將會有這樣的屬性:半徑、X坐標、Y坐標、顏色
同時,也會用屬于球自己的方法例如:移動球、計算球的面積

當然,我們還可以定義一些相對抽象的對象,例如我們要做的多選題

所有的對象都屬于某類(class),類的意思其實是用于創(chuàng)建對象的模版

一個實例(instance)就是某一個類的特定某一個case(好復雜,概念性的東西我翻不過來啦,反正實例就類創(chuàng)建出來的某一個對象)

還是再舉例吧
*  例如我們有個一個叫Chair的類
*  這個類定義了一個東西需要它有四條腿,一個坐墊
*  然后我們就可以用Chair這個類來定義我們的不同對象(可理解為椅子的款式),每個對象就有它特有的高、寬、材料、重量、顏色,正是這些屬性使每個對象互相區(qū)別。

所有的椅子互相區(qū)別,有自己的屬性,但是他們又有同樣的結構:四條腿、一個坐墊

OK,那AS里面的類和對象呢?
是的,AS里我們可以自己創(chuàng)建對象,也有可以使用的內建對象
內建的類(你可以用它來創(chuàng)建對象)包括:Array, Boolean, Color, Date, MovieClip, Number, Object, Sound, String, XML, XMLSocket 
內建的對象(已經可以直接使用的對象)包括:Arguments, Key, Math, Mouse, Selection 
內建的類、對象當然都是在FLASH里面有自己功能的東西。而正是這些功能非常常用,FLASH才內建了這些類和對象,例如:
Mouse.hide();          // Hide the mouse pointer 將鼠標隱藏,你經常用吧?現在才知道其實是內建的Mouse對象的一個hide()方法吧?

在學習如何創(chuàng)建自己的類和對象之前,先來了解一下內建類和對象是怎樣工作的吧

與數組的結構類似,對象是容器們(containers)的容器(container)
一個對象,用各個獨立的屬性來存放數據,只不過數組區(qū)分每個容器是用數字,而對象則是用屬性名,要調用一個數組里面某個數據,我們需要它是索引值,而要調用對象的屬性,則要知道屬性名
看看以下這個例子,這是個叫BALL的對象“

BALL對象有兩個屬性:radius 和 color
而兩個屬性分別賦值為:50 和 0xFF0000 (這是AS里面表達16進制的方法)

概念清楚了,說一AS里面使用對象要注意的地方
首先,對象的屬性很靈活,它儲存的數據可以是strings(字符串), numbers(數字), booleans(布爾值), null(空), undefined(未定義), functions(函數), arrays(數組), movie clips(電影夾子), or even other objects(甚至是其他的對象,包括自定義的). 
調用屬性,可用點語法:objectName.propertyName
例如我們賦值給BALL里面的屬性radius:
ball.radius = 100; 
我們也可以用符號[]來訪問屬性,但是[]里面的屬性名需用雙引號擴住,同上例:
ball["radius"] = 100; (所以說數組也是對象一種,訪問方法也一樣,并沒有搞特殊化)
與點語法比較,[]更靈活,可以動態(tài)地改變屬性的名字,里面可以是變量或表達式,例如:
var propName = "radius";
ball[propName] = 100; 
這點是點語法無法辦到的

純粹的OOP中,我們幾乎不會直接訪問對象的屬性
我們一般都使用方法(methods) ,來改變屬性
例如改變mySound這個聲音對象的音量屬性
AS的用法應該是mySound.getVolume(100);
而不是mySound.volume=100;
但是為了簡單,多選題這個例子里不一定遵循這個原則,事實上AS里面很多對象都不可以辦到這點,所以有人說AS不是面向對象語言。

關于對象的方法
方法method其實是一些附屬于對象的函數,其作用主要是訪問對象中的數據,或完成某種功能
所以調用方法和調用普通函數類似:objectName.methodName() 只是前面加上了對象的名字
例如上面的BALL對象,我們需要它的面積,使用 getArea 這個方法:
ball.getArea(); 

預習一下,在下一個例子中,雖然MOOCK不打算建立自己的方法,但是將使用內建于MovieClip對象的兩個方法:
*MovieClip.attachMovie()
此方法是將Library(CTRL+L按出來的那個)里面的symbol復制一個instance到場景中
(chocobo:給不懂概念的人緊急補習,放在庫(Library)里面的叫符號(symbol),拉到場景中就叫實例(instance),一個符號可創(chuàng)建多個實例,符號改變則實例隨之改變)
與之類似的是MovieClip.duplicateMovieClip(),但是該方法需要事先在場景里已經有一個實例

*MovieClip.removeMovieClip()
此方法與上面相反,是刪除場景里面的instance的

大家看到了,在下一例中,我們將使用MovieClip這個內建對象,因為它就可以滿足我們的需要,不必新類型的對象了
我們先來熟悉一下MC這種對象

它有很多屬性_height(高度)、 _alpha (透明度),MC的屬性大家可以在AS字典里面查到,在AS面板里這寫屬性也是變色顯示的
同時MC的方法,例如 MC.play(); 等也可以查到
當我們在MC里面的時間線使用這些屬性、方法的時候,可以省略不寫前面部分,直接寫play(); 
MC可以互相嵌套,MC當中又有MC,就出現類似: mc1.mc2.play(); 的情況
為了調用包含自己的上一級MC的方法、屬性,AS里面用_parent,例如:
在mc1包含mc2 ,在mc2中想使mc1播放:_parent.play(); 
還有另一個保留字:_root指代該電影的主時間線
例如想在某個mc里面讓整個電影播放:_root.play(); 
想在某個MC中讓另一mc1播放:_root.mc1.play();

還有,MC中定義的變量,將作為MC的一個屬性可被訪問
在mc1里面寫了一句 var a=1;
我們將可使用 mc1.var來調用它


關于類(class)
這個概念大家還是不大懂吧?類就是定義一個對象將擁有什么的方法跟屬性的東東,類似MC里instance與symbol的關系,instance的結構就是由symbol決定的,每個instance又可以不一樣
AS里面沒有專門定義類的例如class這樣的關鍵字,我們使用函數來定義類,這種函數稱構造函數constructor function,函數的作用就是產生我們定義好的類的實例(就是對象)
舉例最實在:
// make a Ball constructor 最簡單的構造函數
function Ball () {
  // do nothing 里面是空的

現在我們可以定義新類型Ball的對象了
myBall = new Ball(); 
語法就是前面是新對象實例名,等號后是new加構造函數名
myBall就擁有了Ball定義的一切結構了(雖然Ball里面是空的,嘻嘻)

不過不是所有對象創(chuàng)建都用new,例如mc創(chuàng)建就用的是attachMovie()或duplicateMovieClip()

好了,我們的構造函數總不能空的,如何定義類,讓新對象有自己的屬性呢?
使用this這個關鍵字,看例子,新的構造函數:
function Ball () {
  this.radius = 10;
  this.color = 0xFF0000;
  this.xPosition = 35;
  this.yPosition = -4;

以后我們定義出來的新對象,都擁有半徑,顏色、XY坐標屬性啦
慢著,怎么每個新對象都一模一樣啊?
再改,用函數的參數來定義動態(tài)的屬性:
// Make the Ball constructor accept
// property values as arguments.
function Ball (radius, color, xPosition, yPosition) {
  this.radius = radius;
  this.color = color;
  this.xPosition = xPosition;
  this.yPosition = yPosition;

我們可以定義不同屬性的對象了
myBall = new Ball(6, 0x00FF00, 145, 200);

本教程關于還有創(chuàng)建方法以及如何在類之間繼承方法和屬性沒講,
無論如何,OOP都不可能在這么短時間之內說清楚,
但這不妨礙我們做下一個例子了。

相關文章

最新評論