中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術文檔 > 多媒體制作 > Making Things Move 第四章
FLASH小游戲開發(fā) 第二節(jié) 回到列表 Making Things Move 第三章
 Making Things Move 第四章

作者:alan98 時間: 2008-05-15 文檔類型:翻譯 來自:藍色理想

第 1 頁 渲染技術 [1]
第 2 頁 渲染技術 [2]
第 3 頁 渲染技術 [3]
第 4 頁 渲染技術 [4]
第 5 頁 渲染技術 [5]
第 6 頁 渲染技術 [6]
第 7 頁 渲染技術 [7]
第 8 頁 渲染技術 [8]
第 9 頁 渲染技術 [9]

使用 beingGradientFill 創(chuàng)建漸變填充

下面開始學習繪圖 API 的強大函數:beginGradientFill(fillType, colors, alpha, ratios, matrix)。與線條樣式相同,這個方法也有很多額外的可選參數——擴散方法(spreadMethod),插補方法(interpolationMethod)及焦點位置比例(focalPointRatio)。這些參數可用來調整漸變的屬性,但是在大多數簡單的應用中這些參數不是必需的,而這個方法與 beginFill 有很多相似之處,同樣也使用 endFill 作為結束。兩者最大的不同是填充的顏色,我雖不想說 beginGradientFill 是用來創(chuàng)建漸變填充的,但是,如果不這么說,又感覺少了點什么。漸變填充至少要有兩種顏色,圖形的第一部分從第一種顏色開始,然后逐漸混合成為另一種顏色,或者混合成一個或多個已定義的顏色。

指定填充類型

我們可以建立兩種類型的漸變填充:線性(linear)和放射(radial)狀。在線性填充時,漸變的顏色沿著直線從一點到另一點。默認的情況,是從左向右的一條直線,也可以是從上到下或其它角度的直線。圖4-5是一些線性漸變的例子。


圖4-5 線性填充

為了能夠看到線性漸變,需要至少兩種不同的顏色。如果指定了兩種顏色,那么填充將會從第一種顏色向第二種顏色漸變。如果指定了更多的顏色,填充色將會從第一種顏色漸變?yōu)榈诙N,然后再漸變到第三種……直到最后一種。

放射狀填充與線性填充使用的參數大致相同,只是在解釋上有所不同。從指定的中心位置開始創(chuàng)建漸變,以這點為基礎向外進行放射,形成一個圓或橢圓。我們指定的第一種顏色用做內圓,最后一種顏色作為外圓,唯一不需要的就是角度。圖4-6是一個放射狀填充。
對于 beginGradientFill(fillType, colors, alphas, ratios, matrix) 方法,第一個參數為填充類型,非常簡單,用一個字符串表示,這兩個值中的一個:”linear”或”radial”。與第三章講的事件類型很像,目前事件類型也被設置為 flash.display.GradientType 類的靜態(tài)屬性,為的是避免錯誤輸入。我們可以導入 GradientType 類然后輸入 GradientType.LINEAR 或 GradientType.RADIAL。


圖4-6 放射狀填充

設置 colors , alphas 及 ratios

使用 colors 參數設置顏色,當然也必需設置每一個顏色所要填充的位置,使用0到255中的一個數進行指定,0表示填充的開始位置,255表示填充結束位置。在這些數值中,每一個數代表一個顏色的位置,這就是填充的比例。因此,如果有要填充兩種顏色,那么應該指定0和255作為 ratios,如果有三個顏色值,那么應該寫成 0,128,255。這樣就將第二個顏色放到了另外兩個顏色的中間。如果比例值為 0,20,255,那么第一種顏色會很快漸變?yōu)榈诙N顏色,然后非常緩慢地漸變?yōu)榈谌N顏色。請記住這些數值不是像素值,而是指在 255 中的某一個部分。

我們同樣必須指定漸變色的透明度,這就是 alpha 值,從 0.0 到 1.0,而在 AS 2 中表示為0到100。如果不需要透明度,那么就設置為 1.0。如果設置的透明度是從1.0到0.0,那么漸變的過程不僅是改變顏色,而且還有平滑淡出的效果?梢杂米鰟(chuàng)建柔和的陰影(也許比使用投影濾鏡(drop shadow filter)還要好些)。
這里每一個參數都是一個數組,因為需要傳入至少兩個以上的 colors,alphas 及 ratios。我們可以先創(chuàng)建一個數組,然后寫入每一個參數的值,如下:

var colors:Array = new Array();
colors[0] = 0xffffff;
colors[1] = 0x000000;

下面是一個更簡單作法,我們可以在創(chuàng)建數組的同時,為數組的每個元素賦值,直接寫在方括號中,以逗號作為分隔:
var colors:Array = [0xffffff, 0x000000];
事實上,我們甚至可以不去使用 colors 變量。直接把右邊的數組寫入 beginGradientFill 表達式中作為參數。因此,可以寫成這樣:

graphics.beginGradientFill(GradientType.LINEAR,
[0xffffff, 0x000000],
[1, 1],
[0, 255],
matrix);

這里定義了兩個顏色值,兩個 alpha 值(均為 100%)和比例值的開始位置與結束位置,所以漸變將以白色為開始最后逐漸變化為黑色。當然,也可以為每個參數設置一個對應的變量,如果定義了很多個顏色值的話,這樣寫會更清楚些。如果定義了三個顏色值,就必需有三個 alpha 值和三個比例值與之對應。如果有某些值多了或少了,那么就會引起會靜默失敗——沒有漸變,沒有填充,沒有錯誤信息。
下面只需要設置一下填充的起點、終點或角度了。也許大家已經猜到了,這就是神秘的matrix(矩陣) 參數。

創(chuàng)建矩陣

矩陣(Matrix)就是一個二維表格,每行每列中包括不同的數,可以出計算不同的值。矩陣此外還用于繪圖(graphics)中,用作旋轉,縮放和移動物體。在這里,用于對漸變的控制,我們需要為填充進行定位,設置它的大小,或是進行旋轉。使用 matrix 時,需要創(chuàng)建一個 matix 對象,這是一個 flash.geom.Matrix 類的對象。(實際上, Matrix 類不僅用于操作漸變填充,但這里我們只介紹它在漸變中的應用。第18章中介紹了更多的矩陣使用)。

在使用 Matrix 類時有一點復雜,這里有一個特殊的方法用于創(chuàng)建漸變填充的矩陣類型,這個方法名為 createGradientBox,必要參數為 width 和 height,可選參數為 rotation 及漸變的起點的 x,y 位置。首先創(chuàng)建一個 Matrix 類的實例,然后調用它的 createGradientBox 方法自動設置內部參數值。形式如下:
var matrix:Matrix = new Matrix();
matrix.createGradientBox(width, height, rotation, x, y);
不要忘記在類的開始處導入 flash.geom.Matrix 類。如果僅指定 width 和 height,最后三個值默認為 0。來看一下代碼,這里是文檔類 GradientFill.as:

package {
 import flash.display.GradientType;
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 import flash.geom.Matrix;
 public class GradientFill extends Sprite {
  public function GradientFill() {
   init();
  }
  private function init():void {
   graphics.lineStyle(1);
   var colors:Array = [0xffffff, 0xff0000];
   var alphas:Array = [1, 1];
   var ratios:Array = [0, 255];
   var matrix:Matrix = new Matrix();
   matrix.createGradientBox(100, 100, 0, 0, 0);
   graphics.beginGradientFill(GradientType.LINEAR, colors,
   alphas, ratios, matrix);
   graphics.drawRect(0, 0, 100, 100);
   graphics.endFill();
  }
 }
}

測試影片后,會看到一個從白色到紅色漸變的正方形。現在,我們改變一下繪圖代碼,在不同的地方繪制這個正方形(見 GradientFill2.as):

graphics.drawRect(100, 100, 100, 100);

現在這個正方形為全紅色,為什么會這樣?漸變在 x 為0處開始,但它只有100像素寬,而正方形是從100像素開始的,漸變色已經到達了全紅色,紅色從這里開始已經出界了。因此,如果想讓矩陣的 x,y 在正方形的左上角開始,應該這樣寫:

matrix.createGradientBox(100, 100, 0, 100, 100);

這樣, x,y 坐標就與正方形的起點相同。請使用同樣的正方形,通過改變矩陣和漸變填充觀察創(chuàng)建的填充是什么效果。首先,試一下三種顏色:

var colors:Array = [0xffffff, 0x0000ff, 0xff0000];
var alphas:Array = [1, 1, 1];
var ratios:Array = [0, 128, 255];

不要忘記改變 alphas 和 ratios ,將中間的比例移動一下看看對漸變色的影響。試用 64 或 220 代替 120。
下面是一個直接 alpha 變化的例子,使用相同的顏色,只改變 alpha 的值:

var colors:Array = [0x000000, 0x000000];
var alphas:Array = [1, 0];
var ratios:Array = [0, 255];

試著改變一下角度,下面是 45度角:
matrix.createGradientBox(100, 100, Math.PI / 4, 100, 100);
使用 Math.PI/2 旋轉90度形成一個垂直填充。 - Math.PI/2 形成向上填充,而 Math.PI 左是從右向左填充,默認為從左向右填充。
beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix);
現在,將這些應用在線性填充(linear)的技巧改為放射狀填充(radial)的版本。

顏色轉換

下面一個渲染工廠是 flash.geom.ColorTransform 類及其方法。與繪圖 API 不同,該類不允許創(chuàng)建圖形,僅僅用于改變已存在于影片或顯示對象實例中圖形的顏色。讓我們去看看它是怎樣工作的。

使用 ColorTransform 類改變顏色

在 ActionScript 2 中,操作影片剪輯顏色最常用的方法是 Color 類,擁有像 setRGB 和 setTransform 這樣的方法。Flash 8 中就引用了 ColorTransform 類,同時 Color 類就不再被推薦使用,但是想大多數人仍然繼續(xù)使用 Color 類,因為這已經成為習慣了。Color 類已經不是 AS 3 的一部分了,現在是學習新方法的最佳時機。ColorTransform 的方法與 Color 類的方法本質上是非常像,兩者差不太多,只是語法上略有不同。

首先,要知道 Sprite 影片,影片剪輯,或其它任何顯示對象都有一個屬性叫作 transform。這是 flash.geom.Transform 類的一個實例,其中包括一些不同的屬性用于縮放,旋轉,定位和改變影片顏色,影響顏色屬性的就是 colorTransform。要知道這是一個顯示對象屬性的屬性,訪問方法如下;
mySprite.transform.colorTransform
或使用一個繼承自 Sprite 的類,可以直接獲得類自身的 transform 屬性:
transform.colorTransform

通過為一個 ColorTransform 對象的顏色屬性賦值可以改變一個對象的色彩。你也許會問,什么是 ColorTransform 對象?如果大家使用過 AS 2 的 Color 方法:setTransform,就知道我們需要傳入一個 object(對象) ,在這個 object 中有各種屬性,需要告訴它如何變換顏色。 ColorTransform 與這個方法非常相似,但不是使用一個普通的對象(object),而現在這個方法已經擁有了官方的類。在 AS 2 中,是這樣做的:

myTransform = new Object();
myTransform.ra = 50;
myTransform.ga = 40;
myTransform.ba = 12;
myTransform.aa = 40;
myTransform.rb = 244;
myTransform.gb = 112;
myTransform.bb = 90;
myTransform.ab = 70;

在 AS 3 中,應該創(chuàng)建一個同樣的 ColorTransform 對象,像這樣:

myTransform = new ColorTransform(0.5, 0.4, 0.12, 0.4, 244, 112, 90, 70);

前四個值為乘數,后四個值為偏移量,馬上會介紹這個公式,然后就會知道為什么它們這樣命名了。大家也許注意到了乘數的比例值為十進制范圍 -1.0到1.0,而不是 -100到100。事實上,幫助文檔說是從0.0到1.0,但還可以使用負數做為乘數實現一些有趣的效果(稍后會看到),偏移量依然是從-255到255。ColorTransform 對象的構造函數如下:

ColorTransform(redMultiplier,
greenMultiplier,
blueMultiplier,
alphaMultiplier,
redOffset,
greenOffset,
blueOffset,
alphaOffset)

轉換一個特殊顏色通道的公式如下,以紅色通道為例:

newRed = oldRed * redMultiplier + redOffset;

在使用 ColorTransform 時,記得它是 flash.geom 包中的一部分,所以需要導入類。

給大家一個例子,下一個文檔類:TransformColor.as,在 SWF 中嵌入一張圖片作為位圖(位圖類的實例)。因為位圖類是一個顯示對象,擁有 transform 屬性,代碼設置了位圖的 transform 的 colorTransform 屬性,使用構思好的設置來制作一張底片效果的圖像:

package {
 import flash.display.Bitmap;
 import flash.display.Sprite;
 import flash.geom.ColorTransform;
 public class TransformColor extends Sprite {
  [Embed(source="picture.jpg")];
  public var Picture:Class;
  public function TransformColor() {
   init();
  }
  private function init():void {
   var pic:Bitmap=new Picture    ;
   addChild(pic);
   pic.transform.colorTransform=new ColorTransform(-1,-1,1,1,

   255,255,255,0);
  }
 }
}

測試這個影片時,請改變這行代碼
[Embed(source="picture.jpg")]
請匹配這個路徑為所使用圖片的路徑,如果在 Flash IDE 中編輯,只需要在庫中導入這張圖片,為 ActionScript 導出,并輸入類名為 Picture。重要的一句是 ColorTransform 的設置。

出處:藍色理想
責任編輯:bluehearts

上一頁 渲染技術 [6] 下一頁 渲染技術 [8]

◎進入論壇RIA設計與應用版塊參加討論

相關文章 更多相關鏈接
FLASH小游戲開發(fā) 第二節(jié)
用photoshop制作文字波動動畫
制作旗幟飄揚動畫
Making Things Move 第三章
Silverlight制作逐幀動畫
作者文章
Making Things Move 第三章
Making Things Move 第二章
Making Things Move 第一章
貪吃蛇游戲代碼翻譯
關鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設計比賽 網頁制作 web標準 用戶體驗 UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點最新 站點最新列表
周大福“敬•自然”設計大賽開啟
國際體驗設計大會7月將在京舉行
中國國防科技信息中心標志征集
云計算如何讓安全問題可控
云計算是多數企業(yè)唯一擁抱互聯網的機會
阿里行云
云手機年終巨獻,送禮標配299起
阿里巴巴CTO王堅的"云和互聯網觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機主題設計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標
數據同步算法研究
用ps作簡單的作品展示頁面
CSS定位機制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:7/91個記錄/頁 轉到 頁 共9個記錄

藍色理想版權申明:除部分特別聲明不要轉載,或者授權我站獨家播發(fā)的文章外,大家可以自由轉載我站點的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權歸我站和作者共有。

轉載要求:轉載之圖片、文件,鏈接請不要盜鏈到本站,且不準打上各自站點的水印,亦不能抹去我站點水印。

特別注意:本站所提供的攝影照片,插畫,設計作品,如需使用,請與原作者聯系,版權歸原作者所有,文章若有侵犯作者版權,請與我們聯系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內容無關的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網上道德,遵守中華人民共和國的各項有關法律法規(guī)
·承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
·本站評論管理人員有權保留或刪除其管轄評論中的任意內容
·您在本站發(fā)表的作品,本站有權在網站內轉載或引用
·參與本評論即表明您已經閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內容
網站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網站UI 設計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設計》
犀利開發(fā)—jQuery內核詳解與實踐
作品集 更多內容

雜⑦雜⑧ Gold NORMANA V2