Lập Trình Android Game Với Game Maker Studio (Phần 4)

Trong phần cuối cùng này, chúng ta hãy cùng nhau tiếp tục tìm hiểu sâu hơn về các tính năng khác trong GMS2 mà bạn có thể sử dụng để nâng cấp trò chơi lên cột mốc chuyên nghiệp hơn. Hãy chắc chắn rằng các bạn đã đọc các bài viết trước đó để có thể thao tác mượt mà trong phần 4

Cách tạo hoạt ảnh cho SPRITE (Animation)

Đáp ứng yêu cầu của một số bạn, các bạn muốn đối tượng nhân vật của mình có hoạt ảnh nhằm giúp trải nghiệm trong trò chơi được tuyệt vời hơn, sau đây là cách thực hiện

  • Thông thường, SPRITE của các bạn chỉ có 1 Frame duy nhất, vì vậy nhân vật của bạn sẽ không có hoạt ảnh
  • Hãy thêm vào nhiều Frame khác nhau, mỗi Frame các bạn chỉnh sửa lại hình ảnh một tí để tạo hiệu ứng chuyển động cho nhân vật
  • Các bạn có thể import tệp .gif nếu không muốn tốn thời gian ngồi tạo từng Frame

Tạo thêm nhiều Frame, sau đó chỉnh tốc độ chạy animation tại vùng khoanh đỏ

Thành quả, mình đã thay thế nhân vật từ quả bóng thành hoạt ảnh tàu vũ trụ

Tạo thanh máu cho các chướng ngại vật (oWall)

Nếu chỉ "Né chướng ngại vật" đơn thuần thì trò chơi khá chán, thế nên mình đã thêm quyết định hướng dẫn tới cùng cho các bạn nhiều tính năng phức tạp hơn, trong đó có "Bắn chướng ngại vật". Đầu tiên thì chướng ngại vật phải có lượng hp nhất định để có thể bắn phá được, vì vậy mình sẽ hướng dẫn các bạn tạo thanh máu hiển thị trên đầu mỗi chướng ngại vật (luôn luôn di chuyển theo chướng ngại vật)

  • 1. Tạo một Create Event cho object oWall(chướng ngại vật)

Khởi tạo lượng máu mặc định là 100

  • 2. Tạo một Draw Event cho object oWall, sau đó thêm vào event 2 hàm dựng sẵn: Draw Seft và Draw Healthbar

Draw Seft vẽ lại chướng ngại vật, trong khi Draw Healthbar vẽ thanh máu, để tìm kiếm các bạn hãy nhập keyword vào toolbox bên phải

Sau khi thực hiện

Tạo object viên đạn (oBullet)

Tiếp theo chúng ta sẽ tạo một object mới: oBullet, ý tưởng là nếu nó Collision(va chạm) bất kỳ chướng ngại vật nào, thì chướng ngại vật đó sẽ bị mất máu

  • 1. Chèn SPRITE thích hợp cho viên đạn: xem lại phần 1
  • 2. Tạo object oBullet và tạo một Collision Event giữa oBullet và oWall: Lưu ý rằng những dòng code nằm bên trong hàm with(other){} sẽ được thực thi cho đối tượng oWall bị Collision(va chạm), không phải thực thi cho đối tượng oBullet.
    with (other){
    	
    	//Giảm máu của chướng ngại vật
    	hp-=15;
    	
    	//Nếu máu <=0
    	if (hp<=0){
    		
    		//Tạo hiệu ứng nổ
    		effect_create_above
    		(ef_explosion, x+sprite_width/2, y+sprite_height/2, 2, c_orange);
    		
    		//Xóa vật thể chướng ngại vật này
    		instance_destroy(); 
    		
    		//Cộng thêm điểm dựa vào kích cỡ của chướng ngại vật
    		oCircle.myscore += round(sprite_width);
    	}
    }
    
    //Tạo hiệu ứng tia lửa khi viên đạn chạm với chướng ngại vật
    effect_create_above(ef_firework, x, y, 2, c_red);
    
    //Xóa viên đạn đã đụng vào chướng ngại vật (tránh trường hợp viên đạn bay xuyên qua chướng ngại vật)
    instance_destroy();
  • 3. Sau khi có đối tượng viên đạn, việc còn lại các bạn chỉ cần gọi đối tượng này ở Step Event của object oCircle (máy bay):
    //Tạo viên đạn thứ nhất ở nòng bên trái máy bay
    with (instance_create_layer(x-10,y,"Instances",oBullet)){
    			
            //Hướng bay thẳng từ dưới -> lên
    	direction=point_direction(0,0,0,-1);
    			
    	//Tốc độ viên đạn
    	speed=15 ;
    }
    
    //Tạo viên đạn thứ hai ở nòng bên phải máy bay
    with (instance_create_layer(x+10,y,"Instances",oBullet)){
    			
    	//Hướng bay thẳng từ dưới -> lên
    	direction=point_direction(0,0,0,-1);
    			
    	//Tốc độ viên đạn
    	speed=15 ;
    }

Thành quả

SHADER là gì, tạo SHADER (Ấn ALT+A)

Shader là một dạng hỗ trợ của Draw Event, nhưng nó là một công cụ cực kỳ mạnh mẽ để thao tác những gì và cách mọi thứ được hiển thị trên màn hình bằng card đồ họa, có nghĩa là các event được xử lý cực nhanh. Trong game hiện tại mình chỉ sử dụng một ít hiệu ứng, nhưng nếu sau này các bạn phát triển những game nặng hơn, hiệu ứng đẹp hơn và phức tạp hơn, thì các bạn nên dùng Shader để giúp cho những Event được xử lý mượt mà nhằm mang đến trải nghiệm tốt nhất từ phía người chơi. Ngoài ra, Shader là một công cụ không chỉ có ở mỗi Game Maker Studio mà còn có trong hầu hết các nền tảng, các bạn có thể tham khảo tại đây

  • 1. Sau khi tạo Shader (Ấn ALT+A), các bạn chuyển qua tab .fsh

 

  • 2. Thêm vào hàm main() lệnh sau: lệnh bên dưới có chức năng tạo hiệu ứng FLASH cho đối tượng. Vì câu lệnh khá phức tạp nên mình sẽ không giải thích, các bạn có thể tham khảo tại đây
    gl_FragColor = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );
    gl_FragColor = vec4(1.0,1.0,1.0,gl_FragColor.a);
  • 3. Cách gọi Shader cho đối tượng oWall
    • Tạo thêm biến flashtime tại Create Event của oWall: lưu giữ thời gian mà hiệu ứng FLASH kéo dài
      //Variable 2: Flash time
      flashtime=0;  
    • Thêm vào Draw Event của oWall dòng lệnh sau để tạo hiệu ứng chớp sáng cho oWall
      if (flashtime>0){ 
      	
      	//Giảm thời gian chớp sáng
      	flashtime--;
      	
      	/Xác định shader sẽ dùng
      	shader_set(flash);
      	
      	//Vẽ lại đối tượng sử dụng shader trên
      	draw_self();
      	
      	//Xác định lại shader về mặc định(không dùng shader)
      	shader_reset();
      }
    • Cuối cùng, các bạn hãy sử dụng biến flashtime để điều khiển khi nào vật thể sẽ chớp sáng, khi nào vật thể sẽ bình thường

Thử nghiệm: Bắn các vật thể

Ở project này, mình sử dụng Shader chớp sáng khi viên đạn va chạm với chướng ngại vật (nhằm giảm độ lag của game tại có rất nhiều chướng ngại vật), để làm được như hình bên dưới, các bạn chỉ cần thay đổi flashtime thành một số >=0 khi có Collision xảy ra giữa oBullet và oWall, hãy tự thực hiện xem sao nhé 

Các bạn có thể thấy có rất nhiều hiệu ứng như: chớp sáng, tạo tia lửa, tạo vụ nổ,... 

Tổng kết

Sau 4 phần, mình xin được phép tổng kết một số kiến thức mang tính tổng quát cho việc phát triển game như sau (không nói riêng cho Game Maker Studio 2):

  • Phần 1: tìm hiểu về Android Studio, NDK, SDK, JDK, Sprite, Object 
  • Phần 2: tìm hiểu về Event, các API và kiến trúc để có thể tạo game cho Android
  • Phần 3: tìm hiểu thêm về tính năng của Game và hình dung cách để phát triển các phiên bản sau của Game
  • Phần 4: tìm hiểu chuyên sâu về Collision, công cụ Shader là gì và tại sao nó được dùng trong đa số trò chơi hiện nay

Lời cuối cùng, cảm ơn các bạn đã ủng hộ mình trong suốt Series làm game Android đầu tiên với Game Maker Studio 2, bài viết của mình xin phép được kết thúc tại đây. Hi vọng sau 4 phần, các bạn đã biết được thêm nhiều kiến thức thú vị và nâng cao khả năng tư duy cũng như chiến lược phát triển phần mềm, sản phẩm của mình dành cho những bạn yêu thích lập trình game. Hãy ủng hộ mình bằng cách chia sẻ và đánh giá bài viết để mình có động lực làm một Series mới về game 3D nhé, một lần nữa cảm ơn các bạn đã xem bài viết này, chúc các bạn thành công.

Game đã hoàn chỉnhAndroid  PC

Tài nguyên sử dụng trong gameFull

Project (GMS2_ProjectFile)Full


  RATE: 4.3 

  1172 VIEW


chưa có bình luận nào ...
BÀI VIẾT LIÊN QUAN
Checklist 8 Điều Bạn Cần Làm Để Đạt Điểm Cao Trước Khi Nộp Luận Văn / Đồ Án

Ở FPT, Làm đồ án đã khó thì viết báo cáo đồ án lại càng là việc không hề dễ dàng. Chuẩn hoá file word, excel, ppt là một bước quan trọng để đảm bảo nhóm bạn đạt được điểm số cao nhất. Trong bài viết này mình sẽ giới thiệu đến bạn 8 mẹo cần thiết để chuẩn hoá file luận văn/đồ án trước khi nộp cho nhà trường. Tìm hiểu ngay để có thể nộp một bản báo cáo chất lượng cao và ấn tượng với giảng viên của bạn.

BÀI VIẾT LIÊN QUAN
Cách viết một Email chuyên nghiệp và lịch sự

Trong thời đại mạng xã hội phát triển như hiện nay, nhiều bạn vì ảnh hưởng từ việc nhắn tin bình thường thông qua Messenger hay Zalo, mà vô hình chung cho rằng những quy tắc trong viết Email không cần thiết nữa. Trong môi trường đại học của mình, trên trải nghiệm thực tế thì đa phần các bạn gửi Email rất thiếu chuyên nghiệp, mà đó là thứ ảnh hưởng không hề nhỏ tới công việc của bạn trong tương lai. Hôm nay trong bài viết, mình sẽ hướng dẫn cách viết một Email chuyên nghiệp và lịch sự nhất.

BÀI VIẾT LIÊN QUAN
Hướng dẫn tạo app SpringBoot trên Inteliji

Bài hướng dẫn tạo web bằng spring boot cho người mới bắt đầu sử dụng Inteliji IDEA (không dùng NetBean vì nó quá rác). Trong bài viết chỉ đề cập đến Spring Boot, mấy công cụ hay công nghệ bổ trợ như Thymleaf, JPA, Spring Security các bạn hãy đón xem những bài blog sau