Old 22-10-2005, 22:45  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

tui có cả bộ học actionscript trong 24 giờ của flash.pà con có muốn học thì nói.tui post lên



------------------------------
robin is offline  

Old 22-10-2005, 23:46  

V.I.P
 
Join Date: 23-08-2005
Posts: 2.707
KL$: 854
Awarded 46 time(s)
Sent 489 thank(s)
Received 558 thank(s)
School: PTTH Kim Liên
Class: A7 (2005-2008)
Location: Hà Nội iu wí

ku Huy này nhanh ghê
nhưng hình như topic này hơi lạc đề thì phải

có cần move hộ kô?

chết, post xong quên mất :p ông share đi



------------------------------
Click here: Show ảnh người yêu của mọi người (Câu thank )
MrPaint is offline  

Old 23-10-2005, 09:16  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

hehe.
Giờ thứ 01: Làm quen với AS
AS là một ngôn ngữ lập trình được xây dựng trong Flash. AS giống như các ngôn ngữ khác như Javascript, C++ v.v. nhưng bạn không cần biết các ngôn ngữ khác để học AS (nếu có thì càng dễ hơn).

Bắt đầu học AS, thì chúng ta coi thử AS là gì, làm được những gì và có quan hệ gì với các chức năng khác của Flash. Trong bài này, bạn sẽ tìm hiểu coi AS ra đời như thế nào, xem cách viết AS làm sao, tìm hiểu AS làm được những gì và sau sau cùng là xác định được nơi lưu trữ AS ở trong Flash.

Để đi sát nghĩa và tiện cho sau này, mình sẽ không dịch một số từ ngữ ra tiếng việt như script, movieclip v.v.

Script là gì?

AS là ngôn ngữ lập trình, với các lệnh sai khiến Flash movie làm việc theo đúng những gì mình viết (chỉ có mình viết sai chứ computer không làm sai ). Phần nhiều thì AS chỉ làm việc trong môi trường của Flash, tuy nhiên AS cũng có thể gửi lệnh cho browser, hệ điều hành v.v.

Script có thể ngắn gọn vài chữ hay cũng có thể dài cả trăm trang. Script có thể được việt gộp lại một chổ hay cũng có thể viết rãi rác khắp nơi trong movie.

Xuất xứ của AS

AS rất giống ngôn ngữ C++, Java, javascript .v.v và được dựa trên tiêu chuẩn do ECMA (European Computer Manufactuers Association) lập ra gọi là ECMAScript. Nhiều người hiểu lầm rằng AS dựa trên Javascript, nhưng thực chất cả 2 đều dựa trên ECMAScript.

Lúc đầu viết script trong Flash rất đơn giản và cho tới Flash 4 mới đuợc phát triển nhưng cũng vẫn còn "thô sơ" với những vòng lặp và các điều kiện "if...else". Cho tới Flash 5 thì dân Flash mới có thể lập trình và gắn liền script với các yếu tố trong movie. . Sang tới Flash MX thì AS đã trở thành ngôn ngữ lập trình toàn diện với hơn 300 câu lệnh, hàm .v.v

Nhận biêt AS

AS đơn giản là những câu lệnh được viết bằng tiếng Anh (vì lẽ này mà mình sẽ không dịch các từ tiếng Anh liên quan đến AS, và một phần thì mình không giỏi thuật ngữ computer hay tiếng việt cho lắm) và các phép tính và dấu câu. Ví dụ sau:



on (press) {
gotoAndPlay ("my frame");
}


Bạn có thể giải nghĩa đoạn mã trên bằng cách tìm hiểu các từ chính trong đó. Chữ "press" gợi ý rằng người dùng đang kích chuột vào một cái gì đó, (và trong trường hợp này là cái nút) Chữ kế tiếp "gotoAndPlay" do 4 chữ "go to and play" gộp lại, gợi ý rằng AS ra lệnh cho Flash tới một điểm nào đó trong movie và bắt đầu chơi từ điểm đó.

AS có thể làm những gì?

Flash movie gồm có các scence (cảnh), và mỗi cảnh sẽ có 1 timeline và timeline sẽ có các frame (khung) bắt đầu từ số 1. Thông thường thì Flash sẽ chơi từ frame 1 cho tới frame cuối của scence với tốc độ cố định và dừng lại hay lặp lại từ đầu tuy theo người làm Flash.

Mục đích chính của AS là thay đổi thứ tự trong cách chơi của Flash. AS có thể dùng ở bất frame nào, hay chạy ngược trở lại frame trước hay nhảy vài frame rồi chơi tiếp. Nhưng đó không chỉ là những gì AS có thể làm được. AS có thể biến film hoạt hình của Flash thành một chương trình ứng dụng có sự tương tác của người dùng. Dưới đây là những cơ bản mà AS có thể làm:
• Hoạt hình: Bạn không cần AS để làm hoạt hình, nhưng với AS thì bạn có thể tạo những hoạt hình phức tạp hơn. Ví dụ, trái banh có thể tưng xung quanh mành hình mà không bao giờ ngừng, và tuân theo các định luật vật lý như lực hút, lực ma sát, lực phản v.v Nếu không có AS thì bản cần phải dùng cả hàng ngàn frame để làm, còn với AS thì chỉ 1 frame cũng đủ
• Navigation (hông biết dịch làm sao cho hay ): thay vì movie chỉ chơi từng frame 1 theo thứ tự thì bạn có thể dừng movie ỏ bất cứ frame nào, và cho phép người dùng có thể chơi ở bất cứ frame nào .v.v
• Thu nhập thông tin từ người dùng (user input): bạn có thể dùng AS để hỏi người dùng 1 câu hỏi, rồi dùng thông tìn đó trong movie hay có thể gửi cho server hay làm những gì bạn muốn.
• Thu nhập thông tìn từ các nguồn khác: AS có thể tương tác với server và lấy các thông tin từ server hay text file
• Tính toán: AS có thể làm bất cứ phép tính nào mà toán học cho phép
• Thay đổi hình ảnh trong movie: AS có thể thay đổi kích thước, màu sắc, vị trí của bất cứ movie clip (MC) nào trong movie flash của bạn. Bạn có thể tạo thêm phiên bản hay xoá bớt phiên bản của MC với AS
• Phân tích môi trường của máy tính: Với AS bạn có thể lấy giờ từ hệ điều hành hay địa chỉ đang chơi movie Flash đó.
• Điểu khiển âm thanh trong flash movie: AS là cách tốt nhất để điều khiển âm thanh trong Flash,AS có chơi chậm, chơi nhanh, ngừng, quay vòng .v.v bât kỳ âm thanh nào trong Flash.
Phát triển các khả năng của AS

Điều quan trọng nhất mà AS có thể làm cho bạn là những gì chưa ai nghĩ tới Với AS và trí tưởng tượng và óc sáng tạo của bạn thì không có gì là không thể xảy ra với AS được.

Mục đích của các sách là hướng dẫn bạn hiểu biết về Flash để từ đó bạn có thể tự dùng nó để làm ra những sản phẩm tuyệt vời mà không ai có.

Viết AS ở đâu

Câu hỏi đầu tiên những ai tìm hiểu AS thường hỏi là "Viết AS vào đâu?". Flash có một môi trường làm multimedia khá phức tạp. Nếu bạn đã dùng Flash rồi hay đã đọc qua các hướng dẫn đi kèm với Flash, thì bạn đã biết các yếu tố cơ bản như timeline, key frame v.v. nếu bạn chưa biết thì mình khuyên bạn nên tìm hiểu trước rồi tiếp tục ở đây.
Viết AS ở time line

AS có thể viết vào key frame ở bất cứ timeline nào. Để làm như vậy, bạn chọn key frame ở trong timeline trước rồi bạn mở Action Panel ra (có thể nhấn F9) để viêt hay xem AS đã được viết ở đó. Mình khuyên bạn nên dùng Action Panel dưới dạng Expert hơn là Normal, vì như vậy bạn sẽ học được nhiều và lẹ hơn.

Khi viết AS vào key frame như vậy thì AS ở key frame đó sẽ hoạt động khi mà Flash chơi tới key frame đó. Ví dụ như lệnh AS stop(); được đặt ở key frame 5 thì Flash chơi tới key frame 5 thì sẽ dừng lại cho tới khi có lệnh khác. Cách viết này gọi là viết vào time line

Một trong những lý do viết script vào time line là khi bạn muốn dùng function (hàm), vì function cho phép chúng ta tái sử dụng đoạn mã đó từ nhiều nơi, nhiều level khác.

Viêt AS ở nút

Các phần tử của Flash movie được gọi là symbol (biểu tượng). thường thì symbol là các hình ảnh. Và có 3 loại symbol: button (nút), graphich (hình ảnh), movie clips(đoạn phim). 3 loại trên thì AS không thể viết liền với graphic, còn button và movie clip thì OK.

Nút sẽ không có tác dụng gì cả nếu như không kèm AS lên trên nó. Muốn kèm AS vào nút thì chọn nút trên stage (sân khấu: diện tích của flash movie), rồi sau đó mở Action panel và viết vào đó như ta viết vào key frame.

AS viết trên nút chỉ hoạt động khi chuột hoặc bàn phím tác động lên nút mà thôi

Viết AS ở MC

MC khác với graphic ở chổ MC được đặt tên khi mang vào stage, MC thường là hình ành động, và có thể có AS kèm theo MC. Để viết AS vào MC thì cũng tương tự như ta làm với nút.

AS kèm theo MC có thể điểu khiển MC đó hay là các MC trong cùng một timeline hay các timeline ở ngoài movie

Bài tập

1. Tạo một movie mới
2. tạo 3 key frames
3. Dùng Flash vẽ mỗi hình khác nhau cho mỗi frame
4. Chạy thử movie (nhấn Control + enter)
5. Sau đó trở lại timeline, viết vào keyframe 2 đoạn mã : "stop();"
6. Cho chạy thử movie lần nữa
7. Và kỳ này bạn chỉ thấy Flash chơi tới frame thứ 2 thì ngừng, và bạn đã thành công trong việc viết AS lần đầu



------------------------------
robin is offline  

Old 23-10-2005, 13:37  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

Giờ thứ 02: Sử dụng Action panel
Nếu dân đồ hoạ coi Timeline là nhà thì dân lập trình với AS coi Action Panel là nơi cư ngụ của mình, tại đó dân AS có thể thay đổi, viết tất cả các lệnh. Vì vậy rất quan trọng là bạn có thể sử dụng quen thuộc Action Panel

Flash MX sử dụng các panel để giúp bạn có thể lấy các thông tin về movie bạn đang làm một cách dễ dàng. Khi bạn cài đặt và chạy Flash lần đầu tiên, Flash sẽ hỏi bạn muốn sử dụng Flash như thế nào và Flash sẽ xếp đặt các panel cho hợp lý. Bạn cũng có thể thay đổi cách xếp đặt theo ý của bạn.

Nói chung bạn nên xếp đặt các panel của bạn làm sao cho thuận tiện cho bạn nhất, và cái này cũng cần có kinh nghiệm đó Mình dùng dual monitor, mình close hết các panel chỉ giữ lại 2 cái chính trên màn hình, mình kéo cái action panel và property panel qua một bên monitor, còn cái bên kia để cho cái stage, nếu cần mở panel nào thì mình dùng phím tắt để mở.

Sử dụng Action panel có 2 cách: bình thường (normal) và chuyên dụng (expert). Khi mới chạy máy lần đầu thì Action panel được set dưới dạng bình thường. Ở dạng bình thường thì bạn không có thể đánh trực tiếp các câu lệnh, mà phải chọn từ các menu bên tay trái của panel. Với setup như vậy thì bạn không bao giờ phạm phải lỗi khi viết AS cả.

Mình sẽ bỏ phần hướng dẫn dùng normal vì mình thấy dùng normal mode sẽ không bao giờ tiến được, dùng expert mode lúc đầu hơi mệt nhưng bảo đảm là các bạn sẽ học được mau và nhớ lâu hơn

Sử dụng Action panel với expert mode thì bạn có nhiều tự do hơn, nhưng tự do đồng nghĩa với trách nhiệm nên bạn phải cẩn thật khi viết code. Từ normal mode chuyển sang expert mode thì nhấn phím tắt CONTROL + SHIFT + E, chuyển ngược lại thì dùng CONTROL + SHIFT + N (nhớ kích chuột vào action panel trước khi dùng phím tắt). Bạn có thể đổi từ Normal mode sang expert mode bất cứ lúc nào, nhưng đổi ngược lại thì chỉ được khi mà code của bạn không có lỗi.

Action panel có popup menu (mũi tên chỉ xuống dưới, nằm ở góc phải của action panel) và trong đó có nhiều lệnh rất tốt cho bạn khi bạn dùng Action panel, nhất là đối với Expert mode. Bạn có thể tìm và thay thế bất cứ câu nào, chữ nào trong script của bạn. Phím tắt cho tìm kiếm là Control + F và cho thay thế là Control + H, nhấn F3 thì Flash sẽ tiếp tục tìm chữ, câu bạn muốn tìm.

Một lệnh nữa là "Goto Line" giúp bạn tìm được câu bạn muốn tìm. Lệnh "Check Syntax" sẽ rà soát script của bạn và tìm những lỗi cú pháp. Lúc mới tập viết AS, thì dùng nên thường xuyên dùng Chech Syntax để check lổi trong sctipt. Lệnh tiếp theo là "Auto Format" và "Auto Format Options" giúp cho bạn trình bày script của bạn cho dễ đọc hơn. Bạn có thể thay đổi màu sắc, font chữ v.v. cho script của bạn để cho bạn dễ đọc code hơn bằng cách vào Edit > Preferences > ActionScript Editor. Các phần còn lại của pop-up window cho phép bạn được xuất hay nhập AS dưới dạng text file và in script ra giấy.

Tuy gọi là expert mode nhưng thực ra dùng còn dễ hơn là normal mode. Bởi vì dưới expert mode thi Action panel chẳng khác gì chương trình "note pad" hay "text pad". Bạn chỉ việc viết những gì bạn muốn vào đó. Khi dùng dưới expert mode, bạn vẫn có thể tham khảo các câu lệnh, các cú pháp của AS ở cái khung bên trái của Action Panel. Và nếu bạn tôn thủ một số quy tắc thì bạn sẽ được chức năng "Code Hint" của Action Panel, chức năng này tạo nên nhưng khung nhỏ nhỏ trong đó có những câu lệnh của AS đúng hợp quy cho bạn lựa chọn.

Để trở thành một "cao thủ" về AS thì bạn không thể nào không nắm vững về Action panel được.

Sau đây là bài thực hành nho nhỏ, giúp bạn làm quen với Action panel dưới expert mode

1. Tạo một movie mới
2. Chọn key frame đầu tiên (frame số 1) của layer 1 (mình không dịch chữ layer = lớp vì dễ trùng với class= lớp)
3. Mở Action panel (có thể dùng phím tắt hay vào trong phần Window > Action panel
4. Chuyển sang expert mode (dùng phím tắt hày vào trong pop-up menu của Action panel để đổi)
5. Vào chổ để viết AS
6. Viết đoạn code sau:

trace ("I am expert");


Khi bạn thử movie thì dòng chữ "I am expert" sẽ được hiện ra trong Output panel, và mình sẽ đề cập đến lệnh trace() vào những giờ tới



------------------------------
robin is offline  

Old 23-10-2005, 13:40  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

Giờ thứ 03: Học cách lập trình
Lập trình có thể coi là khoa học và nghệ thuật. Vì vậy lập trình viên giỏi cần có 2 điều kiện kiến thức về ngôn ngữ mà họ dùng và tính sáng tạo, ít khi nào có trường hợp chỉ có 1 cách lập trình cho một đề án lắm.

Trong quá trình viết AS, bạn sẽ tạo ra cho riêng mình một phong thái viết code khá đặc trưng. Có thể mới đầu bạn sẽ dùng phong cách viết code trong những bài viết này, rồi sau đó bạn sẽ từ từ chuyển sang phong cách của riêng bạn

Thường thì khái niệm về các ngôn ngữ lập trình đều giống nhau, và trong bài này sẽ bàn về những khái niệm lập trình và làm sao áp dụng nó trong Flash

Cách suy nghĩ của computer

Thật ra computer dốt lắm chẳng biết suy nghĩ đâu, chỉ biết làm việc theo mệnh lệnh một cách không suy nghĩ. Vì vậy computer không bao giờ lỗi mà lỗi ở người viết lệnh sai khiến nó.

Còn AS chỉ là một chuổi lệnh, chỉ thị cho computer, hay đúng ra là Flash phải làm những gì trong môi trường runtime (runtime environment).

Khi viết AS thì bạn nên tự coi mình "ngu" như computer, và đọc lại những dòng lệnh AS và nghĩ tới kết quả của việc thi hành lệnh đó. Khi tự đặt mình vào vị trí của computer, bạn sẽ đoán được script của bạn sẽ làm những gì trong môi trường runtime, và bạn có thể thấy ra những lỗi mà bạn vô ý mắc phải. Khi mà bạn trở thành diễn viên tuyệt vời trong vai computer thì bạn cũng trở thành một lập trình viên tài ba.

Lệnh, hàm, và phép tính

Lệnh (command) là yếu tố căn bản của AS để chỉ thị Flash làm một hành động cụ thể. Lệnh được thi hành tuyệt đối trong các trường hợp khả thi. Ví dụ nếu như ta viết gotoAndPlay(5) để cho Flash tới frame 5 và chơi, nhưng nếu trong movie không có frame 5 thì lệnh không thể làm được.

Hàm (function, mình sẽ dùng từ function nhiều hơn là hàm) là phần tính toán các phép tính và cho ra (return) một kết quả. Ví dụ hàm random() sẽ cho ra một con số ngẫu nhiên nào đó, hay hàm sqrt() sẽ cho ra giá trị bình phương của 1 số mà hàm nhận được truyền cho.

Lệnh và hàm đều có thể được truyền cho 1 hay nhiều thông số (parameter, mình sẽ dùng từ parameter thay vì thông số), và những thông số đó giúp cho hàm và lệnh được cụ thể hơn. Ví dụ gotoAndPlay(5) thì 5 là thông số, nếu như không có thông số này thì lệnh "gotoAndPlay" sẽ không biết rõ phải nói Flash đi đâu. cũng như hàm sqrt() cũng cần có thông số để cho ra giá trị bình phương của số ấy.

Sự khác biệt giữa hàm và lệnh chính là các phép tính. Phép tính thường là những dấu +, -, *, / hay là phép so sánh <, ==. >. Hàm có phép tính, lệnh thì không

Biến số

Biến số (parameter) cần thiết trong mọi ngôn ngữ lập trình vì nó lưu trữ thông tin về một cái gì đó trong chương trình. Biến số gồm có 2 phần: tên và giá trị. Đôi khi bạn chỉ cần lưu trữ thông tin trong biến số một thời gian ngắn, ví dụ bạn muốn Flash thi hành 1 số lệnh 10 lần thì bạn cần đếm số lần mà Flash đã thi hành lệnh để có thể ra lệnh cho Flash ngưng ngay sau khi thi hành xong lệnh lần thứ 10. Nhưng cũng có lúc bạn cần phải lưu lại thông tin trong một thời gian dài hay trong suốt quá trình thời gian Flash chơi.

Tên của biến số thường là một nhóm từ, hay cũng có thể chỉ đơn giản là 1 từ, hay 1 chữ cái. Thông thường tên của biến số nên rõ ràng dễ hiểu và nói lên được tính chất của thông tin mà biến số đang lưu trữ. Ví dụ nếu bạn muốn lưu trữ tên của người dùng trong biến số thì bạn nên đặt tên biến số đó là userName (mình nghĩ đặt tên tiếng Anh dễ hiểu hơn, vì tiếng việt không dấu cũng dễ bị hiểu lầm), bạn có thể đặt tên biền số đó là "n" nhưng quá ngắn, người đọc script của bạn sẽ khó hiểu, nếu đặt là name thì dễ trùng với các biến số hay từ khoá khác (_name là một đặc tính của đối tượng MovieClip)

Khi viết AS, bạn cần lưu ý viết làm sao cho dể hiểu và dễ đọc. Và các lập trình viên quy ước tên biến số theo quy tắc sau: tên biến số luôn viết thường chữ đầu tiên, và viết hoa chữ cái đầu tiên cho các chữ kế tiếp, ví dụ userName, userLastName, userMotherMaidenName v.v.

Lưu ý rằng chỉ các chữ cái và số mới được dùng để đặt tên cho biến số, và luôn bắt đâu tên bằng chữ cái.

Có nhiều loại biến số để lưu trữ nhiều loại thông tin, và ngay mỗi loại thông tin cũng có thể có nhiều loại khác nhau nữa. Như số (number) là một loại giá trị của biến số, và dưới nó còn có các loại khác như số nguyên (integer), số ... không nguyên (floating, double). Bạn cũng có thể dùng biến số để chứa các chuỗi (chuỗi gọi tắt cho chuỗi chữ cái), chuỗi có thể chỉ có 1 chữ cái, nhiều chữ cái hay là không có gì hết, tất cả các chuỗi sau đây đều hợp lệ: "ablsdfjksl", "a", " ", "". Khi viết một chuỗi thì cần dùng dấu ngoặc kép ("") để bắt đầu và kết thúc chuỗi.

Trong các ngôn ngữ lập trình khác như Java, C++, hay ngay cả ActionScript 2.0 trong Flash MX 2004 thì bạn phải xác định trước loại thông tin nào bạn sẽ lưu trong biến số. Nhưng với ActionScript 1 (trong FlashMX) thì bạn không cần làm việc này. Ví dụ biến số userName lúc đầu chứa 1 chuỗi, nhưng sau đó lại chứa 1 số nguyên thì cũng vẫn hợp lệ.

Ngoài chuỗi và số, còn có nhiều loại khác nữa nhưng chúng ta sẽ đề cập tới vào những bài sau.


Điều kiện

Trong những trường hợp chúng ta không biết nên ra lệnh cho Flash phải làm gì cho thích hợp với từng tình huống thì ta có thể dùng "điều kiện" để ra lệnh cho Flash.

Ví dụ nếu như bạn ra lệnh cho Flash không cho người dùng coi một đoạn phim trong Flash nếu như user dưới 18 tuổi, nếu user trên 18 tuổi thì hãy chơi đoạn phim ấy. Trước tiên, Flash sẽ so sánh số tuổi của user với số 18, nếu như số tuổi của user thoả mãn điều kiện chúng ta đặt ra thì Flash sẽ có 1 giá trị true từ phép so sánh trên, và ngược lại sẽ là false Điều kiện sẽ luôn luôn là đúng (true) hay sai (false). Một giá trị chỉ có đúng hay sai thì được gọi là boolean. Sau khi thực hiện phép so sánh và có được kết quả từ phép so sánh trên, Flash sẽ chọn một trong 2 giải pháp do chúng ta đưa ra cho từng trường hợp.

Đôi khi chúng ta cần có nhiều điều kiện hơn chỉ là đơn giản "true" hay "false", ví dụ như bạn muốn Flash chơi đoạn phim A cho người trên 18 tuổi, dưới 18 nhưng trên 13 thì chơi đoạn phim B, và những ai dưới 13 thì chơi đoạn phim C.

Vòng lặp

Con người làm ra computer vì lười không muốn làm nhiều, mà bán cái ấy cho computer. Nhất là phải làm đi làm lại 1 việc nào đó thì càng nhàm chán. Vì vậy vòng lặp (loop) là một yếu tố quan trọng trong các ngôn ngữ lập trình. AS cũng vậy, bạn có thể dùng vòng lặp trong script.

Trong vòng lặp, "điều kiện" rất quan trọng. Mọi vòng lặp cần có điểm bắt đầu và điểm dừng và một điều kiện để báo hiệu điểm dừng của vòng lặp. Ví dụ như bạn muốn cho vòng lặp chạy 10 lần thì sẽ có 1 biến số dùng để đếm vòng lặp, bắt đầu từ 0, Mỗi vòng lặp chạy thì biến số này sẽ tăng thêm 1. Khi tới 9 thì vòng lặp sẽ dừng lại. Sau đây minh hoạ của vòng lặp này:

1. Một số lệnh trước vòng lặp
2. Bắt đầu vòng lặp, set biến số counter = 0
3. Làm một số lệnh trong vòng lặp
4. Tăng biến số counter +=1
5. Nếu biến số counter nhỏ hơn 9, trở lại bước thứ 3
6. Ra khỏi vòng lặp, và tiếp tục chương trình.

Ở đây chúng ta bắt đầu biến số counter = 0 vì quy ước thông thường các ngôn ngữ lập trình đều bắt đầu vòng lặp ở 0.

Một điểm đáng lưu ý của vòng lặp là điều kiện được xét trước khi thực hiện các lệnh trong vòng lặp. Trong vài trường hợp, điều kiện sẽ được xét sau khi thực hiện các lệnh trong vòng lặp. Chúng ta cũng có thể ngưng vòng lặp trước điểm dừng của nó, và điều này sẽ được đề cập tới vào bài kế tiếp

Làm những điều không tưởng

Lệnh, hàm, phép tính, biến số, thông số, điều kiện, vòng lặp là những phần căn bản trong ngôn ngữ lập trình, và cái này thì ai cũng biết nhưng làm sao phối hợp lại thành một chương trình hoàn hảo mới là cái khó.

Chương trình đơn giản chỉ là một tập hợp lệnh cho computer để giải quyết 1 vấn đề nào đó. Vì vậy trước khi viết 1 chương trình chúng ta cần phải xác định "vấn đề" cần phải giải quyết. Ví dụ thực tế ở ngoài đời, mẹ bạn nhờ bạn ra chợ mua gà. Nhưng chỉ đơn giản nói ra chợ mua gà thì chưa đủ vì biết mua gà sống hay gà làm rồi , nếu mua gà sống thì mua loại nào v.v. Đó là chưa nói tới mua gà ở chợ nào, giá cả ra sao v.v. Nếu như bạn mẹ nói rõ là ra chợ Bến Tthành, mua 1 con gà mái dầu, nặng khoảng 2 kg, với giá khoảng 10000 thì thật là dễ dàng cho bạn phải không?

Biết được vấn đề mua gà rồi thì tìm cách mua gà. Bạn phải "lên kế hoạch", nên nhờ bạn chở hay đi taxi ra chợ bến thành. Nếu đi taxi đi hãng nào, tìm số phone để gọi, v.v. còn nhờ bạn chở đi thì nhờ tên nào. Rồi nên mặc quần áo nào đi chợ. Ra đến chợ thì phải mặc cả làm sao, trả tiền mặt hay ghi sổ nợ. Bạn thấy không, từ một chuyện mua gà đơn giản vậy mà có thể tốn cả ngày trời để lên chương trình

Viết AS, bạn cần phải lưu ý tới tất cả mọi việc dù nhỏ cách mấy để cho Flash có thể làm đúng theo như ý bạn trong mọi tình huống. Các chương trình có bug không phải vì người viết dở mà vì chưa nghĩ tới hết mọi tình huống thôi.

Tóm lại, điều quan trọng trong lập trình là khả nẳng phân tích một vấn đề chính thành nhiều vấn đề nhỏ cho tới khi không còn nhỏ hơn nữa, và sau đó xây dựng chương trình từ giải quyết các vấn đế nhỏ lên dần cho tới vấn đề chính.

Viết mã hoàn chỉnh

Bọ (bug) đơn giản là lỗi của chương trình mà bạn tạo ra. Bug có thể chỉ là những lỗi cú pháp đơn giản, hay là những lỗi phức tạp do cách bạn giải quyết vấn đề trong môi trường runtime.

Để tránh có bug trong script của bạn thì bạn nên tốn nhiều thì giờ vào giai đoạn phân tích, thiết kế chương trình cho script của bạn. Kiểm tra các đoạn code nhiều lần, và đóng vai "computer" cho thật giống, đừng suy nghĩ, mà thi hành các lệnh trong script của bạn. Viết từng đoạn code nhỏ rồi ráp lại với nhau (vì vậy mà lập trình theo hướng đối tượng được sử dụng nhiều nhất)

Nếu script của bạn có bug thì đừng thế mà nản lòng, vì không có chương trình nào do con người làm ra mà không có bug cả. Vì vậy bạn đừng cố gắng viêt code sao cho tuyệt hảo không có lỗi. Nếu có bug thì bạn diệt bug thôi Bạn có thể chuẩn bị "chiến đấu" với bug bằng cách viết code sao cho dễ hiểu và dễ đọc, viết nhiều chú thích cho các đoạn mã. Đôi khi diệt bug (debug) rất đơn giản nhưng có khi cũng rất khó mà biết bug ở đâu để diệt. Flash có kèm theo vài công cụ giúp bạn debug dễ dàng hơn, chúng ta sẽ nói tới các công cụ này trong bài tới.



------------------------------
robin is offline  

Old 23-10-2005, 13:42  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

Giờ thứ 04: Viết code trong Flash
Khi bạn viết script, bạn sẽ dùng tất cả những từ khóa, và ký hiệu v.v. Vậy trước tiên chúng ta sẽ phân tích một đoạn script sau đây. Đoạn script này gắn vào 1 button.

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 nhé) 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 nhé) 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, người dùng 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 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ông tin ra output window nhé.

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:

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 cục) 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 level (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:

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

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ự:

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 !=

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 > và <

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 >= và <=

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 +1 và a += 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:

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:

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 -, -=, =- và --. 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

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ụ:

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 chỉ 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.

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.

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 loop và do-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:

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:

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 có 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:

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 break và continue. 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:

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ể có 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

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 . 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:

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.

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 ....*/.

/*
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ả mọi 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.



------------------------------
robin is offline  

Old 23-10-2005, 13:44  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

post mỏi tay quá.lần tới post tiếp!



------------------------------
robin is offline  

Old 24-10-2005, 05:30  

Manager
 
Join Date: 14-09-2005
Posts: 570
KL$ (TOP! 8): 8.632
Awarded 34 time(s)
Sent 54 thank(s)
Received 33 thank(s)
School: PTTH Kim Liên
Class: A6 (2005-2008)
Location: My house

Thanks bạn robin nhá
--> cám ơn chân thành paint đừng có xóa <_<
GemLeaf is offline  

Old 24-10-2005, 12:54  
Nui Female

Member
 
Join Date: 13-06-2004
Posts: 53
KL$: 5
School: PTTH Kim Liên
Class: A7 (2005-2008)
Location: Nhà của chuột

Ặc, mỏi mắt quá, chẳng đọc nữa, nhưng đây là gì thế , không hiểu



------------------------------
Nui..

Tí yêu...
Nui is offline  

Old 24-10-2005, 13:02  

Senior Member
 
Join Date: 14-09-2004
Posts: 316
KL$: 667
Awarded 8 time(s)
Sent 35 thank(s)
Received 67 thank(s)
Class: A (1990-1993)
Location: Blacklist

BIG THANKS !!! BRO !!!!!!! :* :* :*



------------------------------
I'm eating all your kings and queens....all your sex and your diamond....
Hybrid is offline  

Old 25-10-2005, 23:50  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

Actionscript là ngôn ngữ kịch bản dành riêng cho Flash dùng cho tát cả mọi hiệu ứng trong Flash!
Còn đây là chương kế!
Giờ thứ 05: Điều khiển luồng movie
Sử dụng AScript là cách điều khiển movie đơn gỉản nhất, nhưng 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:

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 số thứ 2 là số thứ tự của frame hay tên frame.

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.

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

on (release) {
nextFrame();
}

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

stop();

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



------------------------------
robin is offline  

Old 25-10-2005, 23:51  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

Giờ thứ 06: Đ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ụ

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
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

gears.stop();

-Tạo các button Advance, Previous, Play, Stop, and Rewind
-Code cho các button lần lượt là

Advance :

on (release) {
gears.nextFrame();
}

Previous :

on (release) {
gears.prevFrame();
}

Play :

on (release) {
gears.play();
}

Stop :

on (release) {
gears.stop();
}

Rewind:

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 gọi 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

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à

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ị dừ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.

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

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.



------------------------------
robin is offline  

Old 25-10-2005, 23:51  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

Giờ thứ 07: Dịch chuyển và thay đổi movie
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 để ản ,hiện mc

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.


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 _xmouse ,_ymouse 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ộc 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

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 độ _xmouse ,_ymouse 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ạch cẩn thẩn trước khi dùng _xmouse, _ymouse

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

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

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.

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 scale và width,height là 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.

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ía 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,nó sẽ làm mc ẩn hoặc hiện ra.Ví dụ:

myClip._visible = false;

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

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 toàn và có thể nhìn thấy tất cả mọi thứ phía sau movie.



------------------------------
robin is offline  

Old 25-10-2005, 23:54  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

Giờ thứ 08: chọn, kéo thả movie clip
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.
Để 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à

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ự như 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.

on (release) {
this.gotoAndStop(1);
}

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

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ụ

onClipEvent (mouseUp) {
this.gotoAndStop(2);
}
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

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 khi nó ở frame thứ nhất, giá trị 2 khi nó ở frame thứ 2.

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.

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 :

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 tham 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 đủ

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;
}
}




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 :

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;
}
}

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.

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 level(root level)

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òn, 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.

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.

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ó sẽ hành động giống như chức năng hitTest bình thường. Đây là đoạn 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.



------------------------------
robin is offline  

Old 26-10-2005, 08:43  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

pà con có biết chỗ nào cho lưu file trực tuyến không?Học chay kiểu này chán chết!



------------------------------
robin is offline  

Old 01-11-2005, 09:27  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

trong trường KL không ai biết Flash sao?



------------------------------
robin is offline  

Old 07-11-2005, 17:33  

Phá sản!
 
Join Date: 13-09-2005
Posts: 3
KL$: 14
Location: Hell

Công nhận học flash kiểu này còn lâu mới hiểu, nói gì 24h
lucifer is offline  

Old 07-11-2005, 17:34  

Phá sản!
 
Join Date: 13-09-2005
Posts: 3
KL$: 14
Location: Hell

Công nhận học flash kiểu này còn lâu mới hiểu, nói gì 24h
lucifer is offline  

Old 07-11-2005, 19:17  

Senior Member
 
Join Date: 12-09-2004
Posts: 74
KL$: 0

chẳng ai bít cả anh robin pro chỉ em với /[img]http://www.dcuongtran.uni.cc/klnetbb/html/emoticons/20.gif' border='0'/> ([img]http://www.dcuongtran.uni.cc/klnetbb/html/emoticons/31.gif' border='0'/>



------------------------------
Welcome to KLNet 6!
dark is offline  

Old 14-11-2005, 09:01  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

các ku cần chi add nick anh vào nè:cuckidaman@yahoo.com



------------------------------
robin is offline  

Old 14-11-2005, 18:55  

V.I.P
 
Join Date: 23-08-2005
Posts: 2.707
KL$: 854
Awarded 46 time(s)
Sent 489 thank(s)
Received 558 thank(s)
School: PTTH Kim Liên
Class: A7 (2005-2008)
Location: Hà Nội iu wí

lạy chúa
robin khóa 05-08 là bét nhất trong KL roài, còn anh với ai thế
mà chú thử dùng cái mrpaint.info xem
Chắc con hozt này sống đến hết năm đấy Cú thoải mái đi \/



------------------------------
Click here: Show ảnh người yêu của mọi người (Câu thank )
MrPaint is offline  

Old 18-11-2005, 23:10  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

các pác xem cái này cho đỡ tốn tiền net ROBIN



------------------------------
robin is offline  

Old 18-11-2005, 23:57  

Senior Member
 
Join Date: 12-09-2004
Posts: 74
KL$: 0

ai đó :"> dạy tớ làm sao có cái hót với cái đô mần kiểu mrpaint.info đc ko



------------------------------
Welcome to KLNet 6!
dark is offline  

Old 19-11-2005, 11:35  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

Làm được thì tui làm rùi.Chú Nippon có ông anh ha*k hộ nên có thui.Còn Flash các chú học đến đâu rùi?



------------------------------
robin is offline  

Old 21-11-2005, 11:36  

Senior Member
 
Join Date: 12-09-2004
Posts: 74
KL$: 0

ha*k ? Nếu mà kiếm đc cái đô mần với cái hót mà gọi là ha*k .. thì nhìu ng` bít ha*k lắm



------------------------------
Welcome to KLNet 6!
dark is offline  

Old 27-11-2005, 23:18  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

.info ,20GB space , mà các chú bảo không ha*k thì là gì?



------------------------------
robin is offline  

Old 27-11-2005, 23:27  

V.I.P
 
Join Date: 23-08-2005
Posts: 2.707
KL$: 854
Awarded 46 time(s)
Sent 489 thank(s)
Received 558 thank(s)
School: PTTH Kim Liên
Class: A7 (2005-2008)
Location: Hà Nội iu wí

Sao lại bàn về hozt của tui thía
Chẹp, lệch lạc hết chủ đề ([img]http://www.dcuongtran.uni.cc/klnetbb/html/emoticons/31.gif' border='0'/>
Mà đang cần 1 cái chữ bốc cháy, chú robin có kô?



------------------------------
Click here: Show ảnh người yêu của mọi người (Câu thank )
MrPaint is offline  

Old 27-11-2005, 23:36  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

chữ zì zậy ku? À mà chú thử down cái nì về xem cho vui:http://www.thegamenetwork.com/stickpagehosting/dis.swf



------------------------------
robin is offline  

Old 28-11-2005, 10:34  

Senior Member
 
Join Date: 12-09-2004
Posts: 74
KL$: 0

thứ 1 , thằng ku robin, ku mấy tuổi gọi anh là chú ?
thứ 2 , domain.info, 20GB space :-s mua yahoo chứ gì ([img]http://www.dcuongtran.uni.cc/klnetbb/html/emoticons/31.gif' border='0'/> thế ko gọi là ha*k , chỉ là dùng cc để mua ... nếu mà nói thế là ha*k, thì mình cũng ha*k đc 1 lô reseller unlimited :">



------------------------------
Welcome to KLNet 6!
dark is offline  

Old 28-11-2005, 10:35  

Senior Member
 
Join Date: 12-09-2004
Posts: 74
KL$: 0

@missuchi : Chữ bôc chày ntn ?gif hay bt ?



------------------------------
Welcome to KLNet 6!
dark is offline  

Old 29-11-2005, 19:09  

Manager
 
Join Date: 19-09-2005
Posts: 1.650
KL$: 1.570
Awarded 170 time(s)
Sent 678 thank(s)
Received 518 thank(s)
School: PTTH Kim Liên
Class: A7 (2008-2011)
Location: Somewhere in Hell!

thành thật xin lỗi bác dark , bác xem đoạn film trên kia chưa?



------------------------------
robin is offline  
 

KLNetBB - Member of Kimlien Network
Copyright © 2002-2009 by dcuongtran
Skin designed by Kusanagi - Banner designed by FunkyJan
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.