[Hướng Dẫn] Rung màn hình ?

Focker_cFocker_c Posts: 1,577Registered
edited July 2019 in Game Maker: Studio
Hôm nay Focker sẽ làm tutorial hướng dẫn các bạn làm ra một hệ thống rung màn hình cho game.
Rất cần phải không ?
Chẳng hạn khi một cục đá rơi ập xuống thì sẽ cần hiệu ứng này đấy.
Ok, let's check this out.

Trước hết tạo 3 function :

Function script 1: 
shake_screen
// Call : shake_screen(so_lan_shake,max_shake,min_shake,kieu_rung)
// so_lan_shake : so lan se rung man hinh
// max_shake : do rung toi da
// min_shake : do rung toi da
// kieu_rung : cac kieu rung khac nhau 
// 1 : rung ngang , 2 : rung doc , 3  : rung ca hai.
global.so_lan_shake = argument0
global.max_shake = argument1
global.min_shake = argument2
global.kieu_rung = argument3



Function script 2: 
working_shake_screen
// Call : working_shake_screen()
// He thong rung man hinh hoat dong dua tren function nay.
// Phai bat len thi moi co the call shake_screen
if global.so_lan_shake > 0 and view_xview[0]==0 and view_yview[0]==0
{
 var do_rung;
 do_rung = global.min_shake + random( ceil( global.max_shake - global.min_shake ) )
 if global.kieu_rung = 1
 {
  view_xview[0] += choose(1,-1)*do_rung
 }
 if global.kieu_rung = 2
 {
  view_yview[0] += choose(1,-1)*do_rung
 }
 if global.kieu_rung = 3
 {
  view_xview[0] += choose(1,-1)*do_rung
  view_yview[0] += choose(1,-1)*do_rung
 }
 global.so_lan_shake -= 1
}



Function script 3: 
return_true_screen
// Call : return_true_screen()
// Script nay se giup dua view tro ve ban dau mot cach tu tu.
// Function nay phai luon duoc hoat dong.
if view_xview[0] < 0 {view_xview[0] += 1}
if view_xview[0] > 0 {view_xview[0] -= 1}
if view_yview[0] < 0 {view_yview[0] += 1}
if view_yview[0] > 0 {view_yview[0] -= 1}



Rồi bây giờ tạo 1 object để hoạt động hệ thống này của mình là ob_setup_shake_screen.
Trong object này ở event Create, đặt script như sau (Set up các biến chung) :
global.so_lan_shake = 0
global.max_shake = 0
global.min_shake = 0
global.kieu_rung = 1
Ở event Step, đặt script (hoạt động 2 function đã lập) :
working_shake_screen()
return_true_screen()


Cách hoạt động của hệ thống này sẽ dễ hiểu qua ví dụ sau :
Giả dụ mình bấm phím Space để rung màn hình nhé :
If "bấm phím cách" (trong object khác cũng được nhé)
{ shake_screen(5,32,10,1) }


Rồi, khi script shake_screen bên trên được call như vậy, nó sẽ nhập các biến global vào để hoạt động trong object ob_setup_shake_screen.
Khi này sẽ rung màn hình 5 lần .
Mỗi lần rung, màn hình sẽ ngay lập tức bị đẩy đi 1 khoảng trong tầm 32-10 pixels.
Và nhờ function return_true_screen luôn hoạt động, cho nên sau mỗi step, màn hình sẽ có xu hướng thay đổi 1 pixel để khi nào trở về vị trí ban đầu mới thôi.
Khi màn mình đã vị trí ban đầu (0,0) , thì mới bắt đầu lần rung thứ 2.
Và cứ thế rung đến lần 5.

Kiểu rung là "1" nhé , tức là chỉ rung ngang. Xem thêm ở function working_shake_screen để biết các kiểu rung khác. Nếu bạn đã am hiểu về GML thì hoàn toàn có thể sửa lại kiểu rung theo ý muốn.

Hết !
Hẹn gặp lại ở các bài guide khác ! D
Focker C

Comments

  • CryingWOLFCryingWOLF Posts: 1,766Registered
    Cách của Netro là lắc màn hình nha. Dễ hơn nhiều :3
  • Focker_cFocker_c Posts: 1,577Registered
    Fock cũng nghĩ sẽ post một bài khác về lắc màn hình.
    Lắc sẽ tạo cảm giác địa chấn liên tục thay vì chỉ ruỳnh 1 phát như cách ở topic này.
Sign In or Register to comment.