Bài viết của Tranthe tại gamethu.net
VA đã làm sản phẩm này chỉ trong 1 ngày .... thế tại sao Chưa đăng ký ko thử !?
Ai cũng nghĩ shooting gắn liền với tên tuổi của viễn tưởng và phi cơ .... nhưng ko phải vậy, phép thuật là 1 thế giới huyền ảo vẫn tồn tại nhưng bị lấn chỗ bởi công nghệ hiện đại đó là lý do VA chọn phong cách ảnh pha chút fantasy sẽ tạo ra chút j đó mới mẻ
Source:
[You must be registered and logged in to see this link.]I/Introduction:
-Trước hết cần giải thích rõ cho Chưa đăng ký shooting game là gì !? ... là 1 thể loại game có cách chơi đơn giản là việc điều khiển 1 object để tấn công các vật cản đường và né đạn nhưng lại thú vị ... VA có một câu châm ngôn: "Cái gì cảm nhận ta thấy được sự khó khăn thì thực sự chúng rất đơn giản" ... cũng vậy, trong trường hợp này, có thể bạn thấy những viên đạn bay loạn xà ngầu... nghĩ ngay đến thuật toán thì làm sao điều khiển chúng #_# ... khó khăn đây ... tuy thế GM lại hỗ trợ rất mạnh cho các game dạng này, do đó việc thiết kế game trở nên rất ư là đơn giản
-VA ko thể liên hệ tranthe được, đành tiền trảm hậu tấu... cứ chỉnh sửa và post lại trước vậy
Bài viết sẽ sử dụng các chức năng cơ bản của Game Maker nhằm hướng dẫn cho người mới làm quen với Engine này. Bài viết rất rõ ràng và dễ hiểu, bạn chỉ cần đọc và làm theo từng bước. Các tài nguyên dùng để làm game này có link down ở dưới. Chúc thành công. Các tài nguyên bạn có thể tìm thấy trong thư mục cài game maker và cũng có thể test demo ngay trong đó... Nhưng lưu ý 1 điều trên cơ bản thì cách thiết kế giống nhau nhưng một số điểm đã được tranthe thay đổi cho phù hợp và đơn giản hơn thay vì examples gốc của GM ^^
II/Create game
Creating a room with a scrolling background
-Qua việc này sẽ giúp tạo ra ảo giác nhân vật của bạn đang di chuyển nhưng thực tế vẫn đứng im 1 chỗ!
Đầu tiên tui sẽ cùng các bạn thiết kế các yếu tố tạm gọi là “khung cảnh” của game. Có lẽ không cần phải dài dòng giải thích vòng vo nhiều quá, ta nên bắt tay vào làm luôn chắc chắn sẽ dễ hiểu hơn. Nào cùng làm nhé:
1. Bật Game Maker lên. Ở chế độ Advance nhé (nếu GM của bạn chưa ở chế độ advance vào File > chọn Advance Model).
2. Add một BackGround mới (Ctrl + Alt + B), đặt tên là background load file Background.bmp .
* Bạn có thể kiếm 1 ảnh Tile cảnh biển hay đồng ko ... trong Pj của VA, VA đã tách 1 tile từ RMV.
3. Tạo một room mới (Ctrl + Alt + R), đặt tên là room_first.
4. Từ cửa sổ Room Properties chuyển sang tab backgrounds, chọn nền là background (dưới Foreground image).
5. Ở ô Vert. Speed gõ vào giá trị 2. Để background cuộn dần xuống với vận tốc bằng 2. Ở đây tôi chỉ chọn là 2 còn nếu bạn muốn có tốc độ cao hơn có thể chọn số lớn hơn
Bây giờ bạn có thể ấn F5 để chạy thử game, nếu bạn làm đúng bạn sẽ thấy mặt biển đang chuyển động trước mặt bạn. Không tồi đấy chứ, nhưng tất cả mới chỉ bắt đầu và chặng đường vẫn còn dài.
Creating insland objects
-Tạo các đối tượng cảnh nền như những hòn đảo, và chúng sẽ xuất hiện 1 cách tự động chứ ko máy móc như thế làm game ko bị nhàm chán.
Vậy là bạn đã làm xong cái dễ nhất, nhưng cũng chính là cái quyết định nhất của game của game này. Nói không phải điêu, bạn thử tưởng tượng 1945 mà mặt biển đứng yên thì xem như là vứt rồi đúng không. Giờ chúng ta sẽ chuyển sang làm phần thứ 2 của game. Tạo các hòn đảo (island) trên biển.Ở đây ta chỉ tạo khoảng 3 4 obj vì chúng sẽ xuất hiện random như đã nói và có thể đè lên nhau chi chít!
1. Tạo các sprite (Ctrl + Alt + S) mới có tên spr_island1, spr_island2, spr_island3 và các load các hình ảnh có tên tương ứng từ từ file tài nguyên vào sprite.
* Chưa đăng ký có thể kiếm các sprite ấy trên mạng hoặc có thể tự vẽ ... đơn giản hãy chọn những thứ thật nhỏ vì có thể chúng sẽ đè lên nhau theo lệnh random vị trí đấy!
2. Tạo một object mới có tên là obj_island1 với sprite là spr_island1 (tất nhiên). Set deepth là 1000 (để cho hòn đảo luôn nằm dưới các máy bay sau này).
3. Add Creat event, ở Create event chọn Move Fixed action (tab move, hàng đầu tiên, ngoài cùng bên trái), cho object chyển động xuống dưới (ấn vào hình mũi tên chỉ xuống dưới 90 độ), set speed là 2.
4. Add Other > Outside room event, chọn action là Test Variable (tab control, hàng cuối cùng, ở giữa). Set Variable là y, value là room_height và Operation là Larger than. Action này dùng để kiểm tra xem hòn đảo của chúng ta có bị trôi ra khỏi room (xuống phía dưới) hay không.
5. Vẫn ở Outside event chọn action là Jump to Position (tab move, hàng thứ 4, ngoài cùng bên trái). Set x là random(room_width), set y là -70. Action ày có tác dụng đưa object lên đầu room ở vị trí có tọa độ bất kì lớn hơn 0 và nhỏ hơn chiều rộng của room khi object trôi ra khỏi room.
6. Tạo 2 object khác là obj_island2 và obj_island3 và làm lại các bước từ 2 đến 5 với 2 object vừa tạo (chắc là không khó khăn gì).
7. Đặt 3 object vừa tạo vào room_first bạn đã tạo ở trên.
Okie, ấn F5 nào. Nếu bạn làm đúng như những gì tui đã hướng dẫn ở trên thì bây giờ chắc bạn đang có cảm giác như đang bay trên biển Thái Bình Dương đúng không. Còn nếu không có kết quả như ý muốn thì cũng đừng có vội đập bàn phím. Hãy kiểm tra lại từng bước ở trên để sửa lại những chỗ sai trước khi chúng ta tiếp tục. Cứ làm đi, tui sẽ chờ…
Flying Planes
Ờ, xong rồi à nhanh nhỉ. Nếu thế thì chúng ta đã xong phần “phông nền” của game rồi đấy. Trước khi bước vào công đoạn mới là thiết kế các máy bay mà người chơi điều khiển. Tui xin nói trước là trong phần này tui sẽ sử dụng một kĩ thuật mạnh mẽ của Game Maker, giúp tiết kiệm rất nhiều thời gian phát triển game. Đó là là parent. Có thể bạn đã biết có thể chưa nhưng giới tiệu là việc của tui đúng không. Còn bây giờ thay vì cứ giải thích mãi chúng ta hãy bắt đầu làm quen với nó luôn nhé (trăm hay không bằng tay quen mà):
1. Tạo 2 sprite mới là spr_plane1 và spr_plane2 rồi load các sprite tương ứng ở file tài nguyên vào. Ở mục Origin set x là 32, y là 32 (hoặc ấn Center cho nhanh).
* Việc set tâm điểm rất quan trọng vì qua đó là nơi tạo ra các đối tượng khác ... nếu bạn ko để center có thể sau khi hoàn thành sản phẩm 1 số đối tượng sẽ bị lệch khi được tạo!
2. Tạo một object mới dặt tên là obj_plane_parent (không chọn sprite).
3. Tạo object mới là obj_plane1với sprite tương ứng, set deepth là -100, set parent là obj_plane_parent.
4. Tạo object mới là obj_plane2 với sprite tương ứng, set deepth là -99, set parent là obj_plane_parent.
Bạn có thể nghĩ ... tại sao phải làm 2 obj cho rắc rối, sao ko làm như Examples mẫu ? đơn giản vì qua đây hỗ trợ 2 người chơi, thấy có thú vị ko nào
Adding Keyboard Events
-Phần này chúng ta sẽ tìm hiểu về thiết đặt các thao tác bàn phím qua đó tương tác làm cho các obj di chuyển.
Xong phần khởi tạo máy bay, giờ ta sẽ thêm các sự kiện (event) bàn phím vào để người chơi có thể điều khiển được máy bay:
1. Trở lại obj_plane1 bằng cách nhấp đôi vào nó.
2. Add event Keyboard > <left>, chọn action là Test Variable (ở trên chỉ chỗ rồi nhé, không chỉ lại nữa). Set Variable là x, set Value là 40, Operation là Larger than. Chọn một action khác là Jump to postion (cũng chỉ rồi nhé), set x là -4 và y là 0, đánh dấu chọn ở Relative. Action này giúp cho máy bay không thể ra khỏi mép trái màn hình.
3. Add event Keyboard> <right>, chọn action là Test Variable, set Varible là x, set value là room_width-40, set operation là Smaller than. Chọn tiếp action Jump to Posiotion, set x là 4 và y là 0, đánh dấu chởn Relative. Action này giúp cho máy bay không thể ra khỏi mép phải màn hình.
4. Add event Keyboard> <up>, chọn action là Test variable, set variable là y, set value là 40, operation là larger than. Chọn tiếp action Jump to Position, set x là 0, y là -2 đánh dấu chọn ở Relative. Action này giúp cho máy bay ra khỏi mép trên màn hình.
5. Add event Keyboard> <down>, chọn action là Test Variable, set variable là y, set value là room_height-120. Chọn tiếp action Jump to Posion set x là 0 và y là 2, đánh dẫu chọn ở Relative. Lưu ý là action này sẽ giữ cho máy bay không thể bay tới mép dưới màn hình được mà sẽ cách mép dưới màn hình đúng 80 pixel. Phần đó chúng ta sẽ đặt bảng tính điểm cũng như máu (health) của người chơi sau này.
6. Trở lại obj_plane2 bẳng cách nhấp đôi vào nó.
7. Làm các bước tương tự như với obj_plane1 chỉ khác là các phím <left>, <right>, <up>, <down> được thay bởi A, D, W,S. Bước này có thể bạn sẽ tự làm được (không được là có vấn đề đấy).
8. Đặt 2 object vừa tạo vào room_first.
Ấn F5 thôi còn chờ gì nữa. Sau bước này bạn nên save lại quá trình làm game từ đầu đến giờ nếu không lỡ mất điện thì vỡ mồm.
The Bullets
Đã có máy bay thì phải có đạn chứ nhể. Nào bắt đầu làm đạn dược để các chú máy bay còn bắn nhau chứ:
1. Tạo một sprite mới đặt tên là spr_bullet, và load file ảnh tương ứng từ file tài nguyên vào. Ở mục Origin ấn nút Center.
2. Add Move Fixed action (đã chỉ chỗ ở trên). Set speed là 2, ấn vào hình mũi tên chỉ thẳng đứng, hướng lên trên.
3. Add Other > Outside room event, chọn action là Destroy instance (tab main 1, hàng thứ 2, ở giữa). Action này để hủy obj_bullet khi nó ra khỏi Room, tiết kiệm bộ nhớ và tăng tốc cho game.
Adding Keyboard event to the plane objects
Đã có đạn để bắn, giờ có lẽ chúng ta nên thêm vài sự kiện bàn phím để máy bay có thể bắn được. Nhưng trước khi làm việc đó tui lại có 1 lưu ý nhỏ là chúng ta không chỉ làm cho máy bay bắn được mà còn phải làm cho máy bay chỉ bắn được 1 viên đạn sau mỗi nửa giây (15 steps). Nếu không sẽ loạn mất. Chúng ta sẽ thực hiện điều đó thông qua 1 biến là can_shoot. Máy bay chỉ có thể bắn được khi biến can_shoot có giá trị lớn hơn 0 (còn biến là gì đề nghị xem bài Game Maker Language và những khái niệm mở đầu):
1. Trở lại obj_palne_parent bằng cách nhấp đôi vào nó.
2. Add Create event, chọn action là Set variable (tab control, ngoài cùng bên trái, hàng cuối cùng). Set variable là can_shoot, set value là 1.
3. Add Step event chọn action là Set Variable, set variable là can_shoot, set value là 1 và đánh dấu chọn ở mục Relative.
4. Trở lại obj_palne1 bằng cách nhấp đôi vào nó.Add Keyboard > <Enter> event. Chọn action là Test variable, set variable là can_shoot, set value là 0, set operation là larger than. Chọn một action khác là Start Block (tab control, hàng thứ 4, ngài cùng bên trái). Thêm action Create Instance (tab main1, ngoài cùng bên trái, hàng đầu tiên). Set object là obj_bullet,set x là 0, y là -16 và đánh dấu chọn ở mục Relative. Thêm action Set Variable, set variable là can_shoot và value là -15. Cuối cùng chọn action End Block (tab control, hàng thứ 5, ngoài cùng bên trái). Như vậy là khi ấn Enter máy bay 1 (obj_plane1) sẽ bắn, hai lần bắn liên tiếp cách nhau nửa giây (15 steps).
5. Trở lại obj_plane2 bằng cách nhấp đôi vào nó, lặp lại bước 4 chỉ khác là phím <Enter> được thay bằng <Space>. Như thế khi ấn Space máy bay 2 (obj_plane2) sẽ bắn, hai lần bắn liên tiếp cách nhau nửa giây (15 steps).
Các bạn thấy là ở phần này tui đã bắt đầu sử dụng obj_plane_parent. Xin nói qua một chút về chức năng của parent để những ai chưa từng biết qua hiểu thêm một chút (ai biết rồi có thể bỏ qua). Ở đây chỉ đề cập đến trường hợp riêng của game 1945 mà chúng ta đang làm, song bạn cũng có thể suy rộng ra trong các trường hợp còn lại. Như các bạn đã thấy tui đã thêm vào obj_plane_parent một event và vài action. Event và các action này cũng sẽ được áp dụng cho obj_plane1 và obj_plane2. Nói một cách khác parent giúp tui không phải thêm các event và action giống hệt như trong obj_plane_parent vào cả 2 object máy bay mà 2 object máy bay vẫn thực hiện được những chức năng như là đã có những thứ đó. Đây thực sự là một tính năng tuyệt vời của Game Maker giúp ta rút ngắn được rất nhiều thời gian lặp lại những công việc giống nhau. Ở đây có ít event và action còn lặp được chứ gặp RPG thì có mà … móm.
Adding keyrelease events to objects
Một game hấp dẫn được người chơi theo tui, là một game được đầu tư từ những chi tiết nhỏ(Cái này hay). Nhiều chi tiết như thế sẽ làm game trở nên cuốn hút và lôi cuốn. Để tăng thêm màu sắc cho game, tui cũng sẽ thêm vào một chi tiết nhỏ, chi tiết này những người chơi thông thường sẽ không để ý nhưng những “tay chơi” thứ thiệt hẳn là sẽ biết. Chính nó sẽ làm nên sự khác biệt về đẳng cấp của người chơi.
Như bạn đã biết, khi người chơi ấn phím bắn (Enter hay Space) thì cứ sau nửa giây (15 steps) thì người chơi mới lại bắn được một lần. Nhưng chúng ta sẽ làm cho người chơi sẽ bắn được cứ sau 1/3 giây –tức là 10 steps (ít hơn 1/6 giây so với lúc đầu) nếu người chơi nháy phím bắn liên tục (chỉ là nháy chứ không phải nhấn giữ (hold) ). Dù là thời gian rút ngắn không đáng kể (chỉ là 1/6 giây), nhưng nó cũng sẽ thể hiện được đẳng cấp của người chơi – và đạn bắn cũng sẽ nhiều hơn (hơn 1 viên đạn mỗi giây).
1. Trở lại obj_plane1, add Key Release> <Enter> event, chọn action là set variable, set variable là can_shoot, set value là 5, đánh dấu chọn Relative.
2. Trở lại obj_plane2, add Key Release> <Space> event, chọn action là set variable, set variable là can_shoot, set value là 5, đánh dấu chọn Relative.
Creating enemies and explosions
Dù vẫn chưa hoàn tất việc xử lí các máy bay, tuy nhiên chúng ta sẽ tạm để những công việc còn lại đó và chuyển sang xây dựng các máy bay địch và các vụ nổ (explosion), sau đó sẽ trở lại làm những gì chưa hoàn tất, vì có máy bay địch và vụ nổ sẽ dễ làm việc hơn. Let’s start:
1. Tạo các sprite: spr_enemy_basic, spr_explosion1, spr_explosion2 và load các tài nguyên tương ứng vào. Ở mục Origin ấn Center (tất cả).
* Ở đây ý tưởng của chúng ta sẽ là Expl1 là của quái và Expl2 sẽ là của người chơi.
2. Tạo 2 sound mới (Ctrl + Alt + U), đặt tên là snd_explosion1 và snd_explosion2 và load các file âm thanh tương ứng từ file tài nguyên vào.
3. Tạo object mới đặt tên là obj_explosion1 và chọn sprite tương ứng. Add Create event chọn action là Play Sound (tab main1, hàng thứ 4, ngoài cùng bên trái). Chọn sound là snd_explosion1, set loop là false.
4. Add Other> Animation End event vào, chọn action là Destroy Instance (đã chỉ ở trên).
5. Tạo object mới tên là obj_explosion2 và chọn sprite tương ứng. Add Create event chọn action là Play Sound, chọn sound là snd_exlosion2, set loop là false.
6. Add Other> Animation End event và chọn action là Sleep (tab main 2, hàng đầu tiên, ngoài cùng bên phải). Set milliseconds là 1000 (tức là 1s), set Redraw là False. Thêm action là Restart Game (tab main 2, hàng 4 , ngoài cùng bên trái).
7. Tạo object mới đặt tên là obj_enemy_basic và chọn sprite tương ứng. Chọn action là Move Fixed, set speed là 4, và ấn chon mũi tên thẳng đứng hướng xuống 90 độ cho máy bay chuyển động xuống dưới với vận tốc là 4.
8. Add Other> Outside Room event, chọn action là Test Variable, set variable là y, value là room_height, operation là larger than. Thêm action Destroy Instance.
9. Add collision>obj_bullet event (event này xảy ra khi máy bay địch va chạm với đạn của ta), chọn action là Set Score (tab score, hàng đầu tiên, ngoài cùng bên trái), set new score là 10 và đánh dấu chọn Relative (cộng 10 điểm mỗi lần bắn hạ 1 máy bay địch). Chọn thêm action Destroy Instance.
10. Thêm Create Instance action, set Object là obj_explosion1, đánh dấu chọn Relative.Cuối cùng chọn action Destroy Instance ở mục Applies to chọn Other.
11. Add Collision> obj_plane_parent, chọn action là Destroy Instance. Thêm action Create Instance, set Object là obj_explosion1, đánh dấu chọn Relative.
12. Thêm action Destroy Instance, set Applies to là Other. Thêm action Create Instance, set Object là obj_explosion2, set Applies to là Other, đánh dấu chọn Relative.
Lại một lần nữa chúng ta lại sử dụng obj_plane_parent trong Collision event (sự kiện va chạm), và ở đây khi máy bay địch va chạm với obj_plane_parent mọi thứ xảy ra với nó đều xảy ra tương tự với 2 object máy bay của ta. Hãy thêm obj_enemy_basic và room_first rồi ấn F5 để tự kiểm chứng những gì tu vừa giải thích. Chắc chắn mọi việc sẽ rất rõ ràng. (Xem xong nhớ xóa obj_enemy_basic khỏi room_first để có thể làm việc tiếp, đừng có quên đấy).
Creating controler object
-Ở phần này chúng ta sẽ tìm hiểu về việc qua 1 obj sẽ tạo ra kiểu như CPU(điều khiển các hoạt động của game) chứ ko phải tạo từng phần của game như máy móc nữa.
Bạn đã xóa obj_enemy_basic ra khỏi room_first rồi chứ, nếu chưa làm thì bạn nên làm ngay bởi vì chúng ta sẽ không đặt nó vào room theo cách đó mà sẽ dùng một cách chuyên nghiệp hơn tí, đó là đặt nó vào thông qua một object khác, obj_controler. Làm nào:
1. Tạo object mới đặt tên là obj_controler, không chọn sprite.
2. Add Step event, chọn action là Test Change (tab control, hàng thứ 2, ở giữa), set slides là 20. Thêm action Create Instance, set object là obj_enemy_basic, set x là random(room_width), set y là -4.
3. Thêm object này vào room_first và ấn F5 để thưởng thức.
Nói thêm một chút về action Test Change mà bạn vừa sử dụng ở bước 2, chắc bạn cũng thấy là nó có biểu tượng là hình một cái xúc xắc. Và tác dụng của nó cũng giống y như một cái xúc xắc, số mặt của cái xúc xắc này sẽ do bạn chọn (ở mục slides). Sau đó cứ mỗi step cái xúc xắc lại được gieo một lần, như trong game chúng ta đang làm cái xúc sắc 20 mặt sẽ được gieo mỗi step và hành động tiếp theo (tạo ra obj_enemy_basic) sẽ chỉ được thực hiện khi xúc xắc gieo đúng mặt. Nói một cách nôm na, nó chính là tỉ lệ may mắn để hành động xảy ra. Trong trường hợp này là 1/20, số mặt của xúc xắc càng lớn thì tỉ lệ thành công của hành động càng nhỏ.
Adding damage variable
-Trong game mà tôi đã hướng dẫn cho bạn từ đầu đến h đã khác hệ thống game 1945 hầu như trên 50% .... bạn có hiểu tại sao ko !?Cái khác lớn nhất là game hỗ trợ 2 player .. việc này sẽ làm game thú vị hơn nhưng một phần cũng cần thêm nữa nhưng suy nghĩ ... nếu bạn chỉ tạo 1 player bạn có thể áp dụng hệ thống Health mặc định của GM qua các câu lệnh, nó thật rất dễ ... nhưng h bạn phải sử dụng hệ thống gọi là Biến(Variables - thực ra cái Health cũng thiết kế dựa trên cái này nhưng đã là có sẵn cả). Mong là qua bài này bạn sẽ nắm rõ hơn về cách sử dụng Variables trong game của mình, điều đó sẽ rất tốt cho các ý tưởng lớn sau này
Từ đầu đến giờ máy bay của ta mỗi khi chạm vào máy bay địch là chết bất đắc kì tử. Như thế thì bèo quá, bây giờ chúng ta sẽ làm cho các máy bay mà người chơi điều khiển có máu, và mỗi lần đâm vào địch chỉ bị “xin tí huyết” chứ không die hẳn. Chơi nào:
1. Trở lại obj_plane_parent, chọn Create event (chọn chứ không phải tạo), thêm vào action Set Variable, set variable là damage và set value là 0.
2. Chọn Step event, thêm action Test Variable, set variable là damage, set value là 100, operation là larger than. Thêm action Start Block (đã dùng ở trên).
3. Thêm action Destroy Instance, thêm một action khác là create instance chọn object là obj_explosion2, đánh dấu chọn ở relative.
4. Cuối cùng chọn action là End Block.
5. Trở lại obj_enemy_basic, chọn event collosion with obj_plane_parent, sau đó bỏ 2 action cuối cùng trong event này.
6. Thêm một action khác là Set variabe, set variable là damage, set value là 10, đánh dấu chọn ở relative. Ở mục Applies to chọn Other.
Vậy là xong, bây giờ nếu bạn chạy thử game thì bạn sẽ thấy máy bay sẽ die sau 10 lần va chạm với địch. Để theo dõi xem bạn còn bao nhiêu máu, cũng như điểm số của bạn chúng ta sẽ làm 1 bảng (panel) theo dõi để thực hiện những cái đó.
Creating the Panel
-Khung giao diện HUD với người chơi của game. Nó sẽ hiện máu và điểm
1. Tạo 1 sprite mới tên là spr_panel và load sprite tương ứng từ file tài nguyên vào.
2. Tạo một font mới (Ctrl + Alt + D) đặt tên là fnt_panel. Set font là Arial, size là 14, và đánh dấu chọn mục Bold.
3. Trở lại obj_controller và set depth cho nó là -100.
4. Thêm Draw event, chọn action là Draw Sprite (tab draw, hành đầu tiên, ngoài cùng bên trái), set sprite là spr_panel, set x là 0 và y là 404.
5. Thêm action set font (tab draw, hàng thứ 6, ở giữa) , chọn font là fnt_panel.
6. Thêm action set color (tab draw, hàng thứ 6, ngoài cùng bên trái) và chọn màu xanh lá cây.
7. Thêm action Draw Text (tabdraw. hàng thứ 2, ngoài cùng bên trái), set text là Damage 1:, set x là 20, y là 420.
8. Thêm action Draw Rectangle và set x1 là 130, y1 là 420, x2 là 230, y2 là 440. Set filled là Out line.
9. Thêm action Test Instance Count (tab control, set object là obj_plane1, number là 0 và operation là larger than.
10. Thêm action là Draw Rectagle và set x1 là 130, y1 là 420, x2 là 130+obj_plane1.damage, y2 là 440 set filled là filled.
11. Thêm action Set Color và chọn màu đỏ. Thêm action Draw Text và, set text là Damage 2:, set x là 20, y là 445.
12. Thêm action Draw Rectagle vào, set x1 là 130 y1 445 là x2 là 230 y2 là 465. Set filled là Out line.
13. Thêm action Test Instance Count vào set object là obj_plane2, number là 0, operation là larger than.
14. Thêm action Draw Rectagle vào set x1 là 130 y1 là 445 x2 là 130+obj_plane2.damage y2 là 465. Set filled là filled.
Display the Score and High Score table
Panel của chúng ta đã có thể hiện lên máu của người chơi, cột máu càng đầy thì số máu bị mất càng nhiều, khi cột máu đầy thì cũng chính là lúc máy bay “đi về thiên cổ”. Giờ chúng ta sẽ làm phần hiện lên số điểm người chơi ghi được và bảng high score khi game over.
1. Tạo 1 background mới đặt tên là background_score và load hình ảnh tương ứng từ file tài nguyên vào.
2. Trở lại obj_controller, chọn Draw event.
3. Chọn action Set Color và chọn color là màu xanh biển (Blue). Chọn action Draw (tab score, hàng đầu tiên, ngoài cùng bên phải), set x là 350, y là 430.
4. Thêm Create event và chọn action là Score Caption (tab score, hàng thứ 6 có mỗi nó). Set show score thành don’t show.
5. Trở lại obj_explosion2, chọn event Animation End, thêm action Show HighScore (tab control, hàng thứ 2 ngoài cùng bên trái) vào giữa 2 action Sleep và Restart Game, set background là background_score, set other Color là màu vàng, chọn font là font chữ nào đẹp đẹp mà bạn thích (cái này tùy).
Okie, bây giờ hãy chạy thử game để xem thành quả nãy giờ của bạn. Không tệ đấy chứ, nhưng đừng vội ăn mừng vẫn còn một chặng đường phía trước phải đi. Nhưng nếu bạn cảm thấy hơi mệt hoặc mất tập trung hãy thư giãn một lát, nghe nhạc hoặc uống một cái gì đó là một ý kiến không tồi. Sau khi làm xong những việc ấy bạn hãy trở lại với công việc dang dở, nó vẫn ở đấy chứ không chạy đi mất đâu mà sợ.
Creating a new timeline and runing it
-Hệ thống này rất tuyệt vời vì nó giúp bạn tiết kiệm thời gian thay vì phải thiết kế 1 map dài như 1945 mà bạn còn có thể can đúng thời điểm để tung các event moment
Nếu bạn để ý, máy bay địch sẽ xuất hiện một cách ngẫu nhiên nhưng như vậy chẳng có gì là hay. Thay vào đó ta có thể làm cho máy bay địch tấn công có chiến thuật hơn bằng cách sử dụng time line. Nếu đây là lần đầu bạn nghe thấy từ này bạn có thể xem bài viết về time line ở trang chủ (gõ vào từ khóa game maker hoặc time line để tìm kiếm) nó sẽ cho bạn những kiến thức cơ bản về time line. Còn nếu như lười bạn có thể đọc và làm theo những gì ở dưới đây:
1. Tạo một timeline mới (Ctrl + Altr + T) đặt tên là time_level1.
2. Add (ấn nút add) một Moment mới, có một bảng hiện ra gõ vào 60. Lưu ý là thời gian trong time line được tính bằng step vì thế những action trong moment này sẽ xảy ra sau 2 giây (mỗi giây 30 steps) kể từ khi time line được gọi (sẽ đề cập ở dưới).
3. Thêm action Create Instance (đã sử dụng ở trên), set object là obj_enemy_basic, set x là 80 y là -40, để tiết kiệm thời gian có lẽ từ sau trở đi tui sẽ viết như sau: “set object là obj_enemy_basic (80,-40)”, thống nhất vậy nhé.
4. Lặp lại bước 4 bốn lần thay tọa độ của obj_enemy_basic lần lượt là ( 200,-40), (320,-40), (440,-40), (560,-40). Như vậy bây giờ trong momnet thứ nhất đã có 5 action.
5. Trở lại obj_controller, chọn Create event thên action Set Time Line (tab main 2, hàng tứ 2 ngoài cùng bên trái), set time line là time_level1, position là 0. Với action này time line sẽ chạy khi game được khởi động.
6. Xóa Step event (có 2 action) vì chúng ta không còn cần đến nó để tạo ra các máy bay nữa.
Bây giờ bạn có thể chạy thử game, bạn sẽ thấy obj_enemy_basic xuất hiện thành hàng lối sau khoảng 2 giây từ khi game bắt đầu. Như vậy là bạn đã thành công bước đầu trong việc sử dụng time line.
Creating new enemy plane object
1. Tạo các sprite mới có tên enemy_right, enemy_left, enemy_up, load ảnh từ file tài nguyên vào. Ở mục Origin ấn Center (tất cả các sprite).
2. Ấn chuột phải vào obj_enemy_basic, chọn lệnh Duplicate để nhân đôi object này. Đổi tên object mới tạo là obj_enemy_right.
3. Ở Create event của obj_enemy_right, trong action Move Fixed ấn vào hình mũi tên hướng xuống để nó nổi lên. Ấn vào hình mũi tên hướng sang phải cho nó thụt xuống (nghe thổ dân nhỉ) như vậy object sẽ di chuyển sang phải. Chọn Out Side Room event, trong action Test Variable sửa variable là x, sửa value là room_width.
4. Ấn chuột phải vào obj_enemy_basic, chọn lệnh Duplicate để nhân đôi object này. Đổi tên object mới tạo là obj_enemy_left.
5. Ở Create event của obj_enemy_right, trong action Move Fixed ấn vào hình mũi tên hướng xuống để nó nổi lên. Ấn vào hình mũi tên hướng sang trái cho nó thụt xuống như vậy object sẽ di chuyển sang trái. Chọn Out Side Room event, trong action Test Variable sửa variable là x, sửa value là 0, operation là smaller than.
6. Ấn chuột phải vào obj_enemy_basic, chọn lệnh Duplicate để nhân đôi object này. Đổi tên object mới tạo là obj_enemy_up.
7. Ở Create event của obj_enemy_right, trong action Move Fixed ấn vào hình mũi tên hướng xuống để nó nổi lên. Ấn vào hình mũi tên hướng lên trên cho nó thụt xuống như vậy object sẽ di chuyển lên trên. Chọn Out Side Room event, trong action Test Variable sửa variable là y, sửa value là 0, operation là smaller than.
Như vậy bạn đã tạo thêm 3 loại máy bay địch mới. Do bài viết đến đây cũng đã khá dài, thêm vào đó, nếu bạn đã theo dõi kĩ và làm theo tất cả những gì tui hướng dẫn thì bạn hoàn toàn có thể làm tốt những gì tui trình bày dưới đây. Nó không phải là hướng dẫn chi tiết mà chỉ là những chỉ dẫn tổng quát, hãy coi đó là phần advance hay phần bài tập thêm của bài viết cũng được. Nếu bạn không làm được (điều này ít có khả năng xảy ra) bạn có thể đặt câu hỏi về khó khăn của mình trên 4rum, tui hoặc các thành viên khác luôn sẵn lòng trả lời.
Sau khi hoàn thanh bước 7 phần kể trên bạn hãy quay trở lại time_level1 và add thêm nhiều moment cho đến khi bạn nghĩ là nó đủ nhiều để người chơi có thể ngồi chơi lâu lâu 1 chút mà quan trọng hơn cả là người chơi không còn đủ máu đến lúc chơi hết các step đó, (add thêm khoảng 40 monet nữa là hợp lí) trong mỗi momnet chỉ cần dùng action Create Instance để tạo thêm các máy bay địch khác nhau thành đội bay để trò chơi thêm phong phú. Lưu ý là thời gian để các moment được thực hiện phải lâu dần, ví dụ ở moment thứ nhất (tui và các bạn đã cùng tạo) thời gian đó là 60 step thì ở moment 2 nên là 120, moment 3 là 300 chẳng hạn… Cứ như vậy.
Final Words
Trên đây là toàn bộ bài viết hướng dẫn làm game 1945 của tui. Hi vọng bài viết sẽ giúp cho những người mới làm quen với Game Maker có thể tạo ra 1 game cho riêng mình. Qua bài viết chắc các bạn cũng thấy tạo 1 game với Game Maker cũng không khó lắm, chỉ cần động não một tí và một chút thời gian là bạn có thể làm cho riêng mình một game để tự chơi hoặc chia sẻ với bạn bè. Ngoài ra nếu bạn có đam mê với Game Maker, bạn nên dành nhiều thời gian để rèn luyện các kĩ năng (Skill) để nhanh chóng làm chủ Game Engine vô cùng độc đáo này. Với Game Maker một người giỏi không chỉ là một người biết LÀM THẾ NÀO mà điều quan trọng còn là LÀM TRONG BAO LÂU. Trong một bài viết của mình Mark Overmars đã nói rằng ban đầu một người mới học GM làm một game trong một thời gian khá lâu, sẽ mãi như vậy nếu người đó không trau dồi Skill của mình. Nhưng một người chăm chỉ và ham hiểu biết có thể thực hiện được những thao tác phức tạp trong một tời gian ngắn bằng cách liên tục rèn luyện các kĩ năng. Bạn biết mình phải làm gì rồi chứ, thôi không dông dài nữa bài viết đến đây kết thúc chào các bạn.