Giờ thứ 01: Làm quen với as giờ thứ 02: Sử dụng Action panel



tải về 0.7 Mb.
trang2/5
Chuyển đổi dữ liệu30.08.2016
Kích0.7 Mb.
#29200
1   2   3   4   5

ActionScript

on (press) {


   var myVariable = 7;
   var myOtherVariable = "Macromedia";
   for (var i=0; i<10; i++) {
       trace(i);
       if (myVariable + 3 == 5) {
           trace(myOtherVariable);
       }
   }
}

Dòng đầu tiên xác định những đoạn code sau đó được kích hoạt khi mà user nhấn vào nút. hàm on(press) chỉ có thể sự dụng trong vào trong nút mà thôi. Ngoài ra bạn có thể dùng on(release) nếu như bạn muốn kích hoạt đoạn mã trên sau khi user nhấn nút, và buông tay.


Dấu ngoặc móc {} ờ đầu và cuối đoạn code, gói đoạn code đó vào làm một, và đều được kích hoạt khi nhấn nút. Các bạn lưu ý thấy đoạn code được viết vào trong để cho dễ nhận thấy cả đoạn code này phụ thuộc vào on(press). Các bạn nên viết lùi vào trong cho những đoạn code phụ thuộc vào 1 lệnh hay hàm nào đó.

Dòng thứ hai lập ra biến số (mình sẽ viết tắt là var nhe) tên myVariable, và đặt giá trị bằng 7 cho nó. tương tự hàng kế tiếp lập ra var tên là myOtherVariable và cho giá trị của nó là "Macrmedia". Cả 2 câu này được kết thúc bằng dấu chấm phẩy ;


Dòng thứ 4 chính là vòng lặp (mình sẽ gọi là loop cho tiện nhe) for (sẽ nhắc tới các loại loop ở phía dưới) và các điều kiện của loop này. Nó sẽ lặp 10 lần với điều kiện bắt đầu là i=0 và nó sẽ tăng thêm 1 cho mỗi lần lặp cho tới khi nó lên tới 9. Tương tự như on(press), for loop cũng có đoạn code cho riêng nó, và đựơc bọc quanh bằng { } và đoạn code trong đó chỉ kích hoạt khi mà các điều kiện của for loop được thỏa mãn.
Dòng thứ 5 là lệnh trace(), lệnh này chỉ viết thông tin ra ở output window trong lúc bạn làm việc với Flash, user sẽ không thấy được. Kế tiếp là điều kiện, if là từ khoá trong Flash, và nó sẽ kiểm tra kết quả của phép so sánh myVariable + 3 ==5. Nếu mà kết quả là đúng thì nó sẽ kích hoạt lệnh trace ở trong, và sẽ viết ra output window giá trị của myOtherVariable
Vậy là bạn đã thấy một đoạn script hoàn chỉnh bằng AS rồi. Tiếp theo chúng ta sẽ nói đến vài phần khác của AS.

Output window

Ở trên chúng ta có nhắc tới output window, mà không nói rõ là gì. Output window là một window trong software Flash, và chỉ xuất hiện khi mà bạn chảy thử movie. Nếu Flash compile movie cho bạn và phát hiện ra lỗi thì Flash sẽ viết ra các output window này. Trong khi chạy thử movie, thì lệnh trace() mới có thể viết các thông tin ra output window. Output window rất quan trọng trong việt "diệt bọ", dùng nó chung với trace bạn có thể quan sát các thông số, biến số, các đối tượng, thuộc tính đối tượng .v.v

Trong lúc học AS, bạn có thể viết một đọan script ngắn không làm gì cả những chỉ để viết thông tin ra output window, như đoạn code trên.

Thực hành: viết thông tin ra output windown

Cách tốt nhất để hiểu rõ chức năng của output window là sử dụng nó. Bây giờ mình sẽ viết một đoạn code ngắn gửi thôi tin ra output window nhe.

1. Tạo một file mới
2. Chọn frame đầu tiên của movie, mở Action panel. Chỉnh kích thước cho action panel đủ lớn để viết, và nhớ dùng expert mode
3. Kích chuột vào phần viết script và viết câu sau: trace("hello world");
4. Chạy thử movie (Control + Enter)
5. Bạn thấy gì ở output window? (Nếu output window của bạn chưa mở thì hãy nhấn F2)

Giống như action panel, output window có 1 cái pop-up menu nho nhỏ ở trên góc phải. Bạn có thể dùng nó đễ copy, xoá hay save nội dung của output window hay có thể tìm kiếm chữ, v.v. Ngoài ra, pop-up menu này có phần cho bạn chỉnh chế độ "diệt bọ", bạn có thể chọn không cần output window in ra các lỗi (none), hay chỉ in lỗi (error), hay chỉ in cảnh báo (error) và cuối cùng là in ra chi tiết các lỗi hay cảnh báo (verbose)



Biến số cục bộ và toàn bộ

Ở trong giờ thứ 3, chúng ta có nhắc đến variable (biến số) dùng đễ lưu trữ thông tin. Và sử dụng variable trong AS rất dễ dàng. Bạn chỉ cần ấn định giá trị cho variable. Ví dụ: myVariable = 7. Chúng ta tạo variable có tên là myVariable và ấn định 7 là giá trị cho nó. (bạn có thể đặt tên cho variable là bất cứ gì bạn muôn)


Bây giờ bạn có thể thử viết đoạn code sau:

ActionScript

var1= 7;
var2= "hello world";
trace ("var1: " + var1+ " /var2: " + var2);

Khi bạn chạy thử movie thì output window sẽ có hàng chữ sau: var1: 7 /var2: hello world Vì số 7 và "hello world" được chứa trong var1 và var2 sẽ được in ra.

Variable có 2 loại, local và global. Global variable (biến số toàn bộ) thì bạn có thể truy cập giá trị của nó ở bất cứ nơi nào trong movie. Tạo global variable không đòi hỏi một bạn phải làm một cái gì đặc biệt cả, bạn có thể dùng nó như cách trên, và Flash tự động biến nó thành global variable. Flash movie dùng hệ thống level, và timeline của movie chính là root leve (gốc), còn các movie clip cũng chính là một Flash movie nhỏ ở trong Flash movie lớn. Các hình ảnh, script ở trong một movie clip là 1 level thấp hơn root level.
Local variable (biến số cục bộ), khác với global variable, local variable chỉ có trể truy cập trong cùng một đoạn code, hay trong cùng một timeline. Khi dùng local variable thì khi ra khỏi timeline hay đoạn code đó thì Flash sẽ xoá local variable ra khỏi bộ nhớ. Muốn tạo local variable thì dùng từ khoá var trước tên của local variable, ví dụ: var myLocal = "This is local"; Bạn chỉ cần dùng từ khoá var 1 lần thôi, những lần dùng sau đó thì chỉ cần dùng tên của local variable thôi. Ví dụ đoạn code:

ActionScript

var myLocal = 9;
myLocal = 11;
trace(myLocal);



Phép so sánh và các phép tính

So sánh 2 giá trị trong AS rất đơn giản, dùng các ký hiệu toán học như <, >, =


Khi ấn định giá trị thì dùng dấu =, và để cho khác biệt thì khi so sánh dùng ==. Đoạn code sau xét coi giá trị của a có bằng 7 không, và in kết quả ra output window. Và khi test đoạn code sau, bạn sẽ thấy true ở output window

ActionScript

var a = 7;
trace(a == 7);

Nếu bạn dùng lộn = với == thì sẽ bị lỗi ở runtime chứ Flash sẽ không có thể tìm được lỗi này cho bạn.


Bạn có thể dùng == để so sánh 2 chuỗi mẫu tự:

ActionScript

var myString = "Hello World.";
trace(myString == "Hello World.");
trace(myString == "hello world.");

Khi bạn test đoạn code trên thì bạn sẽ có được "true" và "false" ở output window, vì lần so sánh thứ nhất thì bằng nhau, nhưng lần thứ hai thì không vì chữ H và h khác nhau.


Nếu bạn muốn thử coi 2 giá trị có khác nhau không thì dùng ky hiệu !=

ActionScript

var a = 7;
trace(a != 9);
trace(a != 7);

Hàm trace đầu tiên sẽ cho ra "true" vì 7 khác 9, và cái thứ hai thì sẽ cho ra "false"


Nếu bạn muốn thử giá trị coi lớn hơn hay nhỏ hơn thì dùng ><

ActionScript

var a = 7;


trace(a < 8);
trace(a > 6);
trace(a < 1);

Đoạn code trên sẽ cho ra "true", "true" và "false" trong output window vì "a" quả thật nhỏ hơn 8 và lớn 6, nhưng không nhỏ hơn 1.

Nếu bạn muốn thử giá trị coi lớn hơn hay bằng nhau hoặc là nhỏ hơn hay bằng nhau thì dùng ký hiệu >=<=



ActionScript

var a = 7;


trace(a <= 9);
trace(a >= 5);
trace(a >= 7);

Đoạn code trên sẽ cho ra 3 kết quả "true" cả.


Bạn có thể thay đổi giá trị của variable với các phép tính đơn giản như cộng (+), trừ (-), nhân (*), chia (/). Ví dụ muốn thêm 4 vào giá trị của a thì viết a = a + 4. AS cũng có cách viết tắt như Java, C++ cho vì dụ này, a += 4 Nếu bạn muốn thêm 1 vào a thì bạn có thể viết như 2 cách trên a = a +1a += 1 và còn cách thứ 3 a++ . Dấu ++ chỉ làm tăng thêm 1 cho giá trị đó thôi. Có 2 cách dùng ++, 1 là để sau variable như cách trên, và 1 cách thì để trước variable. Bây giở thư đoạn code sau:

ActionScript

var a = 7;


trace(a++);
trace(a);

Ở output window bạn sẽ thấy 7 rồi mới tới 8. Ở dòng thứ 2, hàm trace sẽ cho ra giá trị của a trước rồi mới tăng giá trị của a lên thêm 1. Bây giờ xem ví dụ khác:



ActionScript

var a = 7;


trace(++a);
trace(a);

Ở output window bạn sẽ thấy 8 và 8. Ở dòng thứ 2 của ví dụ này, hàm trace sẽ tăng giá trị của a trước rồi mới cho ra giá trị của a. Tương tự như ++, AS cũng có cách viết tắt cho giãm giá trị của variable là dấu -, -=, =---. Phép tính nhân và chia thì chỉ có *, *=, /, /= thôi.



Điệu kiện

Trong AS và các ngôn ngữ khác, if ... else chính là các từ khoá của điếu kiện. Tiếng việt có nghĩa là "nếu ... nếu không". Từ khoá if dùng kết quả của sự so sánh nào đó để đi tới quyết định kích hoạt một đoạn code. Đoạn code sau sẽ so sánh giá trị của variable a với 7, nếu đúng thì Flash sẽ chơi ở frame 10



ActionScript

if (a == 7) {


   gotoAndPlay(10);
}

Từ khoá if luôn bắt đầu cho 1 điều kiện và tiếp theo sẽ là sự so sánh. Luôn đặt code so sánh ở giữa ngoặc đơn (). Tất cả các code được kích hoạt nều điều kiện được thoả mãn sẽ để trong đâu ngoặc móc {}.


Từ khoá else bổ sung cho if trong trường hợp bạn muốn thực hiện một đoạn code nếu điều kiện của if không được thỏa mãn. Ví dụ:

ActionScript

if (a == 7) {


   gotoAndPlay(10);
}  else {
   gotoAndPlay(15);
}

Nếu trường hợp cần thỏa mãn nhiều điều kiện thì có thể dùng cú pháp if .... else if ... else. Bạn có thể có bao nhiều cái else if cũng được.


Nãy giờ ta chi nói tới điều kiện dựa trên 1 sự so sánh, những AS cũng cho phép dùng so sánh đa hợp (compound comparision). Trong điều kiện của Flash ta có thể dùng nhiều so sánh đễ đi tới một kết quả chính xác hơn. Ví dụ nếu như a lớn 10 và a phải nhỏ hơn 15 thì ra lệnh cho Flash chơi ở frame 10.

ActionScript

if ((a > 10) and (a < 15)) {


   gotoAndPlay(10);
}

Từ khoá and (còn có thể được viết là &&) yêu cầu phải thoả mãn điều kiện của 2 phép so sánh. Bạn cũng có thể dùng từ khoá or (còn có thể được viết là ||)nếu như chỉ cần thoả mãn 1 điều kiện trong 2 phép so sánh thôi.



ActionScript

if ((a > 10) or (a < 15)) {


   gotoAndPlay(10);
}

Vòng lặp

Cú pháp của vòng lặp (loop) thì hơi rắc rối hơn so với cú pháp của điều kiên if. nhưng nó tương tự như C, C++, Java. Gồm có 3 loại vòng lặp chính là for loop, while loopdo-while loop


for loop được coi là vòng lặp chính với từ khoá for và cú pháp của nó nhìn như sau:

ActionScript

for(var i=0;i<10;i++) {


   trace(i);
}

Nếu bạn cho chạy đoạn code trên thì bạn sẽ có được từ số 0 tới 9 ở output window. for loop tăng giá trị của variable i trong suốt quá trình thực hiện loop. Điều kiện của for loop có 3 phần chính, và được cách biệt bởi dấu chầm phẩy (. Đầu tiên là điều kiẹn bắt đầu với việc tạo local variable cho for loop var i=0. phần này for loop chỉ thực hiện có 1 lần duy nhất lúc bắt đâu. Phần thứ hai là điều kiện chính của for loop i<10, sẽ được thực hiện ở mỗi vòng lặp. Nếu điều kiện này thoả mãn thì mới tiếp tục vòng lặp. Và phần cuối cùng là phép tính cho sự tiếp nối của for loop ở mỗi vòng lặp, ở đây là i++ nên giá trị của i sẽ được tăng sau mỗi vòng lặp trước khi vòng lặp mới bắt đầu. 3 phần này đều được bỏ vào trong ngoặc đơn (). Còn những code thực hiện trong mỗi vòng lặp thì ở trong ngoặc móc {}. Bây giờ chúng ta giả làm computer và chạy cái for loop này.



  1. Tạo local variable và ấn định giá trị cho nó bằng 0

  2. Kiểm tra giá trị của i có nhỏ hơn 10 không, nếu nhỏ hơn 10 thì vòng lặp thực hiện các code ở trong {}, còn không thì tới bước thứ 5

  3. hàm trace viết giá trị của i ở output window

  4. cộng 1 vào giá trị của i, và trở về bước thứ 1

  5. ra khỏi for loop

Tới bước thứ 5 thì giá trị của i sẽ bằng 10
while loop với từ khoá while có cú pháp nhìn tương tự như sau:

ActionScript

while (a > 0) {


   // code thực hiện trong while loop
}

Đơn giản hơn for loop, while loop tương tự như điều kiện if đơn giản, thực hiện các code trong vòng lặp nếu điều kiện của while loop được thoã mãn, vì vậy bạn dễ dàng rồi vào trường hợp vòng lặp vô hạn, và dẫn đến tình trạng treo máy. Trong đoạn code trên, bạn phải làm thế nào để cho co 1 lúc a sẽ nhỏ hay bằng 0 để cho vòng lặp ngừng lại.

Giống như while loop, do-while loop có cú pháp nhìn như sau:

ActionScript

do {
   // code thực hiện trong do-while loop


}  while (a > 0);

Chỉ khác với while loop là do-while loop thực hiện code trong vòng lặp trước rồi mới kiểm tra điều kiện. (while loop kiểm tra điều kiện rồi mới chạy code trong vòng lặp)


Muốn phá ra khỏi quá trình tự hành của 3 loại loop trên thì dùng lệnh breakcontinue. Lệnh break sẽ phá ra khỏi loop hoàn toàn trong khi lệnh continue thì chỉ phá ra khỏi vòng lặp hiện tại và bắt đầu vòng lặp mới. Tạo ra một ví dụ cụ thể rất phức tạp, nên chúng ta tạm khoan bàn tới 2 lệnh này cho tới các bài sau.

Hàm

Cho tới bây giờ các script của chúng ta đều được viết vào frame đầu tiên của moive, cách này chỉ tốt cho nhưng chương trình đơn giản, nhưng nếu mà chương trình trở nên phức tạp thì đây không phải là cách. Hàm (function) sẽ cho phép chúng ta cấu tạo và quản lý code dễ dàng hơn trong các chương trình phức tạp. Dưới đây là một function đơn giản:



ActionScript

function myFunction(num) {


   var newNum = num + 3;
   return newNum;
}

Fuction bắt đầu bằng từ khoá function, tên của function có thể là bất cứ chữ gì như cách bạn đặt tên cho variable, nhưng lưu ý cách đặt tên cho fuction làm sao để người ta đọc tên có thể biết được chức năng của function. Theo sau tên của function sẽ là thông số (parameter, cho ngằn mình sẽ gọi thông số là param trong các bài viết này) được để trong ngoặc đơn (). Function có thể co 1


hay nhiều param hay không cần param cũng được. Param chẳng qua chỉ la variable được dùng trong function, nhưng variable này được truyền tự ngoài vào khi function được gọi. Đoạn code được function thực hiện sẽ nằm giữa ngoặc móc {}. Bây giớ chúng ta phân tích đoạn code trên. Khi function myFunction được gọi, thì param num được truyền vào, sau đó function myFunction tạo ra một local variable tên là newNum, và ấn định giá trị của newNum bằng giá trị của param num cộng với 3. Sau đó myFunction dùng lệnh return để ấn định giá trị của newNum là kết quả của myFunction. Lệnh return là lệnh đặc biệt chỉ được dùng ở trong function mà thôi. Lệnh này sẽ kết thúc function.
Để sử dùng function này, dùng nó như một lệnh hay hàm của AS, giống như là trace() vậy đó. Đây là ví dụ: var a= myFunction(7);. Trước tiên tạo một local var rồi sau ấn định giá trị của local var này bằng kết quả của myFunction với param là 7, và cuối cùng thi local var này sẽ bằng 10.
Một trong ưu điểm của function là bạn có thể tái sự dụng. Dưới đây là hàng code dùng chung 1 fuction và cho 3 kết quả khác nhau

ActionScript

trace(myFunction(7));


trace(myFunction(13));
trace(myFunction(2));

Khi chạy đoạn code này thì output windown sẽ là 10, 16 và 5. Ví có thể tái sử dụng nên chúng ta chỉ cần thay đổi code ở trong myFunction thì tất cả các kết qủa có được từ gọi function này cũng thay đổi theo luôn.



Dot Syntax

Một điều bạn sẽ thấy rất nhiều trong quá trình học AS là dot syntax (hỗng biết dịch sao bây giờ) Dot syntax là phương pháp được dùng trong lập trình theo hướng đối tượng (oob: object oriented programming).


Đây là một ví dụ của dot syntax. Nếu bạn muốn lấy căn bình phương của một số, và trong Flash đã có sẵn function để làm chuyện này rồi, và hàm này thuộc về đối tượng toán, tên là Math. Vậy muốn gọi function này thì trước tiên bạn phải gọi tên đối tượng mà fucntion này trực thuộc, đó là Math, theo sau đó là dấu chấm (dot), và rồi tới tên của function đó là sqrt. Cách viết như sau:

ActionScript

var a = Math.sqrt(4);


Một cách dùng dot syntax khác là để truy cập đặc tính hay variable của một đối tượng, như là movie clip.



ActionScript

var a = myClip._x;


var a = myClip.myVariable;

Chúng ta sẽ đề cập đến đối tượng Math và MovieClip trong các bài tới, còn bây giờ thì quan trọng là bạn nắm được khái niệm về dot syntax.



Chú giải

Một trong đức tính cần có của lập trình viên là viết code làm sao cho dễ đọc và dễ hiễu. Nhưng nhiều khi dù khi viết có cố gắng cách mấy thì những đoạn code đó vẫn khó hiễu cho người xem, vì vậy mới cần những lời chú giải. Muốn chú giải trong AS thì chỉ cần dùng ký hiệu// trước câu chú giải đó. Nếu chú giải nhiều hơn vài dòng thì có thể dùng kiểu sau/* ..... chú giải ....*/.



ActionScript

/*
   chú giải:


   cộng 2 cho a
   cộng 2 cho b
*/
a += 2; // add 2 a
// add 2 to b
b += 2;

Debugging

Thường thì thời gian diệt bọ tốn gần 1/3 thời gian phát triển chương trình. Nếu bạn nắm vững được "nghê thuật" diệt bọ thì bạn sẽ rút ngắn được rất nhiều thời gian. Có 3 cách diệt bọ hữu hiện là: phân tích, viết message ra output window và dùng AS debugger.


Với các loại bọ đơn giản thì phân tích các đoạn code sẽ giúp bạn bắt trúng con bọ cần diệt. Dùng output window để theo dõi các đối tượng, vòng lặp, điều kiện, và nhờ vào đó bạn có thể biết được chổ nào trong code có vấn đề, cuối cùng là dùng AS debugger có sẳn trong Flash. Debugger window cho phép bạn có thể coi hết tất cả moi thành phần trong movie của bạn, cho phép bạn dùng AS bất chứ khi nào và chổ nào bạn muốn. Tham khảo thêm phần trợ giúp của Flash để biết cách dùng debugger.
Giờ thứ 05: Điều khiển luồng movie, Control the flow of the movie
Sử dụng AScript là cách điều khiển movie đơn gỉản nhất, nhung lại hiệu quả nhất.
Chương này bạn sẽ học cách :

  • làm sao để dừng Movie trên frame

  • Sao để nhảy từ frame này đến frame kia

  • tạo nút cho phép điều khiển movie

  • tạo một slide show đơn giản

  • tạo một biểu diễn đầy đủ..

Dừng movie
Đây là câu lệnh stop:

ActionScript

stop();


Khi bạn dùng câu lệnh này , movie chỉ tạm dừng ở frame mà bạn đặt câu lệnh. Các animation bên trong movieClip và các file đồ họa vẫn tiếp tục chạy trên frame đó. Nhưng animation của time line sẽ bị dừng.

Để cho animation của timeline tiếp tục chạy, ta sử dụng một lênh đơn giản đó là lệnh play.. ta sẽ bàn đến nó sau.

Ví dụ
Tại frame 1, bạn hãy thả một text box và viết vào đó Chữ A
Tại frame 2, bạn hãy thả một text box và viết vào đó Chữ B
Tại frame 3, bạn hãy thả một text box và viết vào đó Chữ C

Bây giờ bạn hay đặt câu lệnh stop(); vào Frame 2, bạn se thấy chữ A xuất hiện rất nhanh rồi đến chữ B, nhưng chữ C sẽ ko thấy xuất hiện,, Đơn giản vì câu lệnh stop() đã dừng animation của timeline tại Frame 2.


Nhảy từ frame này đến frame kia

Một câu lệnh cơ bản của AS là câu lệnh gotoAndPlay. Câu lệnh này giúp bạn có thể nhảy từ frame này đến frame mà bạn muốn. Bạn có thể sư dụng số thứ tự của frame hay là tên của frame



ActionScript

gotoAndPlay(7);


gotoAndPlay(20);
gotoAndPlay("my frame label")

bạn có thể sử dụng nhiều movies , hay còn gọi là cảnh(scene) . Nếu Câu lệnh gotoAndPlay chỉ có một tham số, thì tham số đó là frame. Nhưng nếu có 2 tham số,thì tham số đầu tiền là tên của scene, còn tham ssố thứ 2 là số thứ tự của frame hay tên frame.



ActionScript
gotoAndPlay("My Scene","My Frame");

Khi bạn dùng gotoandPlay,movies sẽ nhảy đến frame mà bạn gọi , và tiếp tục chạy, nhưng nếu bạn muốn nó nhảy đến frame và dừng lại, bạn co thể sử dụng gotoAndStop . Câu lệnh này dùng y hệt như gotoAndPlay, với lựa chọn 1 tham số hay 2 tham số.

Ngoài ra có thêm 2 câu lệnh cũng họat động giống gotoAndStop , đó là nextFrame and prevFrame
Để hiểu rõ hơn về các câu lệnh này, ta sẽ đi tiếp phần sau...

Tạo nút (button)

Nút là một trong 3 biểu tượng (symbol) chính trong Flash, 2 cái kia là movie cilps và hình

Tạo một button

Có nhiều cách để tạo nút. Một trong nhưng cách đó là chọn Insert, New Symbol từ Menu. Một hộp thoại sẽ hiện lên và hỏi bạn đặt tên và lựa chọn biểu tượng của bạn là loại Movie clip, button, hay đồ họa. Bạn hãy chọn Button.

Bây giờ trong cửa sổ chính của Flash sẽ thay đổi, timeline của button sẽ thay thế timeline của movie chính. Có 4 frames trong timeLine của button. Chúng có tên là Up, Over, Down, HIt. CHúng thể hiện 3 trạng thái của button, và vùng họat động của button.

Nếu bạn đặt một đồ họa, chẳng hạn là một vòng tròn, trong frame đầu tiên(UP) và ko có gì trong 3 frame sau, trạng thái Over và Down của button sẽ giống như trạng thái của Up. VÙng hoạt động của button cũng tương tự như vậy.

Mặt khác , bạn có thể tạo các hiệu ứng khác nhau cho button của bạn. VÍ dụ nếu bạn đổi mầu của vòng tròn là màu xanh ở Frame OVER,có nghĩa là khi bạn đưa chuột qua button, button sẽ chuyển sang màu xanh.

Khi bạn tạo xong 1 button, bạn trở lai movie timeline chính. Và button của bạn đã sẵn sàng trong thư viện của FLash. Bạn chỉ viêc bấm F11, tìm button của bạn và kéo thả nó vào nơi nào bạn cần trên cửa sổ thiết kế.

Tạo script cho button

Để đặt script cho button, đầu tiên hãy chọm một button. Sau đó vào cửa sổ Action


bằng cách bấm chuột phải lên button và chọn Action từ menu xuất hiện.

Hãy Chắc chắn rằng cửa sổ Action đã được đặt ở chế đọ Expert. Bạn có thể kiểm tra băng một popup menu ở góc trên cùng bên phải của cửa sổ.

Đây là một đoạn mã thông thường cho button. Bạn có thể đặt nó trong cửa sổ mã và sau đó kiểm tra movie xem nó họat động thế nào.

ActionScript

on (release) {


   trace("You clicked the button!")
}
on : là một keyword, được gọi ra để xử lí một sự kiện
Release : Là một sự kiện, khi người sử dụng click vào button và nhả chuột ra. Đoạn mã trace sẽ được thực thi.
Ngoài ra Release có thể thay thế bằng sự kiện PRESS, sự kiện này chỉ khác Release ở chỗ khi người sử dụng bấm vào button, đoạn mã trace sẽ đươc thực thi mà ko cần phải thả chuột ra.
Trace : là in ra màn hình dòng chữ YOU CLICKED THE BUTTON.

Thực Hành: Tạo một Slide Show đơn giản...

Có lẽ ko phải diễn tả nhiều về Slide Show, các bạn hãy tưởng tượng giông Power Point.. Khi chúng ta bấm chuột, các slide sẽ chuyển sang slide khác.

1. Mở Flash, chọn New

2. Trong Layer 1, từ Frame 1 đến Frame 4, bạn hãy đăt các biểu tượng hay hình ảnh, text khác nhau để phân biệt được các frame

3. Sau đó bạn tạo một layer mới, hãy đặt một button lên layer này.Tiếp theo bạn chọn Frame 4 của layer 2, và bấm F6. Điều này đảm bảo cho button của bạn sẽ xuất hiện trong tất cả các Frame của Layer 1.

Bây giờ copy đoạn mã sau vào button của bạn, chú ý nhớ là copy vào action của button, chứ ko phải vào bất kì frame nào



ActionScript

on (release) {


   nextFrame();
}

Cuối cùng chọn Frame 1 Layer 1 action và chèn đoạn code sau



ActionScript
stop();

Hãy chạy thử slide show của bạn = cách bấm Ctrl Enter.


5) Xây dựng một presentation đơn giản:
Presentation này sử dụng nguyên tắc giông hệt như ví dụ Slide show ở trên, các bạn hay down load file FLA để xem .. easy

Giờ thứ 06: Điều khiển movie clip, Controlling Movie Clips
6th Hour Điều khiển movie clip
Bạn sẽ học
1- ra lệnh cho movie clip
2-Tạo playback cho animation
3-TÌm hiểu đích(target) của movie clip
4-Tập viết code cho movie clip
5-Tạo movie clip có thể chạy lùi lại.

1) Ra lệnh cho movie clip :

Một movie chính có thể rất đơn giản. NÓ chỉ cần 1 frame và một movie clip. Nhưng bản thân movie clip lại có thể là một animation dài. Việc này dễ dàng thực hiện mà ko cần Actioncript.

Để điều khiển được movie, bạn phải đặt tên cho movie clip. Chú ý rằng một movies clip có 2 tên, một tên sử dụng cho timeline . Một tên sử dụng cho actioncript. 2 tên này có thể đặt trùng tên nhau hoặc khác tên nhau.

Làm sao để đặt tên cho movie clip :
Chọn insert -----> New Symbol (hoặc bấm Ctrl F8), đặt tên cho movies clip
(nhớ lựa chọn option movies clip, chứ ko phải là button hay graphic)
Tên này được sử dụng cho timeline. vd: gear animation

Thả movie gear animation vào cửa sổ thiết kế.. PHía dưới cửa sổ properties, ban sẽ thấy box instance name.. Đặt tên cho movie


tên này được sử dụng cho Action script , vd : gears

và như vậy, khi bạn lập trình , tên sử dụng là gears , chứ ko phải gear animation.


bạn có thể sử dụng dấu chấm để đưa ra các lênh cho movie của bạn. ví dụ

ActionScript
gears.stop();
gears.gotoAndStop(5);

Nhớ rằng movie clip luôn có level. Nếu đoạn mã được đặt trên chính movieclip, bạn ko cần sử dụng tên movies, chỉ cần gotoAndStop();. Nếu bạn đặt cả tên movie vào, Flash sẽ tìm movie của bạn từ timeline chính.. Tức là sẽ phải qua 2 level. ---> chậm hơn chút.

2)Animation Playback Controller
Hãy down load source code từ trên phần download và xem. Về cơ bản, chúng ta làm các việc sau:

- Tạo một Movie ,đặt tên là gear animation


- Đặt instance name là gear(hướng dẫn ở trên)
- Frame đầu tiên của time line chính, chèn code

ActionScript

gears.stop();


-Tạo các button Advance, Previous, Play, Stop, and Rewind


-Code cho các button lần lượt là
Advance

ActionScript

on (release) {


    gears.nextFrame();
}

Previous



ActionScript

on (release) {


    gears.prevFrame();
}

Play


ActionScript

on (release) {


    gears.play();
}

Stop


ActionScript

on (release) {


    gears.stop();
}

Rewind


ActionScript

on (release) {


    gears.gotoAndStop (1);
}

3) Target một movie

Level cơ bản đầu tiên của Flash là time line chính(Level 0). Nếu bạn muốn ra lệnh cho time line này, bạn dùng code sau

_root.gotoAndStop();


thậm chí nếu bạn đặt code ở time line chính, bạn ko cần _root. Chỉ cần gotoAndStop();

Giả sử nếu bạn có một movie trên time line, tức là bạn có một level sâu hơn(level 1). Nếu bạn từ time line chính, muốn goi movie gears , bạn phải dùng câu lệnh

gears.gotoAndStop(7);
_root["gears"].gotoAndStop(7);
this["gears"].gotoAndStop(7);

Cả 3 cách trên đều giống nhau.. Tuy nhiên this có nghĩa là level hiện hành. VÍ dụ trên, level hiện hành của this là level 0. Nhưng nếu code đặt trong movie, level hiện hành sẽ là level 1. Bạn phải chú ý.

Giả sử bạn có một movie khác bên trong movie, tức là bạn có level 2. Nếu bạn muốn từ level 1 gọi đến level 2, bạn phải dùng _parent.
Parent dùng giống như root, nhưng khác ở chỗ, nó được gọi từ level ở trên. Còn root được gọi từ level 0 (tức là level gốc).

Thuận lợi từ việc sử dụng root, this là bạn có thể gán biến cho movie clips



ActionScript

var whichClipToUse = "gears";


this[whichClipToUse].stop();

Thuận lợi của vịệc sử dụng this nhiều hơn root ở chỗ , ko phải lúc nào mọi thứ cũng xảy ra ở time line chính, đôi khi ta chỉ muốn nó xảy ra ở một level nhất định. Bởi vậy this là cách tốt nhất để goi level của một movie. Tuy nhiên trong những trương hợp đơn giản, hay nhất là cứ đặt tên cho movies.

4) Mã cho movie clip
Chúng ta đã bàn về button ở trên, vậy về cơ bản movie clip script cũng giống button, đó là
ActionScript

onClipEvent (load) {


   trace("This clip has been loaded.");
}

onClipEvent : key word gọi sự kiện (giống on của button)


load : sự kiện này xảy ra khi movie clip xuất hiện lần đầu tiên trên màn hình . NÓ chỉ xảy ra một lần.

Nhớ rằng ngay cả khi time line chính bị đừng, movie clip nằm trên time line vẫn tiếp tục chạy. Sự kiên enterFrame xảy ra liên tục bên trong movie clip mỗi khi đến một frame mới. Sự kiện này sẽ thực thi đoạn mã một cách liên tục cho đến khi nó bị kết thúc.



ActionScript

onClipEvent (enterFrame) {


   trace("This clip has entered a new frame.");
}
bây giờ hãy copy 2 đoạn code trên vào của sổ action của timeline chính và run .. bạn sẽ thấy

ActionScript

This clip has been loaded


  This clip has entered a new frame
  This clip has entered a new frame
  This clip has entered a new frame
  This clip has entered a new frame

dòng chữ sẽ tiếp tục hiện ra cho đến khi bạn tắt movie.



Giờ thứ 07: dịch chuyển và thay đổi movie, Moving and Changing Movie Clips
Một movie clip (MC) bao giờ cũng có các thuộc tính, cho phép bạn xác định vị trí, phóng to thu nhỏ, quay, thậm chí làm nó biến mất.
Chương này các bạn sẽ biết cách:
-thay đổi vị trí của mc
-xác đinh vị trí chuột
-làm sao để quay một mc
-làm sao để phóng to mc
-làm sao để movie invisible
1) Vị trí của MC:
Mọi thứ trong Flash đều có vị trí. VỊ trí này được đo bằng PIXEL. Góc trên cùng bên trái của màn hình là vị trí (0,0) .Nó là vị trí giao của hàng ngang và cột dọc.
Nếu bạn sử dụng một movie mặc định, thì góc dưới bên phải sẽ là 550,400. Có nghia là 550 pixel từ bên trái sang và 400 pixel từ bên trên xuống.
nhìn hình sau để rõ hơn.


2) Vị trí của Mouse:

Cũng như movie, mouse cũng có thể xác đinh được tọa độ.. CHú ý thuật ngữ mouse ở đây là nói đến con trỏ (cursor), chứ không phải con chuột bạn đang cầm trên tay.. ^^


Có hai thuộc tính cơ bản của con trỏ , đó là _xmouse và _ymouse.

Vậy _xmouse và _ymouse là thuộc tính của chính đối tượng mà chúng được gán. Nếu bạn sử dụng trên time line chính, thì chúng là thuộc tính của time line. Nếu bạn sử dụng chúng trên movie clip, thì nó là thuộc tính của movie clip. Nếu xmous y mouse là thuộc tính của time line chính, nó sẽ mặc định là góc trái trên cùng. Nếu xmouse ymouse là thuộcc tính của 1 movie clip, nó sẽ mặc định ở trung tâm của MC.

Hầu hết các trường hợp thuộc tính liên quan đến movie chính, bạn nên dùng cách
_root._xmouse và _root._ymouse

Đây là một đoạn code ví du



CODE

onClipEvent (enterFrame) {


   trace(_root._xmouse);
   trace(_root._ymouse);
   trace("");
}

Khi bạn chạy movie, bạn sẽ thấy các cặp số được in ra, đó chính là tọa độ x,y mouse .Hãy dịch chuyển mouse lên góc trái trên, bạn sẽ thấy ở đó vị trí mouse là 0.0. hoặc góc phải dưới, tọa độ là 550 400.


Chú ý: khi bạn đưa chuột ra ngoài Flash window, tọa độ chuôt xmouse y mouse không thay đổi. Nếu bạn di chuyển chuột thật nhanh từ trung tâm của cửa sổ ra ngoài cửa sổ, các giá trị cũ vẫn ở đó cho đến khi bạn quay trở lại cửa sổ. VÌ vậy, bạn phải luôn lên kế hoạc cẩn thẩn trước khi dùng xmouse, y mouse

3) Làm movie quay

Một thuộc tính khac đó là thuộc tính _rotation

Thuộc tính rotation chấp nhận giá trị là góc độ. Một vòng tròn chia ra 360 độ, miền giá trị cả thuộc tính rotation là -180 và 180. Bạn có thể sử dụng giá trị integer hoạc floating point.

Giá trị của _rotation luôn luôn ở trong vòng -180 và 180, ví dụ 179, hoặc -179. Nhưng nếu bạn đặt nó là 181, nó sẽ hiểu thành góc độ -179.

vậy để quay một movie, đơn giản là đặt giá trị cho nó, bạn cũng có thể sử dụng các biểu toán ++, += để thay đổi giá trị . Hãy xem ví dụ sau

CODE

myClip._rotation = 90;


myClip._rotation++;
_root["myClip"]._rotation = 45;
this._rotation += 0.5;


4) Co giãn đàn hồi một MC:

Bạn có thể làm co giãn, thay đổi chiều dài chiều rộng của movie clip


Scale thuộc tính

THuộc tính để làm việc này là _xscale cho chiều ngang và _yscale cho chiều dọc.

Các giá trị được gán cho x,y scale là phần trăm. Có nghĩa giá trị 100 là 100 phần trăm , đây là thuộc tính mặc đinh cho một movie clip gốc. Bạn có thể sử dụng các số nhỏ hơn như 50 để làm movie co lại. Hoặc có thể sử dụng số to hơn, 200 để giãn movie ra. Thậm có thể dùng các giá trị âm để lật movie.

ví dụ 07mousesclae.fla chứa một đoạn mã mà chúgn ta sẽ gặp rất nhiều sau này. Nó kiểm tra tọa độ của mouse,. Sau đó xác đinh từ mouse đến trung tâm movie xa bao nhiêu. Rồi nó sử dụng khoảng cách ,cả chiều cao chiều rộng để tính phần trăm tỉ lệ cho movie clip.


CODE

onClipEvent (load) {


   // get the original width and height of the mc
   origWidth = this._width;
   origHeight = this._height;
}
onClipEvent (enterFrame) {
   // get the distance from the center of the mc to the mouse
   dx = _root._xmouse-this._x;
   dy = _root._ymouse-this._y;

   // calculate the percentage of scale


   sx = 100*dx/(origWidth/2);
   sy = 100*dy/(origHeight/2);

   // set the scale of the mc


   this._xscale = sx;
   this._yscale = sy;
}

Chú ý ở đây ta sử dụng 2 thuộc tính mới, _width và _height trả về chiều cao và chiều rộng của movie clip bằng Pixel. CHúng được lưu giú trong onClipEvent (load) vì để khi ta cần lấy lại giá trị gốc của movie.

Thuộc tính _width, _height


Sự khác nhau giữa scalewidth,height í scale sử dụng giá trị phần trăm. Còn width height sử dụng pixel . Movie có thể có giá trị sau: width 75, height 45, nhưng scale cho cả xscale and yscale là 100 phần trăm.

Dưới đây là một ví dụ sử dụng width height thấy thế cho xscale, yscale.



CODE

onClipEvent (enterFrame) {


   // get the distance from the center of the mc to the mouse
   dx = _root._xmouse-this._x;
   dy = _root._ymouse-this._y;

   // set the scale of the mc


   this._width = dx*2;
   this._height = dy*2;
}

bạn có thể thấy code này ngắn gọn hơn ơ trên. bởi vì nó ko sử dụng sự kiên onClipEvent(load) bởi gái trị chiều dài chiều cao của movie gốc ko cần lưu trữ.Đây là một ví dụ cho thấy sử dụng width và height tiện hơn dụng xscale ,y scale.



5) Visibility
Một thuộc tính khác của MC là thuộc tính _visible , giá trị của thuộc tính này là giá trị boolean true , false.
CODE

myClip._visible = false;

hãy xem ví dụ 07visible.fla để rõ hơn.
Giả sử ta không muốn movie biến mất hẳn, mà chỉ bị mờ đi, ta sử dụng thuộc tính _alpha . Thuộc tính có giá trị từ 0 đến 100

CODE

myClip._alpha = 50;

Thuộc tính alpha là kênh màu thứ 4, tên là alpha channel . 3 kênh đầu tiên là red ,green, blue đủ để tạo ra 7 màu cầu vồng. Khi bạn nghe đến đồ họa 32 bit, có nghĩa là nó đủ 4 kênh màu.. Còn 24 bit có nghĩa chỉ cỏ 3 kênh đầu tiên.
Nếu giá trị của _visible là 0 thì movie là trong suốt hoàn tòan và có thể nhìn thấy tất cả mọi thứ phía sau movie.
Nhìn hình sau để xem cùng 1 movieclip nhưng với 3 giá trị alpha khác nhau, 10, 50 và 100 (từ trái sang)

Giờ thứ 08: chọn, kéo thả movie clip, Moving and Changing Movie Clips


1. Selection

Bạn đã biết cách học sao để tạo một button và cho phép người sử dụng click vào làm sự kiện hoạt động. Tuy nhiên ở đây ta sẽ học cách click vào để chọn lựa một đối tượng trên màn hình.


Tạo một chọn lựa, có nghĩa là user click vào item , nhưng không có gì xảy ra. Như vậy, người dùng có thể lựa chọn và thay đổi lựa chọn.
Chúng ta sẽ sử dụng lụa chọn như bước đầu tiên để học kéo thả movie.

Button ở bên trong một Movie method.

Một movie không thể phản ứng với mouse click. Không thể sử dụng các sự kiện như on (release) hay (Press). vì vậy ta phải tìm cách đánh lừa nó. Đó là sử dụng một button bên trong movie. Button có thể xử lý được mouse click, và miễn là nó có độ lớn đủ để bao trùm một movie.
Hãy xem ví dụ 08buttoninmc.fla . Ta chỉ nhìn thấy một movie clip trên màn hình.nhưng thực chất bên trong của movie clip là một button.
Để tạo ra khả năng select, ta phải tạo nhiều frame.Frame đầu tiên chứa một button tên là offbutton. Button này có mã là

CODE

on (release) {


   this.gotoAndStop(2);
}

bằng this, button sẽ gọi đến movie clip mà nó nằm trên đấy. Frame thứ 2 chứa nút tương tự nhu frame 1 , tên là onbutton, nút này có mầu hơi sáng hơn để người dùng nhận ra khi nó được chọn.



CODE

on (release) {


   this.gotoAndStop(1);
}

cuối cùng đặt vào frame 1



CODE

stop();

Bây giờ hãy chạy để xem.
Phương thức hitTest
Có cách khác để làm movie có thể sử lý mouse click mà không cần button, đó là sử dụng sự kiện onClipEvent(mouseDown) hoặc là onClipEvent(mouseUp)ví dụ

CODE

onClipEvent (mouseUp) {


   this.gotoAndStop(2);
}

Hãy chạy ví dụ 08twomcs1.fla để xem.Bạn sẽ thấy tại sao onClipEvent(mouseUp) khác với on (Release) . Nếu bạn click vào movie, cả hai đều phản ứng.Bởi vì tất cả movie clip nhận sự kiện mouse up được gửi đến cho chúng.

Quyết đinh movie nào được click.
Có một cách để click vào movie mình muốn. Đó là sử dụng vị trí chuột để xác định. Sửa đoạn mã thành như sau

CODE

onClipEvent (mouseUp) {


   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       this.gotoAndStop(2);
   }
}

vậy bằng cách ràng buộc movie clip với mouse location , ta có thể click movie ta muốn.


VIết mã cho selection:
Chúng ta phải cho phép User click lên movies nhiều lần và thay đổi trạng thái của MC từ bật sang tắt, hay tắt sang bật.
Đoạn mã sau có thể xác định movie đang ở trạng thái nào và gửi nó đến frame khác. VIệc này thực hiện bằng thuộc tính _currentFrame . Thuộc tính này sẽ đọc giá trị 1 khỉ nó ở frame thứ nhất, giá trị 2 khi nó ở frame thứ 2.

CODE

onClipEvent (mouseUp) {


   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       if (this._currentFrame == 1) {
           this.gotoAndStop(2);
       }  else {
           this.gotoAndStop(1);
       }
   }
}

Bây giờ bạn đã thấy các cách để tạo sự chọn lựa movie. Cách thư nhất tiện lợi nếu bạn muốn dùng cả các trang thái khác như Over,up , down.. Cách thứ hai thì không cần nhiều biểu tượng trong thư viện.

Enjoy..

2) Kéo một movie clip


Bây giờ ta sẽ học kéo một movie.
Có 2 cách để kéo movie, cách thứ nhất là sử dụng lệnh . Cách này rất dễ sử dụng nhưng nó không cho bạn nhiều lựa chọn trong việc sửa đổi và giám sát movie.

Cách Drag cơ bản:


2 câu lệnh drag co bản là :startDrag và stopDrag. bạn dùng startDrag khi bạn muốn movie của bạn đi theo chuột, còn stopDrag khi bạn muốn movie của bạn không theo chuột nữa. Đây là đoạn code cơ bản :

CODE

onClipEvent (mouseDown) {


   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       this.startDrag();
   }
}

onClipEvent (mouseUp) {


   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       this.stopDrag();
   }
}
Sự kiện onClipEvent nhìn tương tự như ta đã làm ở trên. Chúng sử dụng hitTest để nhận biết movie nào đang được click. Và sau đó câu lệnh startDrag và stopDrag được sử dụng. Khi chuột được bấm xuống, câu lệnh startDrag thực thi. Và ngược lại, khi chuột thả ra, stopDrag thực thi.

Hãy xem movie, bạn sẽ thấy với các câu lệnh drag, bạn có thể kéo các movie một cách độc lập. Nhưng chú ý rằng bạn không thể kéo 2 movie cùng một lúc. Chỉ một movie được kéo tại một thời điểm. Vì vậy bạn nên cần cách drag phức tạp và linh động hơn để làm ứng dụng hay game.

Note: startDrag có 5 thám số. Tham số thứ nhất là giá trị True(hoặc False) để quyết định việc trung tâm của movie clip có khóa với vị trí chuột hay không. Các tham số còn lại là left, top, right, bottom. Nếu bạn đặt chúng, movie của bạn chỉ có thể được kéo theo các ràng buộc đó.

Kéo nâng cao

Bây giờ ta học cách kéo movie mà ko dùng câu lệnh startDrag và stopDrag. Vậy làm thế nào??

Bạn cần có 4 phần mã sau trong movie của bạn:


Thứ nhất là sự kiện onClipEvent(load), sự kiện này sẽ đặt cho biến global tên là dragging giá trị false. Khi biến này true, tức là báo hiệu rằng movie có thể được kéo.

Thứ hai, ngưòi dùng click vào một movie. Có nghĩa là dragging = true .


Thứ ba, quá trình kéo sẽ tiếp tục diễn ra bởi sự kiện onClipEvent(enterFrame). Sự kiện này chỉ đơn giản gán _x và _y (thuộc tính của movie clip) cho _root._xmouse và _root._ymouse(thuộc tính của con trỏ ).
Thứ 4, nếu ngưòi dùng thả chuột , thì biến dragging được gán false.
Sau đây là đoạn code đầy đủ
CODE

onClipEvent (load) {


   // start out not dragging
   dragging = false;
}

onClipEvent (mouseDown) {


   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       // follow the mouse from now on
       dragging = true;
   }
}

onClipEvent (enterFrame) {


   if (dragging) {
       // set to location of the mouse
       this._x = _root._xmouse;
       this._y = _root._ymouse;
   }
}

onClipEvent (mouseUp) {


   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       // don't follow the mouse any longer
       dragging = false;
   }
}

Trong ví dụ 08complexdrag.fla chứa 2 MC. Kiểm tra movie, nhưng chỉ sử dụng MC bên trái. Đây là MC làm theo đoạn code trên. Chú ý xem trung tâm movie đựơc khóa với vị trí chuột như thế nào. Nó làm movie nhảy ngay lập tức nếu bạn click vào nó.

Thông thường, khi bạn muốn kéo MC đó lên màn hình, bạn không muốn nó nhảy tới để làm khớp vị trí chuột với trung tâm của MC. Hãy kéo file xung quanh màn hình.Bạn sẽ thấy khi bạn click chuột vào bất kì điểm nào trên movie, movie sẽ lập tức làm khớp vị trí click chuột với trung tâm movie. Điều này cũng tương tự với câu lệnh startDrag .

Để tránh điều này, chúng ta chỉ cần thêm một đoạn code nhỏ. Khi ngưòi sử dụng bấm chuột, chúng ta sẽ lấy offset, đây là khoảng cách từ chuột cho đến trung tâm của movie. Sau đó, thay thế bằng việc gán vị trí chuột đến trung tâm movie, ta se thêm vào offset để cho MC luôn luôn xuất hiện offset bởi cùng một giá trị khi người dùng kéo.

Tưởng tượng , ví dụ ngưòi dùng click vào một điểm cách trung tâm movie 5 pixel. Sau đó ta luôn muốn khoảng cách 5 pixel đó được duy trì. Điều này làm cho người dùng có thể click vào bất cứ điểm nào để kéo movie.
Đây là code cho movie 2(bên phải)

CODE

onClipEvent (load) {


   // start out not dragging
   dragging = false;
}

onClipEvent (mouseDown) {


   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       // follow the mouse from now on
       dragging = true;

       // get the mouse offset


       xOffset = this._x - _root._xmouse;
       yOffset = this._y - _root._ymouse;
   }
}

onClipEvent (enterFrame) {


   if (dragging) {
       // set to location of the mouse
       this._x = _root._xmouse + xOffset;
       this._y = _root._ymouse + yOffset;
   }
}

onClipEvent (mouseUp) {


   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       // don't follow the mouse any longer
       dragging = false;
   }
}

Hãy xem movie để thấy khác biệt giữa 2 đoạn code.

3) Kéo và thả

Bây giờ ta đã biết kéo movie, vậy ta sẽ thả nó ở đâu.?


Vấn đề là bạn muốn theo dõi hành động của người sử dụng và xác đinh người sử dung đặt movie ở đâu.
Basic Drop Zone

Chức năng hitTest có thể được sử dụng để xác định khi MC bị đè lên nhau. Trong đoạn mã sau, chúgn ta sử dụng lệnh startDrag để đoạn mã kéo thả đơn giản đi, nhờ đó ta có thể tập trung vào các chức năng mới.

Trong đoạn mã sau, chức năng hitTest được sử dụng để so sánh MC được kéo với một movie khác tên là dragZone ở trên một lêvl(root level)

CODE

onClipEvent (mouseDown) {


   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       this.startDrag();
   }
}
onClipEvent (mouseUp) {
   if (this.hitTest(_root._xmouse, _root._ymouse)) {
       this.stopDrag();

       // see if this mc is inside the dropZone mc


       if (this.hitTest(_parent.dropZone)) {
           trace("Dropped in zone");
       }  else {
           trace("Dropped outside zone");
       }
   }
}

Chú ý hitTest không được sử dụng như các bài trước, chúng ta thay thế vị trí _x và _y bởi một movie khác.

Loại hitTest này so sánh vị trí và vùng được bao phủ của 2 movie clip. Trong trường hợp này, nó được so sánh với _parent.dropZone. Nếu có 2 movie đè lên nhau, hitTest trả giá trị True. Để xác đinh xem MC nào đang tồn tại, hình chữ nhật của cả 2 movie đều được sử dụng. Điều này có nghĩa là khi bạn sử dụng 2 hình tròng, như trong ví dụ, bản thân chính các vòng tròn đó không được chạm vào miễn là các hình chứ nhật của 2 movie được dùng.

Hãy xem hình minh họa. Tất cả các movie Dragme đều nằm đè trên DropZone.

Có 2 cách sử dụng hitTest. Thứ nhất là sử dụng tọa độ x,y. Chúng ta có thể sử dụng movie clip như vị trí x,y, rồi sau đó sử dụng dropzone như một movie clip thứ nhất.

CODE

if (_parent.dropZone.hitTest(this._x,this._y)) {

Với đoạn code này, thay thế ví dụ trên, movie clip sẽ nằm ở bên trong hình chữ nhật của vùng dropzone.
Chúng ta có thể thêm một bước nữa với hittest. Bằng cách thêm tham số thứ 3 cho hitTest, chúng ta có thể dùng hitTest để xem hình dạng chính xác của movie clip và xác đinh vị trí x,y. Biến thứ 3 này cần gán true nếu bạn muốn hành vi này. Nếu nó false, nó se hành động giống như chức năng hitTest bình thường. Đây là đoạn code

CODE

if (_parent.dropZone.hitTest(this._x,this._y,true)) {


Bây giờ movie kéo thả của ta họat động tốt hơn. Nếu bạn sử dụng ví dụ 08drop.fla, movie bên phải sẽ sử dụng đoạn mã gôc, và nó nằm đè ở trên hình chữ nhật của dropzone. Các movie khác sử dụng đoạn code phức tạp hitTest và chúng có trung tâm nàm bên trong hình dạng gốc của dropzone.


Giờ thứ 09: Lấy thông tin từ người dùng, Getting input from the user
Cho tới bây giờ, qua 8 giờ làm quen với AS, tất cả các tác động của bạn lên trên flash đều được làm qua chuột. Nhưng ngoài chuột, bạn có thể dùng bàn phím để nạp thông tin vào Flash.

Làm sao để phát hiện khi người dùng bấm phím

Có 3 cách để phát hiện khi một phím tên bàn phím bị nhấn. 1 là dùng nút, 2 là dùng đối tượng Key, và 3 là dùng "listener" (chỉ có ở Flash MX và MX 2004)



1. Phát hiện qua nút:

Bạn có thể dùng nút để phát hiện khi người dùng sử dụng bàn phím. Bạn chi cần dùng lệnh xử lý sự kiện on cho đoạn code của nút . Ví dụ đoạn code sau sẽ kích hoạt khi mà người dùng nhấn phím "a".



ActionScript

on (keyPress "a"){


    trace ("Key 'a' pressed");
}

Trong movie mẫu 09keybutton.fla có một nút đơn giản nằm trên màn hình và vài ví dụ trong đó. Nếu bạn cho chạy thử movie và nhấn phím "a" thì Output window sẽ có viết ra dòng chữ "Key 'a' pressed.". Xử lý dữ kiện on(keyPress) nhớ là phải phân biệt dạng chữ (case-sensitive) nên nếu bạn chỉ code cho nó nhận phím "a" thì nó sẽ không thể nhận được phím "A". May mà chúng ta có thể dùng bao nhiều bộ xứ lý dữ kiện cũng được.

Nếu bạn muốn xữ lý các phím khác, như các phím mũi tên, enter, thanh dài (space bar) ... thì bạn phải dùng các code dành riêng cho chúng. Vì dụ bạn muốn xữ lý phím mũi tên trái (left arrow key) thì dùng đoạn code sau:

ActionScript

on (keyPress "") {


    trace("Left pressed.");
}

Và sau đây là các code dành cho các phím đặc biệt:


1   2   3   4   5




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương