hướng dẫn di chuyển dạng game mario ( GM)

Thảo luận trong 'Game Development' bắt đầu bởi XxKonanxX, 24/4/07.

  1. XxKonanxX

    XxKonanxX Mario & Luigi

    Tham gia ngày:
    27/12/05
    Bài viết:
    883
    Nơi ở:
    _Rune Midgart_
    di chuyển kiểu mario
    bài hướng dẫn này , là theo yêu cầu của 1 bạn và lúc trước đã có 1 vài bạn hỏi mà chưa có thời gian trả lời .

    để bắt đầu bạn download các file này về , trong đó đã chứa các hình ảnh cần thiết cho game , chúng ta chỉ còn đi lập trình thoai , và 1 cái demo

    8-X 8-X 8-X , trong này mình hướng dãn làm chủ yếu theo script, cho nên các bạn chưa biết add script thì theo hướng dẫn chung và duy nhất đây
    - vào object cần add , chọn event xong , rồi qua bên action chon control -> code ->rồi "kéo cái execute a piece of code " cái tờ giấy màu trắng ấy .
    - ở đây mình hướng dẫn làm ở 2 mức , mức 1 là chỉ dừng lại ở di chuyển cho game dạng mario , mức 2 là thêm khả năng tấn công để làm game rpg 2D chữ đỏ

    I.tạo tường , sàn
    tạo tường sàn đầu tiên để tạo cơ sở cho việc tạo object chính .ở đây bạn nên làm 1 object tường chính , để khi hero tương tác thì chỉ cần 1 event consoli , hơn là cả mớ event consoli
    object wall basic tạo rất đơn giản
    tạo 1 object mới tên : ob_wall_basic , đánh dầu vào solid ( làm cho nó cứng lên :D )
    sau đó bạn mới bắt đầu tạo các bức tường , bạn có thể tạo bao nhiêu tùy thích, trong mỗi tường , bạn chỉ cần chọn sprite và chọn cho parent là ob_wall_basic là xong
    ở đây , ta chỉ cần 1 object để nghiên cứu , bạn chọn hình ảnh floor và chọn parent cho nó như trên .
    II. tạo room và tường
    tiếp sau đó bạn cần 1 cái room để ngiên cứu , bạn add room , tên : ro_man1
    setting : x=2000, y=2000 speed : 30

    background , chọn 1 màu nóng , khác màu đỏ , vd tím , hồng đậm cho nó dịu
    , sau đó bạn bắt đầu đặt các bức tương thành nhiều lớp như trong example để cho hero tung nhảy .
    bạn đã xong file rpg000
    III. hero
    1.add object ,
    đặt tên , ob_hero , chọn sprite là sp_hero
    bạn thăc mắc vì mình dùng 1 cái hình chữ nhật , lí do rất đơn giản , việc dùng 1 sprite hình chữ nhật , sẽ đơn giản hóa rất nhiều cho việc consoli , còn nếu chơi nguyên hình hero đẹp đẽ, bạn sẽ gặp khó khăn trong việc xử lí consoli với các bức tường và vẽ hình , ko tin cứ làm thử khắc biết !!
    2. thiết lập các thông số đầu tiên cho hero
    trong event create , bạn cần thiết lập cho hero các code sau :
    nhay_cao là độ cao nhất có thể nhảy
    toc_do là tốc độ di chuyển của nhân vật trang thái sẽ có 3 trạng thái cho nhân vật , 0: đứng yên ,1: nhảy , 2 : chạy: . việc phân tích ra nhiều trạng thái sẽ đơn giản hóa việc xử lí các event
    hinhanh là hình ảnh ban đầu của nhân vật
    attack là trạng thái tấn công (1)hay ko tấn công (0)
    phía là hướng bên phải hay trái của nhân vật
    image_speed là tốc độ hình ảnh động , set 0.5 cho nó khỏi nhanh quá ^^
    các sprite tương ứng với các 3 tính trạng và các phía . phân thế này cực tiện , sẽ nói sau
    nhớ là chữ đỏ cho ai mún thêm phần chém nhau , còn chỉ làm mario thì ko chơi thứ đó .
    ok vậy là xong phần thiết lập ban đầu , về sau bạn sẽ thấy các thông số hoạt động chặt chẽ và hiệu quả .
    3.thiết lập hình ảnh của hero , trong các trạng thái .
    tương ứng với mỗi trạng thái sẽ có 1 hình ảnh ( các sprite )
    event step
    bạn sẽ dễ dàng đọc các đoạn code nên mình cũng ko muốn dịch thêm cho mệt
    if : nếu , else : nếu sai thì
    phần này dành cho chém nhau
    cũng trong event step thêm 1 code :
    cũng chả khó đọc mấy , hspeed là vận tốc ngang của nhân vật
    4. event begin step
    event này có nghĩa là trong mỗi step ( 1 step=1/30 giây )
    trọng lực sẽ có khi dưới chân nhân vật ko có object nào ( y+1)
    khi đó sẽ xuất hiện vận tốc theo chiều dọc ( rơi xuống )
    5.consoli wall là event tương tác với các bức tường , bạn chỉ cần 1 event consoli với ob_wall_basic là ok
    khi nhân vật chạm 1 bức tường sẽ có 2 trường hợp , 1 là nó rơi từ trên xuống khi đó vspeed>0 , khi đó nó sẽ chuyển về trạng thái dứng yên trên wall
    trường hợp thứ 2 là khi nó nhảy lên chạm tường rồi rơi xuống , khi đó vspeed <0 , khi đó ta set vspeed=0 , nghĩa là vận tốc theo chiều dọc bằng 0 , khi đó trọng lực trong event begin step sẽ kéo nó xuống , kết quả , ta thấy nhân vật bị rơi :D
    6.event no key
    cho di chuyển mario :
    và cho di chuyển có chém nhau thì chơi nguyên cái ni
    hãy nghĩ xem khi bạn ko nhấn nút gì cả , nếu như nhân vật bạn đang chạy ( trạng thái =2 ) thì nó sẽ đứng lại ( trạng thái =0 ) chả có gì khó hiểu mí
    7.sự di chuyển qua trái , qua phải
    event left
    event right
    trong sự kiện khi bạn nhấn nút mũi tên trái , phia=1 , nhân vạt sẽ quay sang trái , néu như đang dứng yên ( trangthai=0) thì nhân vật sẽ chạy ( trangthai=2)
    nếu như bên trái ( x-6 ) ko có object cản đường , thì nó sẽ di chuyển về bên trái (x-6)
    tương tự cho bên phải
    8. nhảy "hip hop ":D
    event up
    khi bạn nhấn phím nhảy ( up )
    tốc độ dọc sẽ bằng -nhay_cao ( thông số ban đầu ) , nghĩa là hướng lên trên. tức là bạn sẽ nhảy lên .
    khi đó trạng thái bạn là nhảy ( trangthai=1)
    nhiều bạn làm chỗ này giống như vậy mà vẫn sai vì thấy nhân vật bay lên trời , vì các bạn ko thiết lập event begin step , là tạo ra trọng lực , dộ nhảy cao của nhân vật sẽ bị giảm dần do trọng lực kéo xuống , sau 1 hồi khi trọng lực làm giảm hết dộ nhảy , nhân vật bạn sẽ bị rơi xuống . B-) nghe như giáo sư vật lí
    9.tạo hình nhân vật .
    xong gòi , bạn có thể bỏ ob_hero vào room test thử cái , bạn sẽ là lên . ơ ơ , hero tui đâu mà chỉ thấy 1 cái hình chữ nhật chạy nhỷ thế này . hehe :D hero của bạn chứ ai , có điều nó chỉ thể hiện cái sprite chính của nó .làm thía nào đây
    thoát ra vào event draw
    ở đây , hàm nãy chỉ có tác dụng vẽ 1 hình ảnh hero tại tọa độ ob_hero , mà hìnhanh này giờ , ta đã thiết lập cho nó các trạng thái và các sprite tương ứng , cho nên hinhanh sẽ thay đổi theo trạng thái , kết quả bạn đã có 1 hero bằng xương bằng thịt .
    test lại , a hero của mình đây gòi , o ze :D wow , trông hành troáng qué .
    đến đây , bạn đã hoàn thành xong sự di chuyển kiểu mario , bạn có thể tinh chính , nhay_cao để có nhảy vừa tầm, cũng như thay đổi nó trong các event , ví dụ khi nó lớn hơn ( ăn nấm ) thì tăng thêm dộ nhay_cao cho nó .
    hay toc_do để có tốc độ di chuyển vừa ý .
    $$$ chú ý quan trọng là nếu bạn làm game mario thì còn 1 chỗ cần lưu ý là nhân vật mario của bạn có 2 chiều cao , lùn và thấp , khi đứng và ngồi cho nên bạn phải thay đổi sprite_index thành 1 hình chữ nhật khác , ví dụ khi chưa ăn nấm thì ban đầu chọn cho nó sp_hero_lun là hình chữ nhật thấp , sau đó khi nso ăn nấm cao lên thì cho thêm code vào event ăn nấm : sprite_index=sp_hero_cao chẳng hạn .
    với game mario , bạn sẽ có 3 lớp sprite là lùn , cao ( ăn 1 nấm ) và " lên thần " khi xơi hoa súng , cho nên bạn phải thay đổi hinhanh , tùy vào trường hợp ăn uống
    khi thay đổi , bạn chỉ cần cho vào event ăn nấm hay thay đổi , ví dụ consoli nấm , và cấp độ =0( là khi đang lùn )
    thì thêm code
    stand0=...
    stand1=...
    run0=...
    run1=..
    ....
    với các sprite tương ứng
    chúc bạn thành công
    10. đây là phần tiếp theo dành cho chém nhau , để bạn có thể làm 1 game rpg 2D theo dạng này
    bạn cần tạo ra 1 object tấn công để cho nó consoli với lính đối phương
    tạo 1 object mới lấy tê
    ob_hero_attack , chọn sprite là sp_hero_attack là hình mà mình gửi trong file example .nó cũng là hình vuông , lí do sao chắc bạn đã hiểu

    thiết lập event cho nó
    event create :
    event alarm 0 :
    nghĩa là khi sinh ra nó tồn tại trong khoảng thời gian rất ngắn chi đủ đẻ consoli 1 lần với quái vật , bởi nếu tạo ra quá lâu , nó sẽ consoli rất nhiều lần với quái vật .
    sau đó cần thiết lập nút " chém: của hero
    vào object ob_hero
    event space
    khi attack=0 , nghĩa là khi nó chưa tấn công ai ,
    nó sẽ tạo ra 1 object ob_hero_attack vào đúng phía của nó
    cũng lúc đó , trang thái nó khác trạng thái tấn công ( trang thai=1 )
    thì chuyển nó về trangthai tấn công ( để ta có hình ảnh hero đang tấn công )
    set attack=1 để nó ko chém tiếp được
    và đặt alarm[0]=10 để nó có thể chuyển về trạng thái cũ
    trong event alarm0
    atatack=0 là nó chưa tấn công , và trangthai chuyển về đứng yên ( trangthai=0 )
    bây giờ bạn test thử xem sao
    bạn sẽ thấy , mỗi khi hero tấn công , sẽ tạo ra 1 object là ob_hero_attack
    khi đó bạn chỉ cần cho ob_monter consoli nó và trừ máu là ngon lành

    tuy nhiên ko lẽ để lộ "phụ tùng" ra thế . ta sẽ giấu nó đi
    vào lại ob_hero_attack
    event create , thêm 1 code
    xong test lại , ko còn thấy ob_hero_attack nhưng thực sự nó vẫn tồn tại ngầm và giờ cho nó consoli với monter thì monter quéo ngay

    mệt quá , mất hơn 2 tiếng , hi vọng có người đọc , kiếm ít điểm đổi quà :D
     
  2. ken10

    ken10 Programmer

    Tham gia ngày:
    10/1/04
    Bài viết:
    2,341
    Nơi ở:
    Ho Chi Minh city
    @XxKonanxX: Ken sẽ bình trọn danh tiếng cho Konan ::), cố gắng phát huy nhé.
     
  3. kim_minh

    kim_minh Donkey Kong

    Tham gia ngày:
    24/2/06
    Bài viết:
    432
    @ ken10 : Nếu có thời giờ, ken chịu khó sắp xếp, dọn dẹp lại các topic của box nhé. Các tutorial cho vào một box (box Lưu trữ đi) cho dễ tìm.
     
  4. XxKonanxX

    XxKonanxX Mario & Luigi

    Tham gia ngày:
    27/12/05
    Bài viết:
    883
    Nơi ở:
    _Rune Midgart_
    có 1 bug nhỏ nhỏ , mà trong quá trình hướng dẫn quên " giới thiệu " :D
    đó là khi bạn copy vào example của mình thì ko sao , nhưng khi bạn copy vào 1 example của bạn để làm game thì sẽ có lỗi , lỗi là hình ảnh chỉ thể hiện 1 farme , bởi vì cái hình vuông cơ sở của bạn chỉ có 1 farme ,nên ko làm được
    để sửa lỗi này khá đơn giản :
    chú ý cực kì quan trọng là cái sp_hero ( cái hình vuông cơ sở màu đen ) phải đúp nó ra thành nhiều hình , sao cho frame của nó nhiều hơn frame file hình ảnh các trạng thái
    lấy ví dụ aattackup0 là có khoảng 5 frame ( lớn nhất ), thì trong sp_hero phải là 5,6 frame , mặc dù là 5 frame giống nhau là 5 hình chữ nhật có cùng kích thước .
    ::( lỗi này mới bị phát hiện bên gamethu , sang đây để chữ cháy ...
     

Chia sẻ trang này