[Game Maker] Jumping in Platform Game [v1.0]

Standard

Một game dạng Platform (đi cảnh) thì phần nhảy có lẽ là 1 trong những vấn đề quan trọng nhất smile_regular

Nhảy cũng có nhiều kiểu: Nhảy 1 lần, nhảy 2 lần (double jump), nhảy có/không có gia tốc, độ cao khi nhảy phụ thuộc vào thời gian tác động (nhấn lâu thì nhảy cao hơn)…

Bài viết này trình bày cách thực hiện nhảy 1 lần có gia tốc bằng GML (Game Maker Language) smile_wink

Ý tưởng

  • Việc nhảy sẽ thực thi khi người dùng nhấn và bỏ phím Space (sự kiện Key_Press)
  • Khi bắt đầu nhảy, tạo 1 vận tốc đầu và gia tốc.
  • Vật sẽ nhảy đến khi vận tốc = 0 thì rơi xuống. Trong quá trình rơi vật dừng lại khi gặp vật cứng (Solid).
  • Trong quá trình nhảy, phím Space vô tác dụng.

Thực hiện.

1. Tạo object và room

    1. Tạo 2 object, 1 là chủ thể (quả bóng – Main) và 1 là đại diện cho mặt đất (viên gạch – Border), tạo 1 room nhỏ để test

      9-22-2010 08-20-27

2. Viết code

  1. Tại sự kiện Create của Main, ta khai báo và khởi tạo một vài hằng số:
    globalvar gbJumping, gnGravity, gcnMaxVspeed, gcnGravity; // Khai bao cac bien dung chung
    gbJumping = 0; // gbJumping dung de kiem tra xem co dang nhay hay khong
    gcnMaxVspeed = 16; // Gia tri van toc khi bat dau nhay
    gcnGravity = 1; // Gia tri gia toc roi tu do

  2. Tại sự kiện Step của Main, ta xử lý quá trình nhảy:
    // ==={JUMP}===

    // Bat dau nhay
    if (keyboard_check_pressed(vk_space)) // Su kien nhan va bo phim Space
    {
    if gbJumping = 0 // Neu khong phai dang nhay thi tien hanh qua trinh bat dau nhay
    {
    gbJumping = 1;
    vspeed = - gcnMaxVspeed;
    gnGravity = gcnGravity;
    }
    }

    // Qua trinh nhay
    if gbJumping = 1 // Dang nhay
    {
    if (!(place_free(x, y + vspeed + gnGravity))) // Neu voi van toc moi, vat di xa hon vat cung gan nhat thi khong tang van toc nua ma dung ham move_contact_solid de den vat cung
    {
    var nXBefore;
    nXBefore = x; // Luu lai gia tri cua Self.x
    move_contact_solid(0,vspeed + gnGravity); // Sau lenh nay gia tri Self.x se thay doi (bang gia tri x cua vat cung gan nhat)
    x = nXBefore; // Khoi phuc Self.x
    //Dung nhay
    vspeed = 0;
    gbJumping = 0;
    gnGravity = 0;
    }
    else // Nguoc lai thi tang vspeed
    {
    vspeed = vspeed + gnGravity;
    }
    }

    // {JUMP}

    Theo như ý tưởng thì vật sẽ ngừng rơi nếu gặp vật cứng, tuy nhiên ta không xử lý trực tiếp sự kiện này mà thông qua 1 sự kiện khác – vật dừng rơi khi với vận tốc mới vật sẽ đi quá vật cứng gần nhất. Theo logic thì sự kiện này sẽ tổng quát hơn sự kiện gặp vật cứng smile_tongue       

3. Preview

2 thoughts on “[Game Maker] Jumping in Platform Game [v1.0]

  1. Pingback: [Game Maker] Jumping in Platform Game [v3.0] |

  2. Pingback: [Game Maker] Jumping in Platform Game [v2.0] |

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s