Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2

Nếu bạn đã quen sử dụng JavaScript rồi thì bạn sẽ rất vui khi biết rằng JavaScript

có thể liên lạc được với ActionScript. Tuy nhiên, cách này không hoạt động tốt đối với

tất cả các loại trình duyệt.

Việc liên lạc này được xây dựng trên 2 công nghệ. Một là công nghệ

LiveConnect được xây dựng trong những phiên bản trình duyệt Netscape trước phiên

bản 6.0. Công nghệ thứ hai là ActiveX dùng để liên lạc giữa Flash và Internet

Explorer. Nhưng nếu bạn đang thiết kế cho người dùng sử dụng trình duyệt của

Windows thì cách này sẽ rất tốt.

Gởi thông điệp đến JavaScript

Gởi thông điệp từ ActionScript đến JavaScript thì chỉ cần viết code trong

ActionScript nhưng nó cũng sẽ thay đổi nội dung trang HTML của bạn .

Nếu bạn tạo file Flash bằng cách chọn FSCommand trong Publish settings, bạn

sẽ tạo được một file HTML đã được sửa chữa đầy đủ để nhận thông điệp. Công việc

của bạn chỉ là thay thế những chỗ được đánh dấu Your code here bằng phần JavaScript

của bạn.

Để hiểu rõ hơn cách nó làm việc như thế nào thì chúng ta hãy cùng nhau mổ xẻ

file html mà Flash đã tạo ra nhé

Đầu tiên, hãy chú ý đến thẻ OBJECT/EMBED, trong đó sẽ có một số phần để

chấp nhận sự liên lạc. Tham số ID trong thẻ OBJECT sẽ giống với tham số NAME

trong thẻ EMBED. Hai tham số này sẽ đặt tên cho movie của chúng ta trong trang web

để JavaScript có thể gọi nó. Ngoài ra còn có một tham số khác trong thẻ EMBED, đó

là tham số swLiveConnect để cho phép những phiên bạn Netscape trước phiên bản 6.0

có thể liên lạc với Flash bằng công nghệ LiveConnect.

CODE

[ic:cc]flash/swflash.cab#version=5,0,0,0"

ID=flashmovie WIDTH=120 HEIGHT=120>

VALUE=high> <>

NAME=bgcolor VALUE=#FFFFFF>

bgcolor=#FFFFFF

WIDTH=120 HEIGHT=120

swLiveConnect=true NAME=flashmovie TYPE="application/x-shockwave-flash"

PLUGINSPAGE="http:

index.cgi?P1_Prod_Version=ShockwaveFlash">

EMBED>Trang 111

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 1

Trang 1

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 2

Trang 2

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 3

Trang 3

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 4

Trang 4

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 5

Trang 5

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 6

Trang 6

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 7

Trang 7

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 8

Trang 8

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 9

Trang 9

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2 trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 60 trang xuanhieu 5980
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2

Giáo trình Thiết kế đa phương tiện (Flash) - Phần 2
vent sound. Ở đây toàn bộ sound sẽ 
được load vào bộ nhớ trước và sau đó được chơi nếu như có lệnh start(); 
 CODE 
 on (release) { mySound = 
 new sound(); 
 mySound.loadSound("mysound.mp3",false); mySound.start(); 
 } 
 Flash sẽ ghi nhớ là lệnh start đã được đưa ra thậm chí khi sound mới chỉ bắt đầu 
download. Khi sound được load xong thì nó sẽ được play ngay lập tức 
 Trang 157 
 CODE 
 on (release) { mySound = 
 new sound(); 
 mySound.loadSound("mysound.mp3",true); 
 } 
 Cách thứ 2 là ta sử dụng true ở param thứ 2. Giá trị true này sẽ bảo với flash đó 
là 1 stream sound. Ngay khi sound được load phần nào thì sẽ bắt đầu chơi ngay trong 
lúc phần còn lại vẫn tiếp tục được load. Nếu người dùng có kết nối mạng tốt thì sẽ 
nghe được toàn bộ sound khi load. 
 Ghi chú là bạn ko cần phải sử dụng lệnh start với 1 streaming sound. Tuy nhiên 
bạn cần phải chú ý khi sử lí file MP3. Ví dụ nếu bạn sử dụng file nhạc mp3 với 128 
Kbps hay 160 Kbps thường dùng để nghe thì nó sẽ là 1 file quá lớn để có thể stream 
vói internet, đặc biệt nếu người sư dụng dùng modem. 32 Kpsb hay ít hơn sẽ thích hợp 
hơn khi ta sử dụng stream. 
Một số câu hỏi và trả lời sau có thể giúp bạn nắm rõ bài hơn: 
 Câu 1: ta có thể load 1 mc, vậy có thể unload chúng ko?? 
 -Trả lời: có, bằng lệnh unloadMovie 
 Câu 2: bình thường thì flash cần bao lâu để load trước khi nó start?? 
 -Trả lời: ngay frame đầu tiên. Bởi vậy bạn cần sử dụng lệnh stop nếu như muốn 
nó đợi trước khi tiếp tục. 
 Câu 3: 2 cách để xác định khi 1 movie được load hoàn toàn?? 
 -Trả lời: cách 1 dùng getBytesLoaded == getBytesTotal function cách 2 dùng 
_frameLoaded property và _totalFrames property. 
 Ngoài ra bạn có thể xem thêm các bài viết sau: 
 Cách tạo 1 preloader đơn giản 
 Trang 158 
 Cách tổng quát để tạo 1 loader đẹp: 
 Ngoài ra về loadMovie, loadSound cũng có rất nhiều bài. Bạn chịu khó search ha 
 Vẽ với AS 
 Đây là h cuối cùng, cũng là giờ rất thú vị, hy vọng các bạn cảm thấy dzui dzẻ khi 
vẽ bằng AS . CBT ko có kinh nghiệm dịch bài, với lại nhìn vào mấy bài text dày đặc 
chữ là tối mắt tối mũi nên nhiều chỗ dịch lung tung, theo ý thích bởi vậy có chỗ nào 
diễn đạt tối nghĩa, ko đúng thì các bạn cứ thẳng thắn góp ý, đừng thương tiếc . 
 Drawing lines 
 -Để vẽ 1 đường thẳng, việc đầu tiên cần làm là định nghĩa các giá trị của 
lineStyle, nó dày như thế nào nè, rùi có màu gì và độ alpha. 
 CODE 
 lineStyle(thickness, color, alpha); 
 Màu (color): giá trị được đưa ra dưới dạng số thập lục phân hexa, ví dụ: 
0x000000 là màu đen, 0xffffff: trắng , chúng ta có thể nhìn vào bảng color mixer để 
biết thêm 
 Độ trong suốt(alpha): min = 0; max=100; 
 Độ dày (thickness): độ dày nhỏ nhất là 0, còn lớn nhất là bao nhiu thì cbt ko biết 
. Với độ dày 1 cái line có độ dày là 1 pixel, còn nếu ta cho giá trị là 0 (hairline) thì nó 
vẫn có độ dày là 1 pixel . Tuy nhiên chúng khác nhau ở chỗ: với hairline nếu như 
chúng ta thay đổi scale của nó thì độ dày của nó vẫn ko thay đổi. Các bạn thử đoạn 
code sau, và thay đổi giá trị độ dày nhé: 
 CODE 
 lineStyle(0,0x000000,100); 
 moveTo(20,50); lineTo(200,200); 
 _xscale=300; 
 _yscale=300; 
 Nhìn đoạn code trên ta thấy xuất hiện lệnh: 
 Trang 159 
 CODE 
 moveTo(20,50) 
 Để vẽ 1 đường thẳng ta cần xác định 2 điểm: đầu và cuối. Mỗi điểm lại được xác 
đinh với 2 giá trị x và y 
 ---> moveTo là điểm đầu, điểm đặt bút. Như vậy ở câu trên ta đặt bút tại x=20; 
y=50. 
 ----> lineTo là điểm tiếp đến. Ta có x= 200; y=200. Như vậy chúng ta đã vẽ được 
đường thẳng nối từ điểm (20,50) đến (200,200). 
Chú ý: 
 1. nếu như các bạn ko nêu điểm moveTo thì nó tự mặc định là điểm (0,0) 2. nếu 
như các bạn vẽ thêm các line tiếp theo với lineTo thì điểm đặt bút được mặc định là 
điểm cuối cùng của line trước. 
 Ví dụ để vẽ 500 đường lung tung trên màn hình ta có đoạn code đơn giản sau: 
 CODE 
 // set line style 
 lineStyle(2,0x000000,100); 
 // draw 500 lines for(var 
 i=0;i<500;i++) { 
 // pick random start point x1 = 
 Math.random()*550; y1 = 
 Math.random()*400; 
 // pick random end point x2 = 
 Math.random()*550; y2 = 
 Math.random()*400; 
 // move to start point 
 moveTo(x1,y1); 
 // draw to end point lineTo(x2,y2); 
 } 
 Trang 160 
 Bây giờ các bạn thử play trò này xem sao, thử thay đổi độ alpha, color or 
thickness của nó 
 Mọi người thử copy and paste đoạn code sau xem hiện ra gì nào : 
 CODE 
 // set line style 
 lineStyle(2,0x999999,100); 
 for(var x=-400;x<550;x+=10) { 
 // draw diagonal strip from left to right 
 moveTo(x,0); lineTo(x+400,400); 
 // draw opposite strip moveTo(550-x,0); 
 lineTo(550-x-400,400); 
 } 
Drawing Curves 
 Tương tự khi bạn đã biết cách vẽ line rồi thì vẽ curveTo ko có gì là khó. Nó chỉ 
có thêm 1 chút giá trị thôi. Ta có đoạn code: 
 CODE 
 lineStyle(3,0x000000,100); moveTo(150,200); 
 curveTo(275,275,400,200); 
 Như đã biết moveTo là điểm bắt đầu, anker1 ha. 
 curveTo(control_x, control_y, anker2_x, anker2_y); Control_point là tiếp tuyến 
của 2 điểm anker với đường cong anker2 là điểm cuối cùng của curve. 
 Các bạn có thể đọc thêm 1 số bài viết trong diễn đàn về đường cong bezier để 
hiểu rõ thêm . 
 Chúng ta play tiếp với đoạn code sau: 
 CODE 
 Trang 161 
 lineStyle( 1, 0x0000FF, 100 ); moveTo(200,200); 
 curveTo(250,200,300,200); 
 curveTo(300,250,300,300); 
 curveTo(250,300,200,300); 
 curveTo(200,250,200,200); 
 Olala, tại sao chúng ko hiện ra các curve mà lại là 1 hình vuông. Nguyên nhân là 
do 
 chúng ta cho các giá trị control point ở giữa 2 điểm kia Hãy thử thay đổi 1 chút 
xem chúng ta có gì nào: 
 CODE 
 var bend = 42; moveTo(200,200); 
 curveTo(250,200-bend,300,200); 
 curveTo(300+bend,250,300,300); 
 curveTo(250,300+bend,200,300); 
 curveTo(200-bend,250,200,200); 
 sử dụng biến bend để thay đổi control point ta được 1 hình trong hơi méo rùi . Về 
phần này plz đọc thêm các topic trong box AS 
 Drawing Filled Areas 
 Trước hết để có thể tô màu cho 1 vùng ta cần phải vẽ 1 hình khép kín ha. Sau đó 
dùng lệnh beginFill để vẽ: 
 CODE 
 beginFill(color of fill, alpha of fill) 
 Ví dụ đoạn code sau: 
 CODE 
 lineStyle( 3, 0x000000, 100 ); 
 beginFill( 0xFF0000 ); 
 moveTo(175,100); lineTo(375,100); 
 lineTo(375,300); lineTo(175,300); 
 lineTo(175,100); 
 endFill(); 
 Trang 162 
 Nếu như 1 vùng được cắt bởi line lần thứ 2 thì ở chỗ đó nó sẽ ko có màu nữa. 
Dựa vào đó ta có thể tạo nên 1 số hình thú vị . Bạn thử copy đoạn code sau xem nó 
hiện ra cái gì nào và chỗ nào được tô màu, chỗ nào ko : 
 CODE 
 lineStyle(3,0x000000,100 ); 
 beginFill(0xFF0000); 
 moveTo(250,50); 
 lineTo(308,230); 
 lineTo(155,120); 
 lineTo(345,120); 
 lineTo(192,230); 
 lineTo(250,50); endFill(); 
 Có cách khác tốt hơn để vẽ 1 star, nó cho phép chúng ta qui định các giá trị ban 
đầu. 
 Bạn thử xem file fla 24betterstar.fla xem sao 
 Pause 
Vẽ với chuột 
 Phần tiếp theo trong sách này có đoạn code để user vẽ với chuột, thành thật mà 
nói, nếu bạn đã đọc đoạn code của DS post bên phần Flash hack thì bạn sẽ thấy nó 
khác nhau 1 trời 1 vực như thế nào 
 Nếu bạn đã đọc đoạn code của 
DS thì đừng nên đọc tiếp đoạn code hướng dẫn trong cuốn sách này làm gì. CBt thấy 
là ko cần thiết phải dịch chỗ này nhưng trót rùi nên tôn trọng quyển sách, cbt dịch cho 
đầy đủ vậy 
 1.Tạo 1 shape đơn giản, convert to mc. 
 2.Copy đoạn code sau vào mc (cbt đã phân tích kèm) 
 CODE 
 onClipEvent (load) { 
 // cho các giá trị cho kiểu line 
 _root.lineStyle(0, 0x000000, 100); 
 } 
 Trang 163 
 //khi chuột được dzí xuống thì bắt đầu vẽ onClipEvent(mouseDown) 
 { 
 // ok to draw 
 draw = true; 
 // xác định điểm start để vẽ startX 
 = _root._xmouse; startY = 
 _root._ymouse; 
 _root.moveTo(startX,startY); 
 } 
 //khi thả chuột ra thì ko vẽ nữa 
 onClipEvent(mouseUp) { // don't 
 draw anymore draw = false; 
 } 
//bắt đầu onClipEvent 
 (enterFrame) { if (draw) { 
 //lấy vị trí hiện tại của chuột 
 newX = _root._xmouse; newY = 
 _root._ymouse; 
 //nếu như vị trí khác với vị trí ban đầu 
 if ((newX != startX) or (newY != startY)) { 
 //vẽ 1 line tới vị trí mới 
 _root.lineTo(newX,newY); 
 // reset location for new time 
 startX = newX; startY = newY; 
 } 
 } 
 } 
 3. Tạo 1 movie clip riêng cho các hình đã vẽ 
 Những gì chúng ta đã làm ở trên chỉ là vẽ 1 cách đơn giản trên stage, nó có bất 
lợi là có thể bị bất kì mc nào che khuất. ko thể di chuyển. 
 Trang 164 
 Khi chúng ta đặt những cái này vào trong 1 mc thì thuận tiện hơn rất nhiều. ta có 
thể thay đổi _x, _y, rotation, alpha, scale .... 
 Để tạo 1 new mc ta dùng lệnh : 
 CODE 
 my_mc.createEmptyMovieClip("tên của new mc", level của nó) 
 Ví dụ : 
 CODE 
 this.createEmptyMovieClip("myMovieClip",1); 
 myMoveClip.lineStyle(0,0x000000,100); myMoveClip.moveTo(100,100); 
 myMovieClip.lineTo(200,200); 
 Như vậy bạn đã có 1 mc mới tên là myMovieClip, level 1, có chứa các hình vẽ 
trên. 
 Nếu bạn muốn viết nhanh hơn thì có thể viết lại như sau: 
 CODE 
 this.createEmptyMovieClip("myMovieClip",1); 
 with(mymovieClip){ lineStyle(0,0x000000,100); 
 moveTo(100,100); lineTo(200,200); 
 } 
 Lệnh createEmptyMovieClip này còn có rất nhiều tác dụng khác như ta có thể 
attach thêm movie vào đó hay là sao chép (duplicateMovieClip) 
 Rùi bi giờ bạn hãy thử tạo 1 mc mới đi nào 
 Có 1 bài hướng dẫn vẽ bông tuyết khá đẹp trong cuốn sách, tuy nhiên code được 
chia nhỏ thành các function khá dài dòng và mất công. trong khi trong diễn đàn của 
chúng ta có nhiều đoạn code về làm tuyết hay hơn rất nhiều: bài thế trời làm tuyết của 
DS trong box hướng dẫn thực hành. Đặc bịêt hợp với chủ đề này là bài dùng 100% 
bằng AS c 
 Trang 165 
 dịch vủa Raider (tìm trong mề đoạn code trong sách này nục lục), trong ữa. đó 
có đoạn code rất hay. Bởi vậy cbt sẽ ko Để biết thêm chi tiết xin xem file fla 
24snowflakes.fla 
Textfield 
 Đây là phần cuối cùng, chúng ta sẽ học cách tạo 1 text field và sau đó là làm 1 
effect flying words. 
 Để Tạo Text tạo 1 text chúng ta cần tạo 1 ô text (text field) với lệnh : 
 CODE 
 createTextField("text_name", level , vị trí _x, vi trí _y, chiều rộng,chiều dài); 
 Sau đó là text hiện lên trong text field đó: 
 CODE 
 text_name.text = "Nội dung text"; 
 Ví dụ đoạn code sau, mình phân tích trong đó luon cho nhanh: 
 CODE 
 //tạo 1 ô chữ tên my..., level 0, _x=0, _y=170, width=550, height=60 
 createTextField("myTextField",0,0,170,550,60); 
 //text 
 myTextField.text = "Welcome to VNFX"; 
 myTextField.embedFonts = true; 
 //mặc định các tính chất của text 
 myTextFormat = new TextFormat(); 
//loại chữ, cỡ, màu, vị trí 
 myTextFormat.font = "Arial"; 
 myTextFormat.size = 48; 
 myTextFormat.color = 0x330000; 
 myTextFormat.align = "center"; 
 Trang 166 
 //liên kết những tính chất này với ô text của chúng ta 
 myTextField.setTextFormat(myTextFormat); 
 Chú ý khi sử dụng embedFont ta cần phải chọn 1 font trong thư viện click vào 
góc phải trên cùng của thư viện, chọn font mà bạn muốn, sau đó click chuột phải, 
linkage, export, IDname 
 Nếu bạn muốn tạo 1 Input text thì cần phải cho type của textField là input, sau đó 
có thể set thêm các variable để máy có thể nhận info từ user 
 Còn rất nhiều các tính chất trong textField và textFormat class, các bạn nên đọc 
thêm help để trang trí cho textField của mình 
 Lý thuyết chỉ có vậy, nào bây giờ chúng ta sẽ làm effect flying words 
 CBT không dám nhận xét nhiều về đoạn code và cách làm trong cuốn sách này, 
tuy nhiên nó được chia nhỏ thành các function gây rắc rối, dài dòng cho người đọc, lại 
còn phải tạo thêm mc trên stage, có chỗ hạn chế nữa... 
 CODE 
 function createText(n,text) { // create a new movie clip 
 this.createEmptyMovieClip("text"+n,n); mc = this["text"+n]; 
 // set the text format myFormat = new TextFormat(); myFormat.font = "Arial"; 
 myFormat.color = 0x000000; myFormat.size = 24; 
 myFormat.align = "center"; 
 // create a new text field 
 mc.createTextField("myTextField",1,-100,-20,200,40); mc.myTextField.text = 
 text.toUpperCase(); mc.myTextField.embedFonts = true; 
 mc.myTextField.setTextFormat(myFormat); 
 // return reference to this movie clip return(mc); 
 } 
 function createAllText(textList) { // loop through array of text 
 for(var i=0;i<textList.length;i++) { 
 // create movie clip with this text mc = createText(i,textList[i]); 
 Trang 167 
 // set random location mc._x = Math.random()*450+50; mc._y = 
 Math.random()*350+25; 
 // set scale to nothing 
 mc._xscale = 0; mc._yscale = 0; 
 // set scale variable to negative amount mc.scale = 0-i*100; } 
 } 
 function init() { // create array of text 
 var words = "Love,Peace,Destiny,Llamas,Fate,History,Cheese,Rainbows,Tiny 
 Rocks"; 
 var textList = words.split(","); 
 // create all text movie clips createAllText(textList); 
 // remember how many there are numWords = textList.length; 
 } 
 function moveText() { // loop through words 
 for(var i=0;i<numWords;i++) { 
 // increase the scale of this movie clip mc = this["text"+i]; 
 mc.scale += 10; 
 // hide movie clip when scale is too big if (mc.scale > 300) { 
 mc._visible = false; 
 // set scale of movie clip to scale when it is a positive number 
 } else if (mc.scale > 0) { mc._xscale = mc.scale; mc._yscale = 
 mc.scale; 
 } 
 } } init(); stop(); 
 Sau đó bạn tạo 1 mc trên stage và nhét đoạn code sau vào: 
 CODE 
 onClipEvent(enterFrame) { 
 _parent.moveText(); } 
 Cuối cùng vào thư viện, trong menu của thư viện ta chọn font ruì linkage, rùi 
export với tên Arial. 
 Trang 168 
 effect này ko có gì khác là ta tạo 1 array chứa các ô text, sau đó các text hiện ra 
từ từ và dần dần phóng to lên, đến 1 kích thước nào đó thì biến mất. 
 Để các text hiện ra từ từ ta chỉ cần mặc định scale ban đầu của text là ko, sau đó 
dùng thêm 1 var nữa. Dần dần phóng to lên thì ta thay đổi scale thôi. 
 Thấy đoạn code trên dài dòng quá nên cbt viết lại cho nó đơn giản bớt như sau 
 CODE 
 function a(){ 
 wordArr=new Array("vnfx","flash","actionscript"); 
 //ta tạo 3 mc chứa 3 text field for(var 
 n=0;n<wordArr.length;n++){ 
 _root.createEmptyMovieClip("text"+n,n) 
 mc=_root["text"+n]; myFormat=new 
 TextFormat(); myFormat.font="Arial"; 
 myFormat.color = 0x000000; 
 myFormat.size = 24; myFormat.align = 
 "center"; 
mc.createTextField("myTextField",1,-100,-20,200,40); 
 mc.myTextField.text = wordArr[n]; 
 mc.myTextField.embedFonts = true; 
 mc.myTextField.setTextFormat(myFormat); 
 //mặc định các giá trị ban đầu 
 mc._x=Math.random()*450+50; 
 mc._y=Math.random()*350+25; mc._xscale=mc._yscale=0; 
 //biến để tạo sự xuất hiên từ từ 
 mc.scale=0-n*100; 
 mc.onEnterFrame=function(){ 
 this.scale+=10; if (this.scale > 
 300) { removeMovieClip(this); } 
 else if (this.scale > 0) { 
 this._xscale=this._yscale = this.scale; 
 } 
 } 
 } } a(); 
 //cho lặp 
 lại sau 5 s 
 setInterval(a, 5000); 
 Trang 169 

File đính kèm:

  • pdfgiao_trinh_thiet_ke_da_phuong_tien_flash_phan_2.pdf