Chương 2: Lingo script trong Director

Một phần của tài liệu đồ án công nghệ thông tin Chương trình Macromedia Director (Trang 26)

cung cấp một ngụn ngữ tiện lợi để viết lệnh điều khiển phim khi xảy ra một điều kiện hay một sự kiện nào đú, đú là ngụn ngữ Lingo Script

Lingo tạo ra cỏc tớnh năng mà nếu chỉ dựng cỏc cụng cụ kộo-thả trong Director thỡ khụng thể thực hiện được. Vớ dụ, Lingo cú thể chơi một õm thanh sau khi một phần dữ liệu õm thanh được tải về từ mạng. Ngụn ngữ này cú một điểm mạnh là nú dễ học, cỳ phỏp gần với ngụn ngữ tự nhiờn. Đối với ngụn ngữ này, việc quan trọng nhất là ta cần hiểu cỏch thức nú tương tỏc với cỏc thành phần cast và Score, vị trớ đặt đoạn mó để thu được kết quả mong muốn.

I. Sơ qua về Lingo

Cỏc thuật ngữ

Cũng nh cỏc ngụn ngữ lập trỡnh khỏc, Lingo sử dụng cỏc thuật ngữ và cỏc cỳ phỏp đặc trưng mà người lập trỡnh cần phải nắm được. Cỏc thuật ngữ của Lingo cú thể túm tắt nh sau:

Tham số (Argument) là tờn tượng trưng dựng thế chỗ cho cỏc giỏ trị thực sự sẽ được truyền cho hàm khi hàm được gọi.

Lệnh (Command) là một chỉ thị yờu cầu Director thực hiện một thao tỏc gỡ đú. Vớ dụ nh chuyển đầu đọc tới một khung hỡnh khỏc.

Hằng (Constant) là cỏc yếu tố khụng thay đổi. Vớ dụ ta cú cỏc hằng TAB, EMPTY, và RETURN.

Sự kiện (Event) là cỏc hành động xảy ra khi phim đang chạy. Vớ dụ, phim kết thỳc, bắt đầu một sprite, đầu đọc đi vào một khung hỡnh, người dựng gừ phớm, đều là những sự kiện.

Biểu thức (Expression) là bất cứ phần nào của dũng lệnh mà tạo ra một giỏ trị. Vớ dụ, 2 + 2 là một biểu thức.

Hàm (Function) trả về một giỏ trị.

Hàm xử lý (Handler) là tập hợp cỏc lệnh Lingo, chạy khi một sự kiện nào xỏc định xảy ra. Vớ dụ, cỏc dũng lệnh sau chứa một hàm xử lý, hàm này được gọi khi chuột được nhấn:

on mouseDown beep

end

Từ khoỏ (Keyword) là cỏc từ dành riờng cú ý nghĩa đặc biệt.

Danh sỏch (List) là tập hợp cỏc giỏ trị dựng để theo dừi và cập nhật dóy dữ liệu.

Thụng bỏo (Message) là những lời gọi do Director gửi đến script khi một sự kiện xỏc định xảy ra.

Toỏn tử (Operator) dựng để tớnh toỏn tạo ra giỏ trị mới từ một hay nhiều giỏ trị cũ.

Thuộc tớnh (Propertie) là cỏc tớnh chất để xỏc định một đối tượng.

Biến (Variable) là cỏc thành phần dựng để lưu trữ và cập nhật giỏ trị.

Mọi điều trong Lingo xảy ra nh kết quả của một sự kiện. Một số sự kiện là hoạt động của người dựng, mouseUp, keyUp; một số khỏc là của hệ thống,

nh timeout. Bảng dưới đõy liệt kờ cỏc sự kiện chuẩn mà Lingo cú thể nhận biết.

Cỏc sự kiện chuẩn của Lingo

Sự kiện Xảy ra khi

MouseUp Nhả chuột

MouseDown Nhấn chuột

MouseEnter Con trỏ di chuyển đến một sprite MouseLeave Con trỏ di chuyển ra khỏi sprite MouseWithin Con trỏ nằm trong một sprite

CuePassed Mỗi khi một điểm nhắc được truyền bởi một õm thanh, video số QuickTime hoặc Xtra mà hỗ trợ cỏc điểm nhắc

BeginSprite Đầu đọc nhập vào một sprite EndSprite Đầu đọc thoỏt khỏi một sprite

PrepareFrame Trước khi khung hiện tại được chiếu, cỏc khung đơn nhận message này. RightMouseUp Nhả nút chuột phải

RightMouseDown Nhấn nút chuột phải (adsbygoogle = window.adsbygoogle || []).push({});

KeyUp Nhả một phớm

KeyDown Nhấn một phớm

StartMovie Bắt đầu phim

StopMovie Kết thúc một phim

Xảy ra khi thực hiện lệnh quit

ActivateWindow Người dựng kớch vào một phim trong cửa sổ mà hiện tại khụng được “nổi” (focus), đưa phim đú “nổi”lờn MoveWindow Người dựng kộo một phim trong cửa

sổ

ResizeWindow định lại kớch thước một phim trong cửa sổ

DeactivateWindow Người dựng kớch vào một phim trong cửa sổ hiện tại, làm “chỡm” chương trỡnh hiện tại

CloseWindow Đúng cửa sổ

Lệnh close window

EnterFrame đầu đọc nhập vào một khung hỡnh ExitFrame đầu đọc thoỏt khỏi một khung hỡnh

Idle Khụng xử lý sự kiện nào

TimeOut Thuộc tớnh hệ thống timeLapsed >=thuộc tớnh hệ thống timeoutLength

Khi Director nhận thấy một sự kiện đó xảy ra, nú sẽ một thụng bỏo sự kiện (event message), sau đú tỡm trong cỏc script trong phim xem cú đoạn mó nào xử lý sự kiện đú khụng ( tỡm hàm handler). Thủ tục Lingo gồm một hoặc nhiều hàm xử lý sự kiện.

Cỏc lệnh Lingo dựng để chỉ cho Director biết những việc cần làm khi thỡm thấy một thụng bỏo sự kiện. Ta cú thể tạo cỏc sự kiện và cỏc hàm xử lý sự kiện của riờng mỡnh. Cỏc hàm xử lý sự kiện của người dựng cú dạng nh sau: On handlerName

Lingo statements End

Khụng giống nh cỏc hàm xử lý sự kiện được định nghĩa trước ( được dựng để trả lời một sự kiện đó tỡm thấy), cỏc hàm xử lý sự kiện người dựng phải được gọi rừ ràng trong thủ tục.

Cỏc loại Lingo script

Director dựng bốn loại script: behavior script, movie script, script cha, và script gắn với thành phần cast. Behavior script, movie scripts, và script cha

tất cả đều là những thành phần trong cửa sổ Cast.

Behavior là loại script được gỏn với sprite hay frame trong Score, được gọi là sprite behavior hay frame behavior. Loại script này chứa cỏc điều khiển xỏc định xem nú xử lý một thụng bỏo khi nào và ở đõu.

Tất cả cỏc behavior được thờm vào cast xuất hiện trong menu Popup

Behavior Inspector. (cỏc loại script khụng cú ở đõy).

Ta cú thể gắn cựng một behavior vào nhiều vị trớ trong Score. Khi soạn thảo một behavior, nú ảnh hưởng đến toàn bộ cỏc vị trớ được gỏn. Movie script đỏp ứng cỏc sự kiện nh nhấn phớm hay click chuột, và cú thể kiểm soỏt cỏc sự kiện khi phim bắt đầu, kết thỳc, hay tạm dừng. Cỏc hàm xử lý trong một

movie script cú thể được gọi từ cỏc script khỏc khi phim chạy.

Movie script cú thể được dựng trong toàn bộ phim, bất kể là phim đang ở khung hỡnh nào, hay người dựng đang tương tỏc với sprite nào. Movie script sẽ nhận tất cả cỏc thụng bỏo mà chưa được xử lý bởi behavior scipt, hay script của thành phần cast. Movie script là nơi tốt nhất để đặt cỏc hàm xử lý mặc định.

Script chas là script đặc biệt chứa cỏc lệnh Lingo dựng để tạo cỏc đối tượng con(child object). Ta cú thể dựng script cha để sinh ra cỏc đối tượng script hoạt động độc lập với nhau. Script cha được dựng để lập trỡnh theo phong cỏch hướng đối tượng (object-oriented).

Script của thành phần cast được gắn trực tiếp với một thành phần cast, khụng phụ thuộc vào Score.

Khụng giống với behavior, movie script, và script cha, script của thành phần trong cast khụng xuất hiện trong cửa sổ Cast. (adsbygoogle = window.adsbygoogle || []).push({});

Cỏc hàm xử lý sự kiện của hệ thống (system handler)

Ngoài cỏc loại script trờn, cũn cú cỏc hàm xử lý của hệ thống. Chỳng khỏc cỏc loại script cũn lại cỏc đặc điểm sau:

• Cỏc hàm xử lý cũn lại khụng nhận cỏc thụng bỏo trừ khi cỏc thụng bỏo truyền qua tất cả cỏc mức phõn cấp cao hơn. Cũn cỏc hàm xử lý sự kiện hệ thống sẽ nhận cỏc thụng bỏo trước tất cả cỏc hàm xử lý khỏc.

• Cỏc hàm xử lý sự kiện khỏc giữ lại mọi sự kiện mà chỳng nhận được, khụng truyền tiếp đi. Cũn cỏc hàm xử lý hệ thống thực hiện thụng bỏo nhận được , sau đú tiếp tục gửi nú đến cỏc mức phõn cấp khỏc. Sau đõy là một vài hàm xử lý hệ thống:

MouseUpScript MouseDownScript KeyupScript

KeyDownScript TimeOutScript

Ta cú thể đặt lại một hàm xử lý hệ thống từ bất kỳ một script nào bằng cỳ phỏp sau:

Set the eventScript to “code lines

Vớ dụ:

the keyDownScript = "if the key = RETURN then go to the frame + 1" Hay đặt đến một hàm của người dựng

Set the mouseScript to “userhandler”

Cú thể vụ hiệu hoỏ hàm xử lý hệ thống bằng cõu lệnh Set the eventScript to EMPTY

Cỏc hàm xử lý sự kiện hệ thống cú lợi khi ta cần xử lý sự kiện chung. Nếu khụng ta phải viết lệnh để xử lý cỏc sự kiện ở tất cả cỏc script khỏc.

Thứ tự phõn cấp cỏc thụng bỏo

Director truyền cỏc thụng bỏo đến cỏc script khỏc nhau theo mụt trật tự xỏc định. Cỏc thụng bỏo được truyền theo thứ tự sau:

Cỏc hàm xử lý sự kiện của hệ thống ( system handlers)

Cỏc hàm xử lý sự kiện của sprite ( sprite handlers)

Cỏc hàm xử lý sự kiện của thành phần cast (cast member’s scripts)

Cỏc hàm xử lý sự kiện của khung hỡnh (frame handlers)

Cỏc hàm xử lý sự kiện của phim (Movie handlers)

Muốn Director truyền thụng bỏo đến hàm xử lý cần thiết, ta phải đặt nú trong loại script cú thể nhận được thụng bỏo đú. Sau đõy là bảng gồm cỏc loại thụng bỏo và cỏc script cú thể nhận được cỏc thụng bỏo đú:

Sprite script MouseEnter MouseLeave MouseWithin MouseUp MouseDown RightMouseUp RightMouseDown KeyUp KeyDown BeginSprite EndSprite PrepareFrame Cast member’s script MouseEnter

MouseLeave MouseWithin MouseUp MouseDown RightMouseUp RightMouseDown KeyUp KeyDown

Frame script EnterFrame

MouseUp MouseDown RightMouseUp RightMouseDown KeyUp KeyDown TimeOut

Movie script EnterFrame

ExitFrame MouseUp MouseDown RightMouseUp RightMouseDown KeyUp KeyDown Idle StartMovie StopMovie ActivateWindow MoveWindow ResizeWindow DeactivateWindow

CloseWindow TimeOut

Truyền cỏc thụng bỏo sự kiện

Thụng thường cỏc điều khiển thụng bỏo sprite, cast, frame nhận được thụng bỏo và nú khụng tiếp tục truyền thụng bỏo đến cỏc mức tiếp theo nữa. Nhưng đụi khi ta muốn cỏc script tiếp theo cũng nhận được thụng bỏo, muốn thế ta dựng lệnh pass. Khi ta thờm lệnh pass vào trong một hàm xử lý sự kiện, thỡ sau khi sau khi thực hiện cỏc hành động cần thiết, nú sẽ truyền thụng bỏo sự kiện tới cỏc đối tượng khỏc trong mức khỏc. (adsbygoogle = window.adsbygoogle || []).push({});

Cỏc hàm xử lý hệ thống luụn truyền đi cỏc thụng bỏo mà nú nhận được. Nếu ta dựng lệnh stopEvent trong hàm xử lý hệ thống, nú sẽ khụng truyền đi nữa. Ngoài ra ta cũng cú thể tự sinh ra một thụng bỏo và truyền nú đi. Vớ du ta thờm dũng lệnh MouseDown(script “button”)

Nếu button là tờn của một sprite hay cast member script của một nút trờn stage, nút sẽ hoạt động nh thể là ngườidựng vừa nhấn chuột.

II. Cỏc kiểu biến trong Director

Director dựng cỏc biến để lưu trữ và cập nhật cỏc giỏ trị của dữ liệu. Một biến cú thể thay đổi giỏ trị của nú khi chạy phim. Bằng cỏch thay đổi giỏ trị của một biến khi phim đang chạy ta cú thể lưu trữ những giỏ trị cần quan tõm vớ dụ như cất một đường dẫn URL, theo dừi số lần một người tham gia vào một phiờn chat, hay kiểm tra xem một hoạt động mạng đó kết thỳc chưa.

Cỏc biến cú thể là toàn cục hay biến cục bộ. Một biến toàn cục cú thể tồn tại và duy trỡ giỏ trị của nú khi nào mà phim cũn chạy, trong khi đú một biến cục bộ chỉ tồn tại trong một hàm xử lý hay.

Biến cục bộ

Một biến cục bộ chỉ tồn tại trong hóm xử lý cú chứa nú đang chạy. Cỏc biến cục bộ được dựng cho cỏc biến tạm thời trong một hàm xử lý. Điều này giỳp trỏnh việc vụ ý thay đổi giỏ trị trong hàm xử lý khỏc cú biến cục bộ cựng tờn.

Ta khai bỏo một biến cục bộ trong một hàm bằng lệnh put hoặc lệnh set:

Set [variable]=[value] hay

Put [value] into [variable]

Biến toàn cục

Cỏc biến toàn cục cú thể được chia sẻ giữa cỏc hàm xử lý và cỏc phim. Một biến toàn cục tồn tại và duy trỡ giỏ trị của nú khi phim chạy hay đến khi bạn dựng lệnh clearGlobasl để xoỏ.

Nếu một hàm xử lý khai bỏo một biến là toàn cục thỡ cú thể dựng giỏ trị hiện tại của biến đú. Nếu hàm này thay đổi giỏ trị của biến thỡ giỏ trị mới sẽ cú tỏc dụng đối với cỏc hàm cũn lại cú sử dụng nú. Khai bỏo biến toàn cục

nh sau:

Global gbvarName

Ta cú thể khai bỏo biến toàn cục bờn trong hay bờn ngoài một hàm. Khi khai bỏo biến toàn cục, ta khụng phải khởi tạo cho nó, Director sẽ gỏn cho nú một giỏ trị là <void>.

Bởi vỡ ta muốn dựng biến cục bộ trong suốt một bộ phim, tốt nhất là nờn khai bỏo chỳng trong hàm xử lý prepareMovie , đảm bảo rằng chỳng sẽ tồn tại ngay khi phim bắt đầu.

Cỏc dũng lệnh sau đõy khai bỏo biến toàn cục gName và gỏn nú giỏ trị là Mary:

global gName gName = "Mary"

Nếu một biến toàn cục được khai bỏo bờn trong một hàm xử lý và ta muốn sử dụng nú ở một hàm khỏc, ta phải khai bỏo lại biến toàn cục đú, nếu khụng Director sẽ xem nú là một biến cục bộ trựng tờn với biến toàn cục. Cũn nếu biến toàn cục được khai bỏo ở trong một MovieScript, bờn ngoài tất cả cỏc hàm, thỡ cỏc hàm khụng phải khai bỏo lại biến toàn cục.

Kiểu danh sỏch

Danh sỏch là một kiểu dữ liệu giỳp ta dễ dàng theo dừi và cập nhật một dóy dữ liệu. Vớ dụ, nếu muốn lưu trữ nhiều tờn hay số trong một dự ỏn Director, ta cú thể lưu trong một danh sỏch. Toỏn tử ([ ]) dựng để biểu diễn một danh sỏch.

Cú hai loại danh sỏch trong Lingo: danh sỏch tuyến tớnh và danh sỏch thuộc tớnh.

Trong một danh sỏch tuyến tớnh, mỗi một thành phần là một giỏ trị đơn. Vớ dụ, danh sỏch dưới đõy là một tập đơn giản cỏc số:

[100, 150, 300, 350]

Trong một danh sỏch thuộc tớnh, mỗi một thành phần chứa hai giỏ trị cỏch nhau bởi một dấu “:”. Một thành phần là tờn thuộc tớnh, luụn luụn cú dấu thăng (#) đi trước; thành phần kia là giỏ trị gắn với thuộc tớnh đú. Vớ dụ, những lệnh sau đõy sẽ đặt biến myList thành một danh sỏch thuộc tớnh chứa cỏc giỏ trị của cỏc thuộc tớnh là #speed, #direction,và #weight. Đõy cú thể là tớnh chất của một thiờn thể.

Cỏc thuộc tớnh cú thể xuất hiện nhiều lần trong một danh sỏch.

Cả hai loại danh sỏch cú thể là danh sỏch rụng, khụng chứa giỏ trị nào cả. Một danh sỏch tuyến tớnh chứa hai dấu múc vuụng ([ ]). Một danh sỏch thuộc tớnh rỗng chứa hai dấu múc vuụng và một dấu hai chấm ở giữa ([:]). Thao tỏc trờn danh sỏch:

Lưu trữ và truy nhập danh sỏch

• Danh sỏch tuyến tớnh (linear list) (adsbygoogle = window.adsbygoogle || []).push({});

Để đặt một giỏ trị vào một danh sỏch tuyến tớnh:

Dựng toỏn tử “=”. (Cú thể dựng lệnh setAt như trong cỏc phiờn bản Director trước)

Vớ dụ, dũng lệnh workerList[2] = "Tiffany" đặt giỏ trị phần tử thứ hai của danh sỏch là Tiffany.

Để truy nhập một giỏ trị trong một danh sỏch tuyến tớnh:

Dựng biến danh sỏch và chỉ số trỏ vào phần tử trong danh sỏch. (Cũn cú thể dựng lệnh getAt hay getaProp)

Vớ dụ, trong một danh sỏch tuyến tớnh tờn là workerList, ta đặt cỏc giỏ trị:

set workerList = ["Bruno ", "Heather ", "Carlos "],

thỡ biểu thức workerList[2] sẽ lấy giỏ trị của phần tử thứ hai trong

workerList, giỏ trị là Heather.

• Danh sỏch thuộc tớnh (property list)

Đối với danh sỏch thuộc tớnh thỡ cú hai kiểu cỳ phỏp cú thể dựng để thao tỏc. Kiểu thứ nhất là dựng dấu [] và tờn của thuộc tớnh. Kiểu thứ hai là dựng dấu chấm (.). Giả sử ta cú một danh sỏch

list foodList = [#breakfast:"Waffles", #lunch:"Tofu Burger", #dinner:"Hungarian Goulash"]

Cú thể dựng một vài lệnh như dưới đõy để thao tỏc

foodList[#Bruno] = "sushi" (vào thuộc tớnh Bruno cú giỏ trị “sushi”)

hay

foodList.Bruno = "sushi"

Kiểm tra cỏc đặc điểm của một danh sỏch:

Ta cú thể xỏc định cỏc đặc điểm của một danh sỏch và số phần tử của nú bằng cỏch sử dụng cỏc lệnh sau:

• Đếm số phần tử dựng hàm count().

• Xỏc định kiểu của danh sỏch, dựng hàm ilk().

• Lấy giỏ trị lớn nhất hay nhỏ nhất, dựng hàm max() hay min()

• Xỏc định vị trớ của một thuộc tớnh dựng cỏc hàm findPos, findPosNear, or getOne.

Copy cỏc danh sỏch

Gỏn một danh sỏch vào một biến và sau đú lại gỏn biến đú cho một biến khỏc khụng tạo ra một bản copy riờng biệt và khỏc với danh sỏch ban đầu. Hai biến đú thực chất chỉ trỏ vào cựng một danh sỏch mà thụi.

Để tạo ra một bản copy đỳng nghĩa, độc lập với danh sỏch gốc, ta dựng hàm

duplicate().

Cỏc dũng lệnh sau tạo ra một danh sỏch và sau đú lại tạo ra một bản copy của nú:

oldList = ["a", "b", "c"] newList = duplicate(oldList)

Sau đú thỡ nếu ta cú thay đổi một trong newList hay oldList danh sỏch kia khụng bị ảnh hưởng.

Sắp xếp danh sỏch: (adsbygoogle = window.adsbygoogle || []).push({});

Cú thể sắp xếp một danh sỏch trong đú cỏc phần tử được xếp theo trỡnh tự abc , số đứng trước xõu. Xõu được xếp tuỳ vào ký tự đầu tiờn, bất kể nú dài

Một phần của tài liệu đồ án công nghệ thông tin Chương trình Macromedia Director (Trang 26)