Tác giả: Guardial Angel (tức >VoDich<) Nguồn: Skynetgamemaker.vnbb.com (đã die) Mạn phép post lại ở đây. Không biết trong 4rum có chưa. Nếu có oài mong Mod del hộ :'> CHƯƠNG I: CÁC KHÁI NIỆM CƠ BẢN: Sau khi cài đặt và chạy GameMaker (GM) lần đầu tiên, có thể CT sẽ hỏi bạn có muốn enable chế độ Advanced Mode ko, bạn cần trả lời là ok hay yes, đây là chế độ nâng cao mở ra nhiều chức năng cần thiết cho chúng ta. Giao diện CT khá đơn giản, cột bên trái gồm có các nhóm: Sprites, Sounds, Backgrounds, Paths, Scripts, Fonts, Time Lines, Objects, Rooms, Game Information, Global Game Settings. Ở mức cơ bản bạn chỉ cần chú ý các phần sau: + Sprites: là nơi chứa và xử lý đơn giản những file pictures (pic), nó có thể nhận nhiều loại file pic như *.bmp, *.png, *.jpg, *.gif.... Bạn có thể load ảnh thường cũng như ảnh động (*.gif). Các hình ảnh chứa trong Sprites gọi là sprite, nó là đại diện để hiển thị mỗi object trong game. Các sprite động thì chứa nhiều frame (khi load file gif động) , nếu có 5 frame thì số frame được đánh số như sau, frame 1 là số 0, frame 2 là số 1..... tương tự cứ thế + Sounds: nơi chưá những file âm thanh, đơn giản vậy thôi. + Backgrounds: là nơi chưá những hình nền, tile set cho game. + Fonts: nếu bạn sử dụng nhiều font khác nhau thì phải khai báo font đó ở đây, tránh việc máy người khác khi play game ko nhận diện được font vì ko có font đó. + Objects: là nơi chưá những vật thể trong game, tất cả cây cối, vũ khí, nhân vật, xe cộ......đây là nơi quan trọng nhất, và cũng là nơi bạn cần xử lý nhiều nhất. + Rooms: là nơi tổng hợp các nhóm trên để thể hiện game, và các Objects sẽ được thể hiện ở đây thông qua các sprite chưá trong Sprites, đây là nơi quan trọng thứ nhì. Nó gồm nhiều tab ( objects: dùng add object vào room/ settings: chỉnh độ lớn của room, tên room/ tiles: để vẽ các phần khác trong room = tile set/ background: chỉnh hình nền (background) hay hình phía trên (foreground).) + Game Information: nơi bạn viết 1 vài điều về game của bạn như creadit, info v.v... + Global Game Settings: phần này giúp bạn tinh chỉnh các thông số của game như, chế độ màn hình: fullscreen hay winmode, độ phân giải, bit màu, giúp thay logo, flash screen, và icon game.....tóm lại phần này để cuối hãy xử lý. Xong phần giới thiệu sơ bộ, các nhóm còn lại qua phần nâng cao mình sẽ nói tiếp. Bây giờ sẽ qui định chung những ký hiệu chung trong toàn forum nha: + Trước tiên là phần đặt tên cho các thành phần của nhóm. + Ta tạo mới 1 sprite (tương tự cho nhóm khác) mới = cách nhấp chuột phải vào Sprites chọn add sprite, (các nhóm khác cũng làm tương tự), sau đó sẽ hiện ra 1 window mới, phần name ta qui định đặt tên như sau: Với background là : ba_tênbackground (VD: ba_nui, ba_song) Với sound là: so_tênsound (VD: so_attack) Với font là: f_tênfont (VD: f_tahoma) Với room thì tùy bạn, nên đặt sao cho dễ nhớ. (ở thẻ settings) Với object là: o_tênobject (VD: o_hiepsi, o_congchua) Với sprite là: s_têncủahình (VD: s_hiepsi, s_congchua) <-- ở đây nên chú ý, nếu sprite đại diện cho object : o_hiepsi thì đặt là s_hiepsi, đừng đặt tên khác sẽ gây khó khăn sau này, (VD: o_tree thì s_tree). Tiếp theo là load sprite, tạo object, chọn sprite cho object, tạo room. + Tạo 1 sprite mới (làm như trên) đặt tên là s_tree, sau đó chọn hình 1 cái cây đơn giản: bấm Load Sprite rùi dẫn tới file pic cần load. chọn xong bấm Open>Ok. Thế là load xong 1 sprite +Tiếp theo tạo object mới, ta đặt tên là o_tree, bên dưới ô name là ô Sprite, ta sẽ chọn sprite cho object: bấm vào ô Sprite rùi chọn s_tree, thế là xong, bây giờ object o_tree đã có sprite đại diện, và vì thế nó sẽ hiển thị được trong room. +Tiếp theo tạo room mới, tên tùy bạn, bấm vào tab object, click chuột vào ô "Object to add..." chọn o_tree, nếu thấy hình cái cây ở khung bên trên là nãy giờ bạn đã làm đúng, còn ko thấy thì xem lại các bước. chọn o_tree sau đó click chuột vào nới muốn đặt o_tree trong room, vì mặc định room set SnapX và SnapY là 16x16 nên khi đặt bất cứ object nào vào room thì cũng phải theo những ô đó, nếu ko muốn bạn thay 16 = 0, hoặc giữ nguyên snap nhưng bấm nút ALT khi add object vô room. Sau khi xong hết, bấm vào dâú check màu xanh lá cây để kết thúc làm việc trong room. Sau đó mún chạy game thử bấm vào dấu mũi tên màu xanh lá cây trên menu. Nếu làm đúng hết, game sẽ chạy và nó sẽ thể hiện hình của object, bây giờ ta chưa thể làm gì với object cả vì chưa xác lập các Event cho object. Bước đầu nên tìm hiểu cơ bản vậy, ta sẽ nâng cao từ từ qua các chương.-/- CHƯƠNG II: CÁC EVENT ĐƠN GIẢN, XỬ LÝ SPRITE ĐỘNG Ở chương này ta sẽ làm quen với 1 số event, variable đơn giản. Trước hết cần xem qua hệ thống toạ độ và direction (hướng), hình vẽ: Hệ thống toạ độ oxy 2D, với direction là 8 hướng chính với các góc: 45, 90, 135, 180, 225, 270, 315, 360. Giống như vòng tròn lượng giác ấy Bây giờ, chúng ta cùng thực hiện: Mô tả: game sẽ có 1 object là o_hero, object này có thể move theo 4 direction 360, 90, 180, 270 khi ta ấn các arrow key (4 phím mũi tên). Vì thế ta cần tất cả 4 sprite để mô tả chuyển động của object qua 4 hướng (nên dùng hình động để game sinh động hơn *.gif). Bạn có thể sử dụng 4 sprite sau (mỗi sprite có 4 frame): [hinh] Load lần lượt 4 sprite và đặt tên như sau: + sprite đi lên (direction=90): s_hero_go_90. + sprite đi xuống (direction=270) s_hero_go_270 + sprite qua phải (direction=360) s_hero_go_360 + sprite qua trái (direction=180) s_hero_go_180 Bạn có thể tuỳ biến tên theo ý thích nhưng nên theo dạng như vậy để dễ dàng về sau. Xong phần sprite tiếp theo tạo new object đặt tên là o_hero, (object có thể thay đổi sprite dễ dàng bằng các variables nên chỉ cần 1 object cho các sprite liên quan. ) cửa sổ object hiện lên, có 4 cột, ở đây qui định gọi là oc_Garphic, oc_Events, oc_Actions1, oc_Actions2. Ở o_Garphic chọn sprite cho o_hero là 1 trong 4 sprite ban đầu, tùy bạn, sau đó tiến hành các bước: [+] oc_Events>Add Event>Create (có nghĩa là trong cột Events chọn add Event, chọn Create, sau này sẽ ghi tắt vậy các bạn hãy chú ý kĩ) ta chọn Create, Event Create này có tác dụng khi game bắt đầu (game start) nó sẽ thực hiện 1 loạt các Actions trong oc_Actions, khi thực hiện hết các Actions đã được khai báo trước rùi thì dừng lại, ko thực hiện lặp lại. Trong oc_Actions2>tab_control>ta nhấp chuột vào hình vuông màu nâu có chữ VAR, kéo thả qua oc_Actions1, thì có 1 window mới hiện lên. + Phần sau sẽ áp dụng chung cho các Actions2 khác: Ở phần [Applies to] nếu muốn thực hiện hành động bên dưới lên chính object mình đang điều chỉnh thì chọn Self, còn Other là cho object khác ko xác định, nếu muốn chọn XĐ 1 object nào đó thì chọn Object rùi tìm object mong muốn. Ở đây ta chọn self, trong 2 ô dưới ta điền như sau: variable : image_speed value : 0.5 (mún biết variable này có tác dụng gì qua topic "Các Variables Thông Dụng") +thôi giải thích đây luôn, nhưng bạn nên qua đó tìm hiểu kĩ hơn. image_speed là variable áp dụng cho những sprite động, nó thể hiện tốc độ hiển thị giữa 2 khung hình, giá trị càng nhỏ càng nhanh, và ngược laị. Vì ở đây mỗi sprite hero của ta chỉ có 4 frame nếu để value=1 thì sprite sẽ chuyển động rất nhanh ko phù hợp lắm. + điền xong bấm ok, tiếp tục kéo thả 1 cái ô vuông VAR như vậy nữa điền như sau Applies to self variable: image_single value: 0 image_single có tác dụng set sprite chỉ còn 1 frame trong sprite động. có nghĩa là sprite ko chuyển động nữa, tại vì nó chỉ còn 1 frame duy nhất và đó là frame số 0 ta chọn frame 0 vì trong sprite động frame 0 thể hiện hình hero đang đứng. +Toàn bộ Events Create sẽ có nghĩa là : khi game start, object sẽ set cho tốc độ khung hình là 0.5 và sẽ lấy frame 0 làm hình đại diện. [+] Tiếp theo: oc_Events>Add Event>Key Press>Left tiếp tục cho Right, Down, Up. Những Event này set những nút key arrow khi bấm. + Trong chọn Press left>tab_move kéo thả hình vuông có 8 mũi tên màu đỏ theo 8 hướng, config như sau: Applies to self nhấp vào mũi tên bên trái, chọn speed là 5 (tốc độ di chuyển) > OK, làm tương tự cho Up, Right, Down nhưng nhớ thay mũi tên nhé. + Đó là xong phần di chuyển, bây giờ, khi o_hero di chuyển thì phải thay những sprite tương ứng, như o_hero qua trái (direction=180) thì thay s_hero_go_180 chọn Press left>tab_main1 kéo hình vuông có con pacman màu đỏ thả vô, config như sau: Applies to self sprite: chọn s_hero_go_180 subimage:0 speed: 0.5 (speed ở đây là image_speed) làm tương tự cho Up, Down, Left, Right nhưng nhớ chọn sprite cho phù hợp, các thông kia giữ nguyên. + Toàn bộ có tác dụng là khi bấm left arrow key thì o_hero được set direction là 180 và speed =5, vậy o_hero sẽ di chuyển qua trái, tương tự cho những phím còn lại [+] Xong, nhưng để cho o_hero ngừng move khi ko bấm 4 arrow key nữa thì ta phải tạo event khi ko bấm arrow key nữa tiếp tục oc_Events>Add Event>Key Release> chọn lần lượt Up, Down, Left, Right , Key Release là event sau khi thả key ra ko bấm nữa. trong mỗi Up, Down, Left, Right key release kéo 1 ô vuông nâu VAR vào và config như sau cho cả 4 key release đó: Applies to self variable: speed value: 0 ta set khi thả key thì cho giá trị speed = 0, thế là o_hero ngừng move, nhưng sprite thì vẫn ko ngừng chuyển động, vì thế ta phải set thêm trong mỗi release key 1 VAR nữa config như sau: Applies to self variable: image_single value:0 set giống như VAR trong phần Create, thế là khi buông key, sprite sẽ là image đơn lẻ. [+] Xong, tiếp theo tạo 1 room, add o_hero vào room theo hướng dẫn Chương I, thế là xong rùi đó, bây giờ chạy game thử coi. Qua ví dụ này có thể biết 1 số variable cơ bản và cách chỉnh các phần event trong object. -/- CHƯƠNG III: NHỮNG VẤN ĐỀ LIÊN QUAN ĐẾN MOUSE (Event of mouse) VÀ CƠ CHẾ TÌM ĐƯỜNG CƠ BẢN TRONG GAME RPG. Trong chương 2 ta đã tạo 1 object, với các event dùng key move object theo 4 direction , trong chương 3 này ta sẽ dùng mouse move object theo những hướng bất kỳ. [+] Trước hết ta cần các sprite chính sau: _ 8 sprite của object thể hiện sự đứng yên (stand) theo 8 hướng (45,90,135,180,225,270,315,360): Name: đặt tên như sau: s_hero_s45, s_hero_s90,........ _ 8 sprite của object thể hiện sự di chuyển (move) theo 8 hướng (45,90,135,180,225,270,315,360): Name: s_hero_m45, s_hero_m90,......... các sprite phụ ta sẽ nói sau, bây giờ tới Objects [+] phần Object Begin _ new sprite>name: s_point (1 hình tròn nhỏ có đường kính khoảng 6 pixels) End Begin Object: o_point _ new object>name: o_point>sprite: s_point>Visible=false, Soild=true>Add event>Collision>o_hero>tab control>1: code> Applies to Object: o_hero ----------------------------- speed=0; global.mouse_left_click=0; ----------------------------- + Collision with o_hero>tab main1>2: "Destroy the instances"> Applies to self ta set sự va chạm giữa o_point và o_hero, khi o_hero chạm o_point thì o_hero sẽ dừng lại (speed=0) và variable mouse_left_click=0, action thứ 2 là o_point tự hủy + Add event>Step>tab control>1: "If the number of instances is a value"> (Event Step là event có tác dụng thực hiện ko ngừng nghỉ tất cả các actions chứa trong nó từ khi bắt đầu game đến khi kết thúc) ----------------------------- object: o_point number: 1 operation: larger than ----------------------------- + Step>tab main1>2: "Destroy the instances"> Applies to self ta set object o_point sẽ liên tục tìm các object o_point khác và nếu thấy số lượng object o_point lớn hơn 1 thì nó sẽ tự hủy. Nghĩa là trên room sẽ tồn tại nhìu nhất là 1 o_point End Begin: Object o_control_mouse _ new object>name: o_control_mouse>sprite: "ko cần thiết">Visible=false, Soild=false>Add event>Create>tab control>code> Applies to self ----------------------------- global.mouse_left_click=0; ----------------------------- ta set 1 variable chung là mouse_left_click, giá trị ban đầu = 0 + Add Event>Mouse>Global mouse>Global left pressed>tab control>1: code> Applies to self ----------------------------- global.mouse_left_click=1; ----------------------------- + Global left pressed>tab main1>2: "Create an instances"> Applies to Other object: o_point x: mouse_x y: mouse_y ta set khi click chuột trái lên bất kì nơi nào trong room (global) thì variable mouse_left_click = 1, và action 2 là tạo ra 1 object mới o_point ở vị trí toạ độ x= x của mouse, y=y của mouse End Begin Object: o_hero _ new object>name: o_hero>sprite: s_hero_s45>Visible=true, Soild=true>Add event>Create>tab control>code> config như sau: Applies to self ----------------------------- image_speed=0.25; ----------------------------- + Add event>Step>tab control>1: code> Applies to self ----------------------------- if global.mouse_left_click=1 { if(direction > 22) sprite_index = s_hero_m45; if(direction > 67) sprite_index = s_hero_m90; if(direction > 113) sprite_index = s_hero_m135; if(direction > 156) sprite_index = s_hero_m180; if(direction > 202) sprite_index := s_hero_m225; if(direction > 243) sprite_index := s_hero_m270; if(direction > 292) sprite_index := s_hero_m315; if(direction > 337 || direction < 22 ) sprite_index := s_hero_m360; } else { if sprite_index=s_hero_m45 sprite_index=s_hero_s45 if sprite_index=s_hero_m90 sprite_index=s_hero_s90 if sprite_index=s_hero_m135 sprite_index=s_hero_s135 if sprite_index=s_hero_m180 sprite_index=s_hero_s180 if sprite_index=s_hero_m225 sprite_index=s_hero_s225 if sprite_index=s_hero_m270 sprite_index=s_hero_s270 if sprite_index=s_hero_m315 sprite_index=s_hero_s315 if sprite_index=s_hero_m360 sprite_index=s_hero_s360 } ----------------------------- + Step>tab control>2: "if a varialbe has a value"> Applies to self variable: global.mouse_left_click value: 1 operation: equal to + Step>tab move>3: "Step Towards a point..."> Applies to self x: o_point.x y: o_point.y speed: 4 avoid: solid only ta set action 1: với những direction tương ứng thì sẽ thể hiện sprite tương ứng, ở đây ko set điều kiện chính xác mà dùng những giá trị lớn hơn hoặc nhỏ hơn trong 1 phạm vi nào đó thì set sprite nào đó, ví dụ trong khoảng direction>22 thì set sprite là s_hero_m45, khi ko di chuyển nữa tức mouse_lelf_click khác 1, thì set sprite stand tương ứng với sprite move vừa set action 2: set điều kiện nếu variable mouse_left_click =1 thì thực hiện action 3 action 3: set o_hero di chuyển tới vị trí o_point vừa được create (vì khi mouse_left_click =1 tức là ta đã click chuột trái, khi đó o_point sẽ được tạo ngay vị trí chuột, o_hero sẽ di chuyển tới vị trí o_point) End [+] Mô tả cuối cùng: ta có 3 object: o_hero,o_point,o_control_mouse, khi click mouse lelf, ta sẽ tạo ra 1 object mới là o_point và set variable mouse_left_click=1 lúc đó, theo event step o_hero sẽ set điều kiện nếu mouse_left_click=1 thì o_hero sẽ move tới o_point vừa mới create, và tự set sprite thông qua các direction tương ứng. khi o_hero chạm o_point thì mouse_left_click=0( thì o_hero ko move theo o_point nữa), o_hero có speed = 0 dừng lại tự set sprite stand tương ứng. còn o_point thì tự hủy. Chúc thành công. -/- File đính kèm có hình minh họa ^^ Mã: http://rapidshare.com/files/30112995/SkynetGM.doc
Xin hỏi Game Maker sử dụng ngôn ngữ gì vậy? Tại sao cái action Execute a script ko hiện trong bảng chọn action. Trong phần hướng dẫn nó ghi là Only available in advanced mode.
bạn ơi mình down game maker 7.0 ve nhưng sài dc có vài ngày bạn có file crack ko cho mình xin thanks !
À! Bạn ơi! Bạn vui lòng khi hướng dẫn có chụp hình minh họa được ko? Chỉ ghi ko vậy mấy bạn mới sử dụng lần đầu sẽ thấy khó hỉu lắm Mình sử dụng cũng dc 1 thời gian ngắn rùi mà đọc cũng thấy nhiu` chỗ ko rõ ràng lắm! Tks bạn nhìu!
Chia bùn với anh, game makerr ở đây chết từ lâu rồi, hỏi đáp vô ích, mà bác trần thế cũng bỏ Gm lâu rùi:)