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
)
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 :
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
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 :
4. event begin step
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
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
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
7.sự di chuyển qua trái , qua phải
event left
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 "
event 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
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
test lại , a hero của mình đây gòi , o ze
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 :
sau đó cần thiết lập nút " chém: của hero
vào object ob_hero
event space
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
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
mệt quá , mất hơn 2 tiếng , hi vọng có người đọc , kiếm ít điểm đổi quà
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
)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ảynhay_cao=20
toc_do=6
phia=0//trai=1 phai=0
trangthai=0//stand : 0 jumb : 1 run : 2
hinhanh=astand0
attack=0
image_speed=0.5
//cac' sprite
stand0=astand0
stand1=astand1
run0=arun0
run1=arun1
jumb0=ajumb0
jumb1=ajumb1
a_up0=aattackup0
a_up1=aattackup1
a_down0=aattackdown0
a_down1=aattackdown1
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//hinh anh nhan vat chinh
if phia=0
{
if trangthai=0//dung yen
hinhanh=stand0
else
if trangthai=1//nhay
hinhanh=jumb0
else
if trangthai=2//chay
hinhanh=run0
}
if phia=1
{
if trangthai=0
hinhanh=stand1
else
if trangthai=1
hinhanh=jumb1
else
if trangthai=2
hinhanh=run1
}
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ậtif attack=1
{
if phia=0
{
if trangthai=1//nhay
hinhanh=a_up0
else
{
hspeed=0
hinhanh=a_down0
}
}
else
if phia=1
{
if trangthai=1//nhay
hinhanh=a_up1
else
{
hspeed=0
hinhanh=a_down1
}
}
}
4. event begin step
event này có nghĩa là trong mỗi step ( 1 step=1/30 giây )gravity = place_free(x, y+1);
vspeed = min(12, vspeed);
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 wallif vspeed>0
{
move_contact_solid(direction,4)
trangthai=0
vspeed=0
}
if vspeed<0
vspeed=0
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

6.event no key
cho di chuyển mario :
if trangthai=2
trangthai=0
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íif trangthai=2 and attack=0
trangthai=0
7.sự di chuyển qua trái , qua phải
event left
event rightphia=1
if trangthai=0
trangthai=2
if place_free(x-toc_do,y)
x-=toc_do
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)phia=0
if trangthai=0
trangthai=2
if place_free(x+toc_do,y)
x+=toc_do
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 "
event up
khi bạn nhấn phím nhảy ( up )if (!place_free(x, y+1))
{
vspeed = -nhay_cao;
trangthai=1
}
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
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 .draw_sprite(hinhanh,-1,x,y)
test lại , a hero của mình đây gòi , o ze
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 :alarm[0]=1
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 .instance_destroy()
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 ,if attack=0
{
if phia=0 // ben phai
instance_create(x+35,y-25,ob_hero_attack)
else
if phia=1
instance_create(x-35,y-25,ob_hero_attack)
}
if attack=0
{
if ! trangthai=1
trangthai=1
attack=1
alarm[0]=10
}
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 )attack=0
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 ngayvisible=0
mệt quá , mất hơn 2 tiếng , hi vọng có người đọc , kiếm ít điểm đổi quà
