Giáo trình Script và kĩ thuật hoạt hình (Phần 2)
ActionScript là một ngôn ngữ lập trình hướng đối tượng được dùng để phát triển
các ứng dụng nhờ vào Adobe Flash Player và Adobe AIR. Ngôn ngữ lập trình
ActionScript có thể được biên dịch bởi:
- Adobe Flex Builder.
- Adobe Flash Professional.
- Command Line nhờ vào bộ SDK.
Cũng tương tự như Java, sau khi được biên dịch, các ActionScript sẽ được chuyển
thành dạng bytecode mà chỉ có máy ảo ActionScript (AVM) mới hiểu được. Máy
ảo ActionScript n{y được tích hợp bên trong Flash Player, Flash Plugin và Adobe
AIR.
Ngôn ngữ lập trình ActionScript (AS) là ngôn ngữ có cú pháp kết hợp của cả Java
và Delphi (cú pháp và từ khóa giống Java, cách khai báo giống Delphi). Nếu bạn đ~
từng làm quen với ngôn ngữ lập trình Java, thì khi làm quen với ngôn ngữ lập
trình ActionScript, bạn sẽ cảm thấy đơn giản hơn rất nhiều. Các toán tử, các câu
lệnh tương tự như Java. Một điều đặc biệt, đó l{ lớp của ActionScript có cú pháp
khai báo và cách sử dụng rất giống với Java. Dường như Adobe đ~ thiết kế nên
ngôn ngữ ActionScript theo chuẩn của Java để tạo nên sự đơn giản và quen thuộc
với đa số người dùng.
Bạn cũng cần lưu ý rằng, chúng ta đang thảo luận về phiên bản 3.0 của AS. Đ}y l{
phiên bản mới nhất cho đến thời điểm này. AS là ngôn ngữ hướng đối tượng như
Delphi (hay C++), nghĩa l{ không tuyệt giao với lập trình hướng thủ tục (bằng
chứng là ta có thể viết hàm bên ngoài lớp). AS là ngôn ngữ phân biệt chữ hoa và
chữ thường.
Một ví dụ kinh điển khi học một ngôn ngữ lập trình đó l{ ví dụ “Hello, world !”.
Thông qua ví dụ kinh điển này, chúng ta sẽ có được cái nhìn tổng quan về ngôn
ngữ ActionScript này.
Tóm tắt nội dung tài liệu: Giáo trình Script và kĩ thuật hoạt hình (Phần 2)
CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT ActionScript là một ngôn ngữ lập trình hướng đối tượng được dùng để phát triển các ứng dụng nhờ vào Adobe Flash Player và Adobe AIR. Ngôn ngữ lập trình ActionScript có thể được biên dịch bởi: - Adobe Flex Builder. - Adobe Flash Professional. - Command Line nhờ vào bộ SDK. Cũng tương tự như Java, sau khi được biên dịch, các ActionScript sẽ được chuyển thành dạng bytecode mà chỉ có máy ảo ActionScript (AVM) mới hiểu được. Máy ảo ActionScript n{y được tích hợp bên trong Flash Player, Flash Plugin và Adobe AIR. Ngôn ngữ lập trình ActionScript (AS) là ngôn ngữ có cú pháp kết hợp của cả Java và Delphi (cú pháp và từ khóa giống Java, cách khai báo giống Delphi). Nếu bạn đ~ từng làm quen với ngôn ngữ lập trình Java, thì khi làm quen với ngôn ngữ lập trình ActionScript, bạn sẽ cảm thấy đơn giản hơn rất nhiều. Các toán tử, các câu lệnh tương tự như Java. Một điều đặc biệt, đó l{ lớp của ActionScript có cú pháp khai báo và cách sử dụng rất giống với Java. Dường như Adobe đ~ thiết kế nên ngôn ngữ ActionScript theo chuẩn của Java để tạo nên sự đơn giản và quen thuộc với đa số người dùng. Bạn cũng cần lưu ý rằng, chúng ta đang thảo luận về phiên bản 3.0 của AS. Đ}y l{ phiên bản mới nhất cho đến thời điểm này. AS là ngôn ngữ hướng đối tượng như Delphi (hay C++), nghĩa l{ không tuyệt giao với lập trình hướng thủ tục (bằng chứng là ta có thể viết hàm bên ngoài lớp). AS là ngôn ngữ phân biệt chữ hoa và chữ thường. Một ví dụ kinh điển khi học một ngôn ngữ lập trình đó l{ ví dụ “Hello, world !”. Thông qua ví dụ kinh điển này, chúng ta sẽ có được cái nhìn tổng quan về ngôn ngữ ActionScript này. Bạn hãy quan sát ví dụ minh họa này được viết trên ngôn ngữ lập trình ActionScript. Bạn cũng cần lưu ý rằng, đoạn chương trình n{y được viết bên ngoài lớp (thể hiện tính lưỡng cực giữa hướng đối tượng v{ hướng thủ tục). CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 110 - Hình 102 – Giao diện ActionScript 3. Trong ví dụ này, bạn có thể thấy nhiều điểm tương đồng giữa AS với Java là: dấu comment (// - comment trên một dòng và /**/ - comment trên nhiều dòng), cách viết nội dung hàm (nằm trong cặp dấu {}) và chỉ có một khái niệm là hàm (trả về kiểu dữ liệu hoặc không trả về kiểu dữ liệu). C|c điểm tương đồng với Delphi: từ khóa khai báo hàm là function và kiểu dữ liệu hàm trả về nằm sau tên hàm và dấu hai chấm. Một điểm khác biệt của AS so với Java và Delphi l{ chương trình chính nằm tự do trong vùng soạn thảo (không giống Java phải trong hàm main, Delphi trong begin và end). Nó có thể nằm trước hay sau c|c h{m khai b|o. Để quy ước về trật tự sử dụng, ta sẽ sử dụng cú pháp tuần tự (lệnh trước thực hiện trước, lệnh sau thực hiện sau) – nghĩa là phần chương trình chính luôn nằm ở phía sau cùng và ta sẽ đ|nh dấu nó bằng dòng comment /*Chương trình chính*/. Bạn cũng cần lưu ý rằng, AS là ngôn ngữ kịch bản (scripting language), nên nó cũng mang nhiều đặc trưng của một ngôn ngữ kịch bản. Các câu lệnh nằm tự do, không nhất thiết phải được đặt trong một hàm cụ thể n{o, đ}y chính l{ đặt trưng dễ nhận thấy của một ngôn ngữ kịch bản (như JavaScript, Jscript). CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 111 - Chúng ta sẽ tìm thấy nhiều điểm tương đồng và khác biệt của AS so với hai ngôn ngữ Java và Delphi (nếu bạn đ~ tưng l{m quen với hai ngôn ngữ này). Chúng ta sẽ lần lượt tìm hiểu cú pháp của ngôn ngữ lập trình AS này. Xin nhắc lại là phiên bản ActionScipt m{ ta đang thảo luận là ACTIONSCRIPT 3.0. 5.1. C|c kiểu dữ liệu Ở đ}y ta thảo luận về các kiểu dữ liệu trên hệ Windows 32 bit. Các kiểu dữ liệu mà ta thảo luận là kiểu nguyên thủy. Trong AS, mọi kiểu dữ liệu đều tương ứng với một lớp dữ liệu tạo ra nó: kiểu int và lớp int, kiểu Number và lớp Number... a. Kiểu số nguyên Có hai dạng số nguyên được hỗ trợ trong AS là kiểu số nguyên có dấu int và số nguyên không dấu uint. Cả hai loại số nguyên n{y điều chiếm 4byte, nghĩa l{ vùng giá trị của int là -231 đến 231-1 và giá trị của uint l{ 0232-1. Bạn lưu ý rằng, trong các kiểu dữ liệu, thì chỉ có kiểu số nguyên có chữ c|i đầu tiên viết thường. b. Kiểu số thực Số thực dấu chấm động theo chuẩn IEEE-754. Số thực trong AS chiếm 32 bit. Từ khóa khai báo là Number. Bạn lưu ý Number viết hoa chữ c|i đầu tiên. c. Kiểu Boolean Kiểu Boolean trong AS có hai giá trị là true và false. Bạn lưu ý Boolean viết hoa chữ c|i đầu tiên, true và false viết thường mọi chữ cái. d. Kiểu xâu String Xâu kí tự được đ|nh dấu từ 0. Phần tử cuối cùng trong xâu có chỉ số là xâu.lengh- 1. Kiểu x}u được khai báo nhờ từ khóa String. Bạn cũng cần lưu ý rằng String viết hoa chữ c|i đầu tiên. e. Kiểu mảng Array Việc đ|nh dấu trong Array ho{n to{n tương tự String. Kiểu Array cũng viết hoa chữ c|i đầu tiên. f. Kiểu đối tượng Object Tương tự kiểu Struct của C. Nhưng mềm dẻo hơn rất nhiều. Chúng ta sẽ thấy rõ điều n{y qua c|c chương trình trong gi|o trình n{y. CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 112 - Để xử lý các dữ liệu liên quan đến các kiểu dữ liệu nguyên thủy này ta phải làm việc với các lớp đối tượng tương ứng: kiểu int và uint với lớp int và uint, kiểu Number với lớp Number, kiểu String với lớp String, kiểu Array với lớp Array và kiểu đối tượng Object. Chi tiết về c|c phương thức xử lý của các lớp này ta sẽ thảo luận sau khi tìm hiểu về lớp trong AS. 5.2. Biến v{ Hằng a. Biến: có giá trị thay đổi được. Khi khai báo một biến ta khai báo theo cú pháp sau: var tên_biến:Kiểu_Dữ_Liệu [= giá_trị_khởi_tạo]; Khi khai báo một biến, bạn phải sử dụng từ khóa var. Ta có thể lấy một vài ví dụ về khai báo biến trong AS var a:int = 1; var b:Number; b = 1.5; //C|c dòng khai b|o sau tương đương var s:String = “Hello”; var s:String = new String(“Hello”); var s:String = String(“Hello”); //Kết thúc tính tương đương //C|c dòng khai b|o sau tương đương var ar:Array = new Array(“a”, “b”); var ar:Array = new Array(3); //Kết thúc tương đương var myAssocArray:Object = {fname:"John", lname:"Public"}; trace(myAssocArray.fname); // John trace(myAssocArray["lname"]); // Public CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 113 - myAssocArray.initial = "Q"; trace(myAssocArray.initial); // Q Bạn có thể khởi tạo giá trị cho biến tại thời điểm khai báo biến hoặc khai báo biến và khởi tạo giá trị cho biến đó sau. b. Hằng: có giá trị không thay đổi. Trong AS, để khai báo hằng ta thay từ khóa var trong khai báo biến bằng từ khóa const. Bạn lưu ý rằng khi khai báo hằng bạn cần phải bổ sung giá trị cho nó. Nghĩa l{ cú ph|p khai báo hằng phải tuân theo quy tắc sau const tên_hằng:Kiểu_Dữ_Liệu = giá_trị_khởi_tạo; Bạn lưu ý rằng, giá trị khởi tạo không giống trong trường hợp khởi tạo cho biến là có thể có hoặc không, đối với hằng bắt buộc phải có. Các bạn có thể quan sát các khai báo hằng sau đ}y const a:int = 1; const s:String = “abc”; 5.3. To|n tử v{ Biểu thức Toán tử l{ c|c phép to|n được sử dụng trong AS. Các giá trị được sử dụng cho toán tử gọi là toán hạng. Biểu thức là tập hợp các toán tử và toán hạng được sắp xếp theo một trật tự có ý nghĩa. Toán tử gán Toán tử g|n dùng để gán giá trị cho một biến. Ví dụ a = 5; Câu lệnh gán sẽ thực hiện gán giá trị ở bên phải cho biến ở bên trái. Bạn cũng có thể gán giá trị của hai biến cho nhau. Ví dụ a = b; a = b + 2; Giá trị của a bằng giá trị của b cộng thêm 2 a = a + 1; Tăng gi| trị của a lên 1 a = b = c = 5; G|n đồng thời nhiều giá trị. Nó tương ứng với tập các lệnh sau: CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 114 - c = 5; b = c; a = b; Toán tử thực hiện phép toán số học Ngôn ngữ lập trình AS hỗ trợ các toán tử số học sau đây Toán tử Ý nghĩa + Phép cộng - Phép trừ * Phép nhân / Phép chia (chia nguyên đối với số nguyên) % Chia lấy dư (chỉ với số nguyên) Bạn lưu ý rằng, phép chia có thể thực hiện trên số nguyên hoặc số thực. Nếu thực hiện phép chia trên hai số nguyên thì đ}y chính l{ kết quả của phép chia lấy phần nguyên. Còn nếu nó thực hiện trên hai số thực, thì nó là kết quả của phép chia bình thường. Như vậy, theo mặc định, hai số nguyên (hoặc thực) thực hiện phép to|n tương ứng thì nó sẽ trả về kết quả nguyên (hoặc thực). Nếu phép toán thực hiện trên một số nguyên và một số thực, nó sẽ tự động chuyển đổi về kiểu cao hơn (th{nh số thực). Vậy làm thế n{o để thực hiện phép chia 3 cho 2, nếu ta muốn nhận được kết quả là 1.5. Ta biết rằng 3 và 2 là hai số nguyên, nếu ta thực hiện phép chia 3/2 thì ta thu được số nguyên – là kết quả của phép chia nguyên 3/2, tức là 1. Muốn thu được kết quả 1.5, bạn cần chuyển đổi 3 và 2 về dạng số thực bằng một trong các cách sau: Khai báo 3 và 2 là các số thực (bằng c|ch quy định kiểu dữ liệu như a:Number = 3, b:Number = 2 hoặc 3.0, 2.0). Chuyển đổi kiểu dữ liệu (Xem thêm phần toán tử chuyển đổi kiểu dữ liệu). CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 115 - Toán tử logic Toán tử Phép toán A b Kết quả Toán tử phủ định ! Phép toán một ngôi !a true - false false - true Toán tử và && Phép toán hai ngôi a&&b true true true true false false false true false false false false Toán tử hoặc || Phép toán hai ngôi a||b true true true true false true false true true false false false Toán tử dịch bit Các toán tử n{y được sử dụng đến tính toán trên các số nguyên bằng cách sử dụng các bit. Toán tử Tên gọi Ví dụ & Phép “V{” bit 2&3=2 210=102 310=112 210=102 | Phép “hoặc” bit 2|3=3 210=102 310=112 310=112 ^ Phép “hoặc loại” 2^3=1 210=102 CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 116 - bit 310=112 110=012 << Dịch trái bit 2<<3=16 2*23=2*8=16 >> Dịch phải bit 2>>3=0 2/23=2/8=0 ~ Phủ định bit ~2=1 210=102 110=012 Các toán tử và bit, hoăc bit, hoặc loại bit và phủ định bit được tính như sau: chúng ta chuyển đổi các số thập phân sang nhị ph}n tương ứng, sau đó sử dụng các phép to|n tương ứng cho từng bit theo vị trí của nó. Ví dụ như ở trên 210=102, 310=112 và ta sẽ thực hiện c|c phép to|n tương ứng với từng bit. Bit thứ nhất (từ phải sang trái) là 0&1=1, bit thứ hai 1&1=1, như vậy kết quả của phép toán 2&3 là 102 hay 210. Tương tự cho các phép toán còn lại. Ở đ}y bạn lưu ý rằng phép toán tuyển loại sẽ có chân trị là 1 nếu hai bit tương ứng là khác nhau, nếu giống nhau thì tương ứng là 0(1^1=0^0=0, 1^0=0^1=1). Các toán tử > sẽ được tính như sau: a>b=a/2b. Toán tử gán hợp nhất Khi muốn thay đổi giá trị của một biến, chúng ta có thể sử dụng cách viết thông thường, tuy nhiên AS cũng hỗ trợ các toán tử viết tắt. Toán tử Ví dụ Ý nghĩa Phạm vi += a+=b a=a+b Phép toán số học -= a-=b a=a-b Phép toán số học *= a*=b a=a*b Phép toán số học /= a/=b a=a/b Phép toán số học %= a%=b a=a%b Phép toán số học &= a&=b a=a&b Phép toán bit CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 117 - |= a|=b a=a|b Phép toán bit ^= a^=b a=a^b Phép toán bit >>= a>>=b a=a>>b Phép toán bit <<= a<<=b a=a<<b Phép toán bit Toán tử tăng và giảm Một cách viết thu gọn hơn nữa, đó l{ sử dụng toán tử tăng v{ giảm. Nếu trong biểu thức a+=b, với b = 1 thì ta có thể viết th{nh a++. Tương tự, nếu a-=b, b = 1 thì ta có thể viết a--. Chúng ta cũng lưu ý rằng, toán tử này có chút khác biệt. Nó có thể nằm trước hoặc nằm sau toán hạng. Có nghĩa l{ có thể có a++ hoặc ++a (tương ứng a-- hoặc --a). Phép toán Ý nghĩa a++; Thực hiện phép to|n trước, sau đó mới thực hiện toán tử ++a; Thực hiện toán tử trước, sau đó mới thực hiện phép toán a--; Tương tự a++; --a; Tương tự ++a; Ví dụ Cách thực thi a:int = 1; b:int = 1; a+=b++; a = 1, b chưa khởi tạo a = 1, b = 1 Thực hiện phép to|n a+=b trước, sau đó mới thực hiện phép toán b++. Tức là a=2, b=2. CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 118 - a+=++b; Thực hiện phép to|n ++b trước, sau đó mới thực hiện phép toán a+=b. Tức là b=3, a=5. Toán tử so sánh Để thực hiện việc so sánh giá trị của hai biến, biểu thức; ta có thể sử dụng toán tử so sánh. Giá trị của phép toán so sánh trả về kiểu bool. Toán tử Tên gọi Giá trị biểu thức “a Toán tử b” Đúng Sai == Bằng Nếu a bằng b Nếu a khác b != Khác Nếu a khác b Nếu a bằng b > Lớn hơn Nếu a lớn hơn b Nếu a nhỏ hơn hoặc bằng b < Bé hơn Nếu a nhỏ hơn b Nếu a lớn hơn hoặc bằng b >= Lớn hơn hoặc bằng Nếu a lớn hơn hoặc bằng b Nếu a nhỏ hơn b <= Bé hơn hoặc bằng Nếu a nhỏ hơn hoặc bằng b Nếu a lớn hơn b Bạn hãy cẩn thận khi sử dụng toán tử so sánh bằng. Hãy chú ý rằng toán tử so sánh bằng là ==, khác với toán tử gán =. Toán tử điều kiện Toán tử điều kiện có dạng cú ph|p như sau: điều_kiện?kết_quả_1:kết_quả_2; CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 119 - Kết quả trả về giá trị kết_quả_1 nếu điều_kiện l{ đúng, ngược lại, nếu điều_kiện là sai, thì trả về giá trị kết_quả_2. Ví dụ Kết quả a:int = 1; b:int = 2; c:int; c = (a>b)?a:b; trace(c); 2 Toán tử phân tách Toán tử này kí hiệu là dấu phẩy. Nó dùng để phân tách hai hay nhiều biểu thức chứa trong một biểu thức tương ứng. Ví dụ Kết quả a:int; b:int; c:int; c = (a=1, b=2, a+b); trace(c); 3 Toán tử chuyển đổi kiểu dữ liệu Toán tử n{y dùng để chuyển đổi một biến hay hằng thuộc kiểu dữ liệu này sang kiểu dữ liệu khác. Giả sử bạn có biến int a = 3, int b = 2. Khi thực hiện phép chia để nhận được kết quả thực, bạn chỉ cần viết như sau: (Number)3/2. Bạn phải lưu ý rằng số 3 ở đ}y đ~ bị chuyển thành kiểu thực, và việc thực hiện phép chia một số thực cho số nguyên sẽ trả về kiểu thực 1.5. Nếu bạn viết 3/(float)2, kết quả cũng tương tự. Trong C, nếu bạn viết (float)(3/2) thì kết quả lại khác. Sở dĩ như vậy là vì, nó sẽ thực hiện phép chia nguyên 3/2 (kết quả l{ 1), sau đó nó sẽ CHƯƠNG 5. LẬP TRÌNH VỚI ACTIONSCRIPT - 120 - chuyển giá trị 1 nguyên này sang 1 thực. Nhưng với AS thì kết quả tương tự hai trường hợp trên. Cách biểu diễn sự chuyển đổi một biến thuộc kiểu dữ liệu này, sang kiểu khác chỉ có thể thực hiện nếu kiểu của chúng tương đương. Bạn có thể chuyển số thành số (sau này khi học về hướng đối tượng, bạn có thể chuyển giữa c|c đối tượng tương đương). Bạn không thể chuyển đổi từ số th{nh x}u, hay ngược lại. Khi chuyển đổi, bạn sử dụng một trong các cú pháp sau: (kiểu_dữ_liệu)biến hoặc (kiểu_dữ_liệu)(biến) hoặc kiểu_dữ_liệu(biến). Thứ tự ưu tiên của các toán tử Trong toán học, chúng ta biết rằng khi tính giá trị của một biểu thức, thì luôn có sự ưu tiên của các toán tử như: phép nh}n thực hiện trước phép cộng, phép chia và nhân thực hiện đồng thời, ưu tiên từ trái sang phải Trong lập trình C++ cũng vậy, các toán tử cũng có những độ ưu tiên nhất định. Trong một biểu thức phức tạp, bạn nên chú ý đến độ ưu tiên của các toán tử, điều này rất dễ gây ra sai sót. Trong bảng sau đ}y, chúng tôi xin đưa ra thứ tự ưu tiên của các toán tử trong lập trình AS Mức ưu tiên Toán tử Độ ưu tiên cùng loại 1 :: Trái-sang-phải 2 () [] . -> ++ -- (hậu tố) dynamic_cast static_cast reinterpret_cas ... terial = new CompositeMaterial(); CHƯƠNG 7. THƯ VIỆN PAPERVISION3D - 234 - Để bổ sung một material cho đối tượng cm, bạn sử dụng phương thức addMaterial của đối tượng này. cm.addMaterial(material:MaterialObject3D):void; 7.4.7. Đối tượng MaterialsList Đối tượng MaterialsList được sử dụng khi khởi tạo một đối tượng Cube. Phương thức khởi tạo cảu MaterialsList cũng không chứa tham số. var ma:MaterialsList = new MaterialsList(); Để bổ sung một material cho đối tượng ma, bạn sử dụng phương thức addMaterial. ma.addMaterial(material:MaterialObject3D, name:String); Trong đó, tham số name là tên của các mặt trong hình hộp: all (áp dụng cho tất cả), front (trước), back(sau), top(trên), bottom(dưới), right(phải) và left(trái). 7.5. Import một mô hình 3D Dù rằng việc tạo dựng c|c đối tượng đồ họa 3D trong PaperVision3D tương đối thuận lợi, tuy nhiên để tạo dựng c|c đối tượng đồ họa phức tạp trong thế giới thực tương đối phức tạp. Do đó, chúng ta cần sử dụng c|c chương trình thiết kế đồ họa 3D chuyên nghiệp như Maya, 3DsMax. Papervision3D hỗ trợ định dạng DAE. Bạn có thể sử dụng Maya để xuất bản tập tin này. Để tải đối tượng trong tập tin 3D này vào trong Flash, ta sử dụng đối tượng org.papervision3d.objects.parsers.DAE. Hàm tạo của đối tượng DAE n{y tương đối đơn giản var dae:DAE = new DAE(autoplay:Boolean, name:String, loop:Boolean); Trong đó, Tham số autoplay cho phép h{nh động của các đối tượng được import từ tập tin DAE sẽ được thực thi hay không (bởi tập tin DAE này chứa đối tượng 3D động). Tham số name quy định tên cho đối tượng DAE. Tham số loop quy định sự lặp lại c|c h{nh động cho c|c đối tượng trong tập tin DAE. Để tải c|c đối tượng trong tập tin DAE vào Flash, ta sử dụng phương thức load dae.load(url:String) Trong đó, url l{ địa chỉ của tập tin DAE. CHƯƠNG 7. THƯ VIỆN PAPERVISION3D - 235 - Sau khi bạn tải c|c đối tượng trong tập tin DAE vào Flash, bạn có thể thao tác với c|c đối tượng n{y như với c|c đối tượng 3D kh|c được tạo bởi Papervision3D. Một khó khăn gặp phải là chúng ta cần có một hiểu biết về một chương trình thiết kế nhân vật 3D để đưa v{o trong Flash. Với một chương trình chuyên nghiệp như Maya thì không phải ai cũng có thể học nhanh được, vì vậy bạn có thể sử dụng những tập tin DAE được chia sẻ trong cộng đồng mạng để sử dụng. Một địa chỉ rất hữu ích để bạn khai th|c thư viện hình ảnh DAE đó l{ Đ}y l{ một dự án miễn phí của google cung cấp cho ta các mô hình 3D tuyệt vời. Hình 170 – Google Sketchup Bạn chỉ việc tìm kiếm mô hình sau đó tải nó về máy của bạn. Bạn sẽ nhận được tập tin *.kmz. Tập tin này có thể đọc bởi Google Earth. Tuy nhiên, bản chất của tập tin n{y cũng chỉ là tập tin nén. Bạn có thể giải nén bằng chương trình WinRar bạn sẽ thu được một thư mục chứa tập tin DAE. Với dự án này, chúng ta có rất nhiều mô hình 3D để khai thác và sử dụng trong các dự án hoạt hình 3D của mình. CHƯƠNG 7. THƯ VIỆN PAPERVISION3D - 236 - Tổng kết chương 7 Trong chương n{y, chúng tôi đ~ giới thiệu đến bạn cách sử dụng lớp thư viện PaperVision3D để tạo c|c đối tượng đồ họa 3D cũng như c|ch thức tạo chuyển động trong thế giới thực. Đ}y l{ thư viện mã nguồn mở được xây dựng trên ActionScript. Hi vọng bạn đ~ có được một cái nhìn tổng quan về đồ họa 3D. Với thư viện PaperVision3D này, bạn có thể tạo dựng cho mình một thước phim 3D đơn giản hoặc một game 3D đơn giản. CHƯƠNG 7. THƯ VIỆN PAPERVISION3D - 237 - Blank Page BÀI TẬP THỰC HÀNH Để phát triển kĩ năng thiết kế và lập trình trên Flash CS5 và ActionScript3.0, chúng tôi đề nghị bạn hãy thực hiện các bài thực h{nh sau đ}y. BÀI THỰC HÀNH SỐ 1 SỬ DỤNG CÔNG CỤ VẼ CƠ BẢN Hãy sử dụng các công cụ vẽ để tạo các nội dung sau đ}y trên cùng một Stage: 1. Tạo Layer 1 v{ đổi tên thành BauTroi. Chọn biểu tượng bảng màu. Chọn Stroke color = None, Fill Color = Linear Gradient. Chọn chế độ đổ màu Extends Color. Trong kiểu đổ màu cầu vồng này, bạn chỉ chọn hai màu: màu đen (mã màu là #000000) đến màu đen trắng (mã màu #999999), trong đó màu đen ở phía trên, màu đen trắng ở phía dưới. Sử dụng công cụ Rectangle, tạo một hình chữ nhật ở trên Layer này. Sử dụng bảng hiệu chỉnh Align để can chỉnh kích thước và vị trí cho hình chữ nhật này trùng khớp với kích thước Stage. 2. Tạo Layer 2 v{ đổi tên thành MatTrang. Chọn biểu tượng Oval với thuộc tính Stroke Color = None, Fill Color là màu Radial Gradient (màu một có mã màu là #FFFF00, màu 2 có mã màu là #FFFFFF). Hãy sử dụng công cụ Gradient Transform để hiệu chỉnh kích thước của vòng màu bên trong lớn hơn v{ đặt mặt trăng vào vị trí thích hợp trên bức tranh này. 3. Sử dụng công cụ PolyStar để tạo một ngôi sao màu vàng nhạt, kích thước là 20x20. Convert ngôi sao này sang biểu tượng Graphics v{ đặt tên là Sao. Chọn công cụ Spray Brush, chọn biểu tượng cho nó là Sao ở trên. Hiệu chỉnh các thông số như sau: Scale width = 20% Scale height = 25% Chọn cả ba tùy chọn Random Scaling, Rotate Symbol và Random Rotation. Hiệu chỉnh kích thước của Brush là width=height=300px, Brush Angel là 90 CW. Tạo mới Layer đặt tên là Sao. Hãy quét nhanh công cụ Spray Brush này lên Layer n{y để tạo các ngôi sao nhỏ trên bầu trời. 4. Tạo mới một Layer v{ đặt tên là KhungCua. Sử dụng công cụ Rectangle Primitive để tạo một hình chữ nhật có kích thước width=200, height=150, - 239 - chọn Fill color l{ None, Stroke color l{ m{u đen, loại đường viền style là stippled, kích thước của đường viền là 5px. Sử dụng công cụ Deco để đổ màu nghệ thuật (cành hoa nho) cho khung cửa sổ này. 5. Tạo mới Layer đặt tên là NgoiNha. Hãy sử dụng các công cụ cần thiết để vẽ nên ngôi nh{ mơ ước của bạn. Lưu ý: h~y sử dụng màu sắc thật hài hòa trong đêm tối. 6. Tạo mới Layer đặt tên là DamMay. Hãy sử dụng công cụ Pen để tạo nên c|c đ|m m}y có viền cong. Tô màu cho nó bằng màu xanh nhạt (mã màu #66CCCC) và hãy loại bỏ viền của nó. 7. Tạo mới Layer đặt tên là ConNguoi. Hãy sử dụng các công cụ cần thiết để phát họa chân dung của một cô g|i đang đi dưới |nh trăng. 8. Tạo mới Layer đặt tên là DenLong. Hãy phát họa c}y đền lồng v{ đặt nó vào tay cô gái. 9. Tạo mới Layer đặt tên là CayCoi. Hãy phát họa hình một rặng tre hoặc một cây cổ thụ. Chọn màu sắc hợp lý. 10. Tạo mới Layer đặt tên là TieuDe. Sử dụng công cụ Text để soạn thảo trên Layer này nội dung “Ánh Trăng Trên Quê Hương”. BÀI THỰC HÀNH SỐ 2 SỬ DỤNG BIỂU TƯỢNG VÀ TẠO HOẠT CẢNH Hãy sử dụng bức ảnh chứa c|c đối tượng được vẽ ở trên để thực thi bài thực hành số 2. 1. Hãy chuyển đổi MatTrang trong Layer 2 thành biểu tượng MovieClip và đặt tên cho nó là MatTrang. Hãy sử dụng Classic Tween để tạo hiệu ứng động cho mặt trăng. Mặt trăng có hai hiệu ứng động l{: đổ bóng mờ và di chuyển. Để tạo hiệu ứng bóng mờ, hãy sử dụng thuộc tính Filter=Blur của MovieClip. Các thao tác này chỉ được sử dụng Classic Tween. 2. Hãy xóa bỏ các ngôi sao trên bầu trời ở trên. Trong thư viện, hãy chọn lại biểu tượng Graphic là Sao mà bạn đ~ tạo. Bạn hãy chuyển đổi nó thành MovieClip. Sử dụng Motion Tween để tạo hiệu ứng tăng giảm độ trong suốt (thuộc tính Alpha của MovieClip). Thuộc tính n{y thay đổi từ 80% đến 100%. Tiếp tục sử dụng công cụ Spray Brush, lần này bạn chọn biểu tượng - 240 - cho nó là MovieClip Sao. Hiệu chỉnh các thông số tương tự như b{i thực hành số 1. Sau đó, quét lên Layer Sao. 3. Hãy sử dụng công cụ Bone để tạo chuyển động cho đôi ch}n cô g|i. C|c phần còn lại không cần tạo chuyển động. Bạn kết hợp với Motion Tween để tạo sự di chuyển (thay đổi vị trí trong bức ảnh) cho cô gái. 4. Sử dụng Motion Tween để tạo chuyển động cho c|c đ|m m}y. C|c đ|m m}y chuyển động theo dạng thức 3D (kết hợp công cụ 3D Rotation và 3D Translation). 5. Hãy tạo mới một Layer đặt tên là BienHinh. Trên Layer này, bạn hãy tạo một ngũ gi|c. Sử dụng Shape Tween để tạo hiệu ứng biến hình cho hình thể n{y th{nh hình ngôi sao năm c|nh. H~y đặt nó vào một vị trí thích hợp. BÀI THỰC HÀNH SỐ 3 SỬ DỤNG BIỂU TƯỢNG VÀ TẠO HOẠT CẢNH (TIẾP THEO) Hãy sử dụng các công cụ tạo hoạt hình (Tween, Bone, Bind, 3D,) để tạo một VideoClips. Lưu ý trong b{i n{y, sinh viên cần kết hợp với một bài hát. Nội dung phim và nội dung bài hát phải tương đối phù hợp. Bài hát dài không dưới 1 phút. BÀI THỰC HÀNH SỐ 4 LẬP TRÌNH VỚI ACTIONSCRIPT Trong bài thực hành này, bạn cần hoàn tất các nội dung sau: 1. Tạo một đối tượng quả bóng bằng công cụ Oval. Sau đó, h~y chuyển đổi nó thành biểu tượng MovieClip. C{i đặt tên thể hiện cho nó là QuaBong. Hãy xóa quả bóng này trên Stage. Mở khung soạn thảo ActionScript, bây giờ bạn hãy viết ActionScript để tạo chuyển động 3D cho quả bóng, thay đổi thuộc tính alpha khi nó chuyển động. Sự thay đổi thuộc tính alpha này qui định theo thời gian (thay đổi từ 80% đến 100%). - 241 - 2. Tạo mới một Scene. Trên Scene này, bạn hãy sử dụng hai bức ảnh. Hiệu chỉnh kích thước cho chúng bằng nhau. Kích thước của chúng không quá lớn, sao cho ta có thể đặt chúng trên Stage nhưng vẫn còn khoảng trống. Sử dụng đối tượng Tween để tạo hoạt hình cho hai bức ảnh này. Để tạo hoạt hình nhờ vào Tween trong ActionScript, bạn có thể thao tác như hướng dẫn sau: H~y đưa hai đối tượng ảnh n{y v{o trong thư viện, sau đó chuyển đổi chúng thành các biểu tượng MovieClip, v{ đặt tên cho chúng lần lượt là Anh1 và Anh2. Bạn quan s|t m~ chương trình sau import fl.transitions.easing.*; import fl.transitions.Tween; var OneTween:Tween; var TwoTween:Tween; Ở đ}y, bạn sử dụng package fl.transition. Đối tượng Tween được đưa v{o để sử dụng. Các hiệu ứng động cũng được đưa v{o qua dòng lệnh thứ nhất. Tiếp theo, bạn hãy tạo chuyển động cho đối tượng nhờ v{o đối tượng Tween. Cách sử dụng Tween cũng tương tự như bạn tạo một Thread vậy. OneTween = new Tween(Anh1, "y", Bounce.easeOut, 50, 100, 3, true); OneTween.start(); TwoTween = new Tween(Anh2, "y", Bounce.easeOut, 250, 300, 3, true); TwoTween.start(); Đối tượng Tween có phương thức khởi tạo Tween(Object, String, Function, Number, Number, Number, Boolean). Object l{ đối tượng mà ta sẽ áp dụng hiệu ứng Tween; String là tên thuộc tính mà ta sẽ sử dụng – như “x”, “y”,; Function l{ tên phương thức sẽ áp dụng – chi tiết hơn bạn có thể thử nghiệm với chức năng Add New Items to Script với gói fl.transition.easing; Number thứ nhất và Number thứ hai là hai biên chuyển động. Number thứ ba là số lần chuyển động (duration), tham số Boolean mặc định được sử dụng là true. Hãy kiểm tra xem thử nó hoạt động hoàn hảo hay không. Đ}y thực sự là cách tạo chuyển động rất hoàn hảo. 3. Tạo mới một dự án khác. Trong dự án này có ba file: file main.fla, file human.as, file student.as. File main.fla là khung trình diễn chính. Các file - 242 - còn lại được sử dụng như c|c lớp. File human.as là một lớp chứa hai thuộc tính là Name:String và Age:int và bốn phương thức chính là void SetName(String), String GetName(void), void SetAge(int) và int GetAge(void). Lớp student kế thừa lớp Human. Ngoài ra, nó còn có thêm thuộc tính ID:String v{ hai phương thức void SetID(String), String GetID(void). Quay trở lại với khung trình diễn chính, bạn hãy phát họa hình một con người. Sau đó, bạn hãy convert nó sang biểu tượng MovieClip. C{i đặt tên hiển thị cho nó là ConNguoi. Cuối cùng bạn hãy xóa nó ra khỏi stage. Trên khung trình diễn này, bạn hãy tạo một Button và ba textbox kèm theo ba label. Ba label có nội dung là: Tên, Tuổi, MãSV. Ba textbox còn lại tương ứng dùng để nhập nội dung theo ba trường này (Name, Age v{ ID). Khi người dùng nhập dữ liệu và nhấp nút Add, hình người sẽ hiển thị ra bên dưới. Đồng thời, bên cạnh nó là các thông tin về đối tượng này (Tên, Tuổi và MãSV). 4. Trong bài thực hành này, bạn hãy tạo một dự án gồm bốn file: main.fla, solutions.as, solution1.as và solution2.as. Trên stage của main có ba textbox v{ ba label tương ứng để nhập các số a, b và c. Một nút nhấn để giải phương trình, v{ một label nữa để hiển thị kết quả. File solutions.as là một interface chứa hai phương thức là DoSolution và ToString. Hai lớp solution1.as và solution2.as là hai lớp thực thi giao diện solutions.as này. Phương thức DoSolution của đối tượng trong solution1.as sẽ giải phương trình bậc 1, phương thức DoSolution của đối tượng trong solution2.as sẽ giải phương trình bậc hai. Phương thức ToString của cả hai đối tượng có nhiệm vụ in ra nghiệm cuối cùng. Đối tượng trong solution1.as chứa hai thuộc tính l{ a:Number v{ b:Number. Đối tượng trong solution2.as chứa ba thuộc tính là a:Number, b:Number và c:Number. Sau khi bạn hoàn tất yêu cầu này, hi vọng bạn sẽ hiểu rõ hơn về giao diện. BÀI THỰC HÀNH SỐ 5 XÂY DỰNG PHIM QUẢNG CÁO BẰNG FLASH Hãy xây dựng một thước phim quảng cáo giới thiệu về một bộ phim có sử dụng kĩ xảo điện ảnh. Đoạn phim quảng c|o có đội dài trình diễn khoảng 5 phút. Trong phim phải sử dụng âm thanh và có lời thuyết trình bằng chữ hoặc lời thuyết minh (những đoạn phim sử dụng lời thuyết minh sẽ được đ|nh gi| cao). - 243 - Để xây dựng thước phim quảng cáo này, bạn cần sử dụng một bộ phim hoàn chỉnh. Sau đó, bạn cắt lấy những đoạn phim hay trong bộ phim n{y để tạo một bộ phim quảng cáo hoàn chỉnh (nếu không có một bộ phim hoàn chỉnh, bạn có thể liên hệ với giảng viên để được cung cấp các đoạn phim mẫu). BÀI THỰC HÀNH SỐ 6 HOÀN TẤT DỰ ÁN VÀ XUẤT BẢN Hãy vận dụng các kiến thức đ~ học trong giáo trình này, bạn hãy lựa chọn một trong các dự |n sau đ}y: Các dự án Dự án 1. Tạo một dự án Game bằng Flash kết hợp với ActionScript theo yêu cầu sau a) Màn hình Splash (scene 1): chỉ hiển thị bốn Menu: Play, Score, Help và Quit. Play cho phép người dùng chuyển sang màn hình thứ hai (scene 2), trong m{n hình n{y, người dùng có thể chơi game. Score cho phép hiển thị kết quả chơi, m{n hình n{y tương ứng với scene 3. Help cho phép chuyển sang màn hình trợ giúp (scene 4), trong màn hình này sẽ hiển thị vài thông tin về game, c|ch chơi game. b) Nội dung game có thể l{ game h{nh động, game thể thao, game học tập nhưng cần phải được điều khiển bằng chuột hoặc bàn phím. c) Nếu người dùng hoàn tất việc chơi game, thì sẽ hiện ra các thông số mà người chơi đạt được: Họ và Tên (nhập vào từ đầu), điểm. Dữ liệu được đọc từ file data.xml. Dự án 2. Tạo một dự án phim hoạt hình bằng Flash kết hợp với ActionScript theo yêu cầu sau a) Phim mô tả một chủ đề bất kì nhưng phải có cấu trúc (có kịch bản). b) Phim có độ d{i không dưới 10 phút. c) Có thanh Playback để điều khiển. d) Có sử dụng âm thanh, tiếng nói (phải được đồng bộ với đối tượng trong phim) e) Không chấp nhận các Clip nhạc. - 244 - Dự án 3. Tạo một dự |n kĩ xảo điện ảnh bằng Flash kết hợp với ActionScript theo yêu cầu sau a) Tạo một thước phim có sử dụng kĩ xảo điện ảnh (chỉ chấp nhận kĩ xảo điện ảnh, không chấp nhận kĩ xảo truyền hình). b) Phim có độ d{i không dưới 10 phút. c) C|c kĩ xảo phải sử dụng phù hợp với nội dung, số lượng kĩ xảo không dưới 10. d) Thước phim cuối cùng phải có nội dung. - 245 - Blank Page - 246 - TÀI LIỆU THAM KHẢO THÊM
File đính kèm:
- giao_trinh_script_va_ki_thuat_hoat_hinh_phan_2.pdf