[Hướng Dẫn] [XP] Minigame giống audition

canhdonghoang2canhdonghoang2 Posts: 69Registered
Bài này sẽ hướng dẫn tạo 1 minigame(kiểu giống Audition nhưng đơn giản hơn nhiều-k biết mô tả sao =.=) bằng script
11_zpsc9c43b28.png
đầu tiên vào tạo một Scene riêng và khai báo những thủ tục như sau
class Scene_Test
def main
# 1. ở đây ta sẽ khai báo các biến cần thiết cho script
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
# 2. ở đây ta sẽ khai báo thủ tục loại bỏ các biến khi rời khỏi Scene_Test này
end
def update
# 3. ở đây ta sẽ thực hiện những thay đổi cho các biến trên, tạo được mini game ta muốn
end
end
Bây giờ ta sẽ làm từng bước ở #
[align=center][size=large]Đầu tiên là # 1.[/size][/align]
Ta khai báo các biến cần thiết, trên hình các bạn có thể thấy 1 thanh dài gọi là "bar", 1 ô màu đỏ là "đích" và ô màu vàng là *chả biết gọi là gì hết* "trượt".
Như vậy thì cần 3 biến, gọi từng biến như sau
@bar = Sprite.new
@bar.bitmap = RPG::Cache.picture("bar") # khai báo biến ứng với 1 bức hình có tên bar.png vào trong thư mục picture
@bar.x = x#thay x,y là tọa độ, z là tầng của bức hình
@bar.y = y
@bar.z = z
tương tự khai báo 2 biến @dich với @truot
[align=center][size=large]# 2. ta khai báo thủ tục[/size][/align]
@bar.dispose
@dich.dispose
@truot.dispose
sau 2 đoạn đó thì ta có được script như sau
12_zps3b873920.png
[align=center][size=large]# 3. tùy chỉnh cho các biến[/size][/align]
ta cũng khai báo các bước thủ tục
@nen.update
@bar.update
@dich.update
@truot.update
if Input.trigger?(Input::B) # nếu bấm nút X thì thoát ra lại map
$scene = Scene_Map.new
end
Mình sẽ hướng dẫn bạn làm 2 hiệu ứng riêng
Với kiểu hiệu ứng này các bạn sẽ làm cho thanh "trượt" chuyển động từ góc trái tới góc phải rồi sau đó biến 1 cái về lại góc trái(tức là 2 đầu thông nhau)
câu lệnh sử dụng ở đây là
@truot.x += #Tốc độ di chuyển, là số pixel mà mỗi lần thanh "trượt" này đi được
Vào test thử sẽ thấy thanh này chạy 1 mạch qua góc kia màn hình rồi biến mất
Do đó các bạn sẽ giới hạn lại phạm vi thanh trượt di chuyển nằm trong phạm vi độ rộng của thanh "bar", dưới đây là kiểu mẫu câu lệnh như vậy
if @truot.x >= @bar.x + @bar.bitmap.width - @truot.bitmap.width
câu lệnh này có nghĩa là
nếu tọa độ x của thanh "trượt" lớn hơn (tọa độ x của thanh "bar" + độ rộng của thanh "bar" trừ đi độ rộng của thanh "trượt")
các bạn có thể tưởng tượng trong đầu hoặc vẽ ra giấy câu này sẽ thấy đó là giới hạn bên phải của thanh "bar"
Untitled_zps2228c64a.png
*hình cho dễ hình dung*chấm đen là tọa độ x, thanh ngang đen là độ rộng của "bar" còn thanh ngang đỏ chính là độ rộng của thanh "trượt"
nếu điều kiện kia thõa mãn thì tức là thanh "trượt" đã vượt ra ngoài thanh "bar", ta sẽ cho nó quay lại vị trí ban đầu với lệnh
@truot.x = @bar.x
vậy thì nãy h ta sẽ có những lệnh như sau
if @truot.x >= @bar.x + @bar.bitmap.width - @truot.bitmap.width
@truot.x = @bar.x
else
@truot.x += Test::Tocdo
end
Ở đây ta dùng 1 biến đệm là @switch để đảo chiều chuyển động, do đó lên trên def main khai @switch = true
pha đầu chuyển động sang bên phải, nếu như đi đến hết chiều rộng của thanh "bar" thì bật qua pha thứ 2 với lệnh @switch = false
if @switch == true
@truot.x += Test::Tocdo
if @truot.x >= @bar.x + @bar.bitmap.width - @truot.bitmap.width
@switch = false
end
pha thứ 2 di chuyển về phía bên trái, chạm góc trái của "bar" thì bật qua pha 1 lại
else # nghĩa là nếu trường hợp trên không đúng ( @switch != true hay hiểu đơn giản hơn là == false -k chính xác đâu nha)
@truot.x -= Test::Tocdo
if @truot.x <= @bar.x
@switch = true
end
end

Về cơ bản là xong hết rồi, nhưng mà mini game thì phải có thưởng chứ.
Ta sẽ kiểm tra nếu như người chơi bấm nút C và thanh "trượt" nằm trong phạm vi của ô "đích"*nãy giờ mới nhắc tới biến "đích" này, tưởng là khai báo dư nhỉ:D* thì ta cho biến $game_variables[1] giá trị 1, nếu bấm ngoài phạm vi đó thì gán cho nó giá trị 2.
Cuối cùng cho người chơi trở về lại map sau khi chơi xong :D
if Input.trigger?(Input::C)
if @truot.x >= @dich.x and @truot.x <= @dich.x + @dich.bitmap.width-@truot.bitmap.width
$game_variables[1] = 1
else
$game_variables[1] = 2
end
$scene = Scene_Map.new
end

Xong rồi đó, bạn chỉ cần gọi Scene_Test này ra ở 1 event nào đó thôi, ví dụ như hình này nhé
Untitled_zps0863fdd1.png
Trong event này bạn tạo điều kiện nếu như $game_variables[1] = 1 thì cho phần thưởng, còn = 2 thì thông báo thua :D
Một số thứ mình k hướng dẫn ở đây mà làm trong Demo,ai có hứng thú thì xem nha, cũng k có gì nhiều đâu: http://www.mediafire.com/?2t8shhr5g2p2xxf

Nếu có bạn nào muốn sử dụng thì mình sẽ update thêm phần bấm các nút lên xuống qua về để cho giống Audition luôn, mình k làm ở bài hd này bởi vì thấy 4rum mình ít người xài RMXP quá =.=

Comments

Sign In or Register to comment.