• Kiến thức
  • Network
  • Security
  • Software
  • Thủ thuật
  • Tin học văn phòng
  • Tin tức
  • Mail ảo tạm thời miễn phí
  • Tools tra cứu thông tin
  • Công cụ đổi số thành chữ
AnonyViet
  • Tin tức
  • Network
    • Mạng cơ bản
    • Hyper-V
    • Linux
    • Windown Server 2012
  • Security
    • Basic Hacking
    • Deface
    • Kali Linux / Parrot
    • SQL Injection
  • Thủ thuật
    • Khóa Học Miễn Phí
    • Code
    • Mẹo Vặt Máy Tính
    • Facebook
    • Windows 7/8/10/11
    • Đồ Họa
    • Video
  • Software
    • Phần mềm máy tính
    • Phần mềm điện thoại
  • Tin học văn phòng
  • Kiến thức
  • MMO
    • Advertisers – Publishers
    • Affiliate Program
    • Kiếm tiền bằng điện thoại
    • Pay Per Click – PPC
No Result
View All Result
  • Tin tức
  • Network
    • Mạng cơ bản
    • Hyper-V
    • Linux
    • Windown Server 2012
  • Security
    • Basic Hacking
    • Deface
    • Kali Linux / Parrot
    • SQL Injection
  • Thủ thuật
    • Khóa Học Miễn Phí
    • Code
    • Mẹo Vặt Máy Tính
    • Facebook
    • Windows 7/8/10/11
    • Đồ Họa
    • Video
  • Software
    • Phần mềm máy tính
    • Phần mềm điện thoại
  • Tin học văn phòng
  • Kiến thức
  • MMO
    • Advertisers – Publishers
    • Affiliate Program
    • Kiếm tiền bằng điện thoại
    • Pay Per Click – PPC
No Result
View All Result
AnonyViet
No Result
View All Result

[Lập Trình Top Down Game] #1: Di chuyển Top Down

DeathGM by DeathGM
21/07/2020 - Updated on 24/07/2025
in Godot
A A
0

Mục lục bài viết

  1. Giới Thiệu
  2. Tạo Project
  3. Tạo Sence
  4. Tạo Nhân Vật
  5. Code Di Chuyển
    1. Tạo Hàm Lấy Dữ Liệu Đầu Nhập Vào
    2. Áp dụng di chuyển
    3. Gọi hàm lấy dữ liệu
    4. Instance Node
    5. Speed và Delta
    6. Kết Thúc
  6. Câu hỏi thường gặp
    1. Tôi có thể sử dụng loại Node nào để tạo nhân vật trong game Top-Down này?
    2. Sự khác biệt giữa move_and_slide() và move_and_collide() là gì?
    3. Tôi nên đặt mã di chuyển vào hàm nào trong GDScript?

Giới Thiệu

Chào các bạn, chào mừng đã đến với series tiếp theo về lập trình game với Godot Engine. Hôm nay mình sẽ hướng dẫn các bạn lập trình game Top Down với Godot nhé.Trong bài này mình sẽ hướng dẫn các bạn di chuyển nhân vật cho top down game.

📢 Tham gia kênh Telegram của AnonyViet
👉 Vào Telegram AnonyViet
Cập nhật bài mới, tools hay và thủ thuật IT nhanh nhất

Với Top Down game thì chúng ta không cần trọng lực như cái series đầu mà chỉ cần di chuyển 4 hướng là được.Thường thì các bạn search youtube các bài về basic top down game sẽ thấy người ta thường dùng lệnh if để check Input và di chuyển, làm kiểu thế rất mất thời gian nên mình sẽ làm 1 kiểu nhanh gọn lẹ luôn nhé :3.

Các bài viết liên quan

Có nên dùng Unity để lập trình game không? 35

Có nên dùng Unity để lập trình game không?

07/04/2022 - Updated on 25/07/2025
godot lap trinh game

Có nên học Godot Engine để lập trình Game không?

15/03/2022 - Updated on 25/07/2025
hoc lap trinh game de khong

Học lập trình Game dễ không? Tiềm năng của ngành lập trình game?

09/03/2022 - Updated on 25/07/2025
Có nên dùng Game Maker Studio để làm Game trong năm không? 36

Có nên dùng Game Maker Studio để làm Game trong năm không?

03/03/2022 - Updated on 25/07/2025

Note: Đây sẽ là bài 1 cho cả 2 seires

Tạo Project

Thì như thường thôi chúng ta sẽ tạo project mới.

[Lập Trình Top Down Game] #1: Di chuyển Top Down 19

Project Name: Tên Project

Project Path: Đường dẫn

Renderer:

Chọn OpenGL 3.0 nếu bạn muốn làm game PC & Android – Chọn OpenGL 2.0 nếu bạn muốn làm game web.

Sau khi có đường dẫn xong các bạn nhấn Create Folder rồi nhấn Create & Edit để bắt đầu

Tạo Sence

Như mấy bài trước với Godot chúng ta sẽ tạo Sence mới sẽ chứa nhân vật và những thứ khác

[Lập Trình Top Down Game] #1: Di chuyển Top Down 20

Bạn có thể sử dụng Node Đen hoặc 2D Node đều được. Mình sẽ xài 2D Node và đặt tên nó là World sau đó các bạn nhấn Ctrl + S để lưu nó lại.Mình sẽ lưu nó lại vào folder chứa Cảnh(Sence).

[Lập Trình Top Down Game] #1: Di chuyển Top Down 21

Tạo Nhân Vật

Các bạn nhấn vào dấu + bên cạnh cái tên của Sence để tạo sence mới

[Lập Trình Top Down Game] #1: Di chuyển Top Down 22

Rồi nhấn Other Node hoặc Dấu + Dưới chữ Sence để thêm Node. Các bạn tìm cho mình Node KinematicBody2D. Đây là một nút ” Cơ thể động học”giúp chúng ta có thể di chuyển và thực hiện dễ dàng hơn.

Rồi các bạn Thêm cho mình 2 Node là “Sprite” và “CollisionShape2D“.

Sprite: Là node hình ảnh cho node bố mẹ nói ngắn gọn là node hiện thị hình ảnh cho cái KinematicBody2D ý

CollisionShape2D: là node đại diện cho dữ liệu va chạm trong không gian 2D tức là mấy cái hình dùng để va chạm ý. Bạn nào từng tiếp xúc qua sẽ hiểu.

Nói chung trong Godot nó là: KinematicBody2D là linh hồn – Sprite là hình dáng bên ngoài – CollisionShape2D là bộ xương

[Lập Trình Top Down Game] #1: Di chuyển Top Down 23

Mình sẽ đổi tên cái KinematicBody2D thành Player cho dễ nhận diện.

Với Sprite hiện mình chưa có asset nên chúng ta xài tạm cái icon.png có sẵn trong filesystem của godot nha :v bài sau mình sẽ kiếm cái asset.

Các bạn nhấn vào Sprite rồi nhấn vào cái Icon xong sau đó kéo qua chỗ Texture của Sprite

[Lập Trình Top Down Game] #1: Di chuyển Top Down 24

Tiếp đó chúng ta sẽ set CollisionShape2D cho nó. Nhấn vào node collision rồi chỗ shape các bạn chọn 1 cái shape cho nó, cái nào cũng được tùy bạn ở đây mình chọn hình vuông cho nó vuông với cái Sprite

[Lập Trình Top Down Game] #1: Di chuyển Top Down 25[Lập Trình Top Down Game] #1: Di chuyển Top Down 26

Vậy là chúng ta đã tạo xong nhân vật cơ bản của cơ bản :’).

Sau đó các bạn lưu lại nha

Tiếp đến sẽ là phần Script các bạn nhấn vào dấu tờ giấy có dấu + màu xanh để tạo script à nhớ nhấn vào node Player mà tạo nha đừng có tạo ở Sprite hay CollisionShape2D.

[Lập Trình Top Down Game] #1: Di chuyển Top Down 27

Code Di Chuyển

 

Chúng ta sẽ xài GDScript của Godot nhé. Đây là ngôn ngữ riêng của Godot được dựa trên Python và Lua.

Như đã nói ở đầu bài mình sẽ hướng dẫn các bạn di chuyển nâng cao :3.

Tạo Hàm Lấy Dữ Liệu Đầu Nhập Vào

Chúng ta sẽ tạo hàm mới gọi là laydau_nhapvao(): tức là hàm sẽ lấy mọi thông tin nhập vào từ bên ngoài. VD như bạn nhấn phím K nó sẽ tấn công thì đó là lấy thông tin từ đầu nhập bên ngoài.

Vậy mình sẽ tạo hàm func laydau_nhapvao():

Trong đó mình sẽ tạo 1 biến là vector_dauvao gán = Vector2.ZERO hoặc Vector2() (2 cái = nhau nhé).

vector_dauvao là biến dùng đến xác định Vector2(x,y) tức là đầu x,y. Nếu nhấn trái sẽ di chuyển qua trái(Vectoc(-1,0)), còn nhấn qua phải sẽ di chuyển qua phải(Vector2(1,0)), lên trên thì (Vector2(0,-1) chứ không phải là Vector2(0,1) như trong toán học, trong game ngược lại).

func laydau_nhapvao():
var vector_dauvao = Vector2.ZERO
vector_dauvao.x = Input.get_action_strength("ui_right")- Input.get_action_strength("ui_left")
vector_dauvao.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")

move_and_collide(vector_dauvao)

Ở đây:

vector_dauvao.x = Input.get_action_strength(“ui_right”) – Input.get_action_strength(“ui_left”): nghĩa là Input(đầu nhậpvào).get_action_strength(“ui_right”) (lấy cường độ hành động có thể hiểu là lấy đầu nhập vào khi nhấn phải) sau đó trừ đi  Input.get_action_strength(“ui_left”) => ui_right(Vector(1,0)) và ui_left(Vector(-1,0)) khi nhấn phải mà không nhấn trái thì cái hành động nhấn phải đó Vector2 = Vector2(1,0) và vì bên trái = 0 cho nên 1-0 sẽ = 1 (thì khi di chuyển sang phải Vector(1,0) cái x nó = 1 rồi chúng ta đâu di chuyển sang trái đâu vì vậy nó = 0 khi nào di chuyển sang trái nó mới = -1 vậy 1-0 sẽ = 1 và = 1 thì nó di chuyển sang phải và bên trái thì ngược lại, vector_dauvao.y cũng tương tự)

Áp dụng di chuyển

Sau đó mình sẽ thêm 1 lệnh để áp dụng di chuyển cho nhân vật đó là move_and_collide(di chuyển và va chạm khác với move_and-slide(di chuyển và lướt) nó còn có công dụng là đẩy vật khác :)) đúng vậy có thể đẩy vật khácnếu là move_and_slide nó chỉ di chuyển và lướt chứ không thể đẩy vậy khác được. Nếu xài Rigdbody2D thì cả slide và collide đều đẩy được nó :3 tính năng khá hay của Godot )

Gọi hàm lấy dữ liệu

Rồi tiếp đó chúng ta phải gọi nó vào hàm quá trình vật lý (physical_process(delta)) hoặc quá trình (_process(delta)) bạn có thể xem cơ bản ở đây: Godot GDScript

[Lập Trình Top Down Game] #1: Di chuyển Top Down 28

Instance Node

Rồi sau đó qua cái sence world và instance node player vào để test

[Lập Trình Top Down Game] #1: Di chuyển Top Down 29

Các bạn nhớ kéo Player ra giữa nha.

[Lập Trình Top Down Game] #1: Di chuyển Top Down 30

Rồi các bạn nhấn F5 hoặc F6 chạy game (F5 chọn sence để chạy, F6 chạy sence bạn đang làm việc) khi chạy game bạn nhấn nút mũi tên để di chuyển nhé. Nhưng mà bạn để ý khi di chuyển thẳng ngang với di chuyển chéo thì tốc độ di chuyển chéo nó nhanh hơn chứ không đều như 2 cái di chuyển kia, vì vậy cúng ta có 1 câu lệnh để bình thường hóa tốc độ nó lại là .normalized().

Vậy chúng ta sẽ gõ

 vector_dauvao = vector_dauvao.normalized()

[Lập Trình Top Down Game] #1: Di chuyển Top Down 31

Speed và Delta

Mình sẽ sử dụng biến export var để xuất ra ngoài bảng Inspector (đây là 1 tính năng khá OK của Godot)

VD:

[Lập Trình Top Down Game] #1: Di chuyển Top Down 32

Đầu tiên chúng ta khai báo

export var speed = 100 đi cho tròn chỉnh bao nhiêu cũng được tùy bạn

Sau đó chúng ta sẽ * nó vào với biến vector_dauvao và * với delta luôn

Bạn có thể làm như này.

[Lập Trình Top Down Game] #1: Di chuyển Top Down 33

Nhưng mà với mình thì mình tạo 1 biến mới chứa 3 cái trên cho dễ hiểu.

[Lập Trình Top Down Game] #1: Di chuyển Top Down 34

Ở laydau_nhapvao không có delta nên mình sẽ tạo 1 delta ngay trên func laydau_nhapvao():

Rồi ở_physical_process(deta): mình chỉ cần gọi nó vô thôi.

Kết Thúc

Vậy là đã xong bài 1 trong series lập trình game với Godot, rồi hẹn gặp lạibạn vào bài sau ;3

Câu hỏi thường gặp

Tôi có thể sử dụng loại Node nào để tạo nhân vật trong game Top-Down này?

Bài viết sử dụng KinematicBody2D. Đây là lựa chọn phù hợp cho việc di chuyển và xử lý va chạm trong game 2D.

Sự khác biệt giữa move_and_slide() và move_and_collide() là gì?

move_and_collide() cho phép nhân vật đẩy các vật thể khác, trong khi move_and_slide() chỉ cho phép nhân vật trượt qua các vật thể khác.

Tôi nên đặt mã di chuyển vào hàm nào trong GDScript?

Bạn nên đặt mã di chuyển vào hàm _physics_process(delta) để đảm bảo cập nhật di chuyển đúng trong mỗi khung hình.

Tags: Godotgodot 2d gamegodot di chuyểnGODOT ENGINEgodot hướng dẫngodot tutoriallập trình gamelập trình game với godotlập trình top down game
DeathGM

DeathGM

Related Posts

Có nên dùng Unity để lập trình game không? 37
Code

Có nên dùng Unity để lập trình game không?

07/04/2022 - Updated on 25/07/2025
godot lap trinh game
Godot

Có nên học Godot Engine để lập trình Game không?

15/03/2022 - Updated on 25/07/2025
hoc lap trinh game de khong
Kiến thức

Học lập trình Game dễ không? Tiềm năng của ngành lập trình game?

09/03/2022 - Updated on 25/07/2025
Có nên dùng Game Maker Studio để làm Game trong năm không? 38
Kiến thức

Có nên dùng Game Maker Studio để làm Game trong năm không?

03/03/2022 - Updated on 25/07/2025
[Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game 39
Godot

[Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game

09/12/2021 - Updated on 24/07/2025
[Tạo 2D Platformer Game với Godot] Phần 28: Thêm âm thanh giao diện 40
Godot

[Tạo 2D Platformer Game với Godot] Phần 28: Thêm âm thanh giao diện

08/12/2021 - Updated on 24/07/2025
guest

guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
oldest
newest
Inline Feedbacks
View all comments

Liên hệ Quảng Cáo

Lien he AnonyViet

Bài viết mới

JOPDF

JOPDF: Phần mềm chỉnh sửa PDF đa năng cho Windows và Mac

by Thanh Kim
10/04/2026
0

app nhắc bảo trì xe máy

MyVehicle: App nhắc bảo trì xe máy tiện lợi và bảo mật

by Thanh Kim
10/04/2026
0

3 tháng Adobe Express Pro miễn phí

Hướng dẫn nhận 3 tháng Adobe Express Pro miễn phí

by Thanh Kim
09/04/2026
0

cách tắt AI trên Gmail

Cách tắt AI trên Gmail để bảo vệ dữ liệu cá nhân tuyệt đối

by Thanh Kim
08/04/2026
0

Bình luận gần đây

  • võ văn lợi trong Cách nâng cấp SuperGrok Heavy miễn phí 1 năm qua Amazon Pay
  • Nhật trong Hướng dẫn cài Google TV lên USB để biến PC thành TV
  • cisad trong Share key Driver Booster v13 Pro miễn phí 6 tháng
  • Huy trong Hướng dẫn đăng ký Google Colab Pro 1 Năm Miễn Phí
  • phamphat trong Cách chạy OpenClaw bằng Crawbot: tiết kiệm chi phí
  • AnonyViet trong Hướng dẫn cài OpenClaw – AI Trợ lý cá nhân trên máy tính
  • Sơn trong Hướng dẫn cài OpenClaw – AI Trợ lý cá nhân trên máy tính
  • Hieu trong Share miễn phí bộ 03 Combo khóa học tự học tiếng Anh giao tiếp
  • 45555 trong Sự trỗi dậy của “Người ngoài hành tinh”: Alienware Aurora AC16250 “Vũ khí” tối thượng định hình Gaming năm 2026
  • 45555 trong Cách làm mờ ảnh trên iPhone sau khi chụp cực đơn giản
  • vatuan13 trong Hướng dẫn cài OpenClaw – AI Trợ lý cá nhân trên máy tính
  • vatuan13 trong Hướng dẫn thiết lập định vị giả trên Zalo
  • AnonyViet trong Hướng Dẫn Cấu Hình OpenClaw Trên VPS Ubuntu 2.5G RAM (giá chỉ 18$/năm)
  • hùng lê trong Hướng Dẫn Cấu Hình OpenClaw Trên VPS Ubuntu 2.5G RAM (giá chỉ 18$/năm)
  • Kelvin trong Hướng dẫn thi chứng chỉ bảo mật CTIGA miễn phí 100%
  • Minh trong Hướng dẫn kết nối OpenClaw với Whatsapp
  • AnonyViet trong Hướng Dẫn Cấu Hình OpenClaw Trên VPS Ubuntu 2.5G RAM (giá chỉ 18$/năm)
  • congdk trong Hướng Dẫn Cấu Hình OpenClaw Trên VPS Ubuntu 2.5G RAM (giá chỉ 18$/năm)
  • AnonyViet trong Hướng dẫn cài OpenClaw – AI Trợ lý cá nhân trên máy tính
  • AnonyViet trong Hướng dẫn cài OpenClaw – AI Trợ lý cá nhân trên máy tính

Giới thiệu

AnonyViet

AnonyViet

Nơi chia sẻ những kiến thức mà bạn chưa từng được học trên ghế nhà trường!

Chúng tôi sẵn sàng đón những ý kiến đóng góp, cũng như bài viết của các bạn gửi đến AnonyViet.

Hãy cùng AnonyViet xây dựng một cộng đồng CNTT lớn mạnh nhất!

Giới thiệu

AnonyViet là Website chia sẻ miễn phí tất cả các kiến thức về công nghệ thông tin. AnonyViet cung cấp mọi giải pháp về mạng máy tính, phần mềm, đồ họa và MMO.

Liên hệ

Email: support[@]anonyviet.com

1409 Hill Street #01-01A
Old Hill Street Police Station
Singapore 179369

 

DMCA.com Protection Status

kết quả xổ số hôm nay U888 33win Ae888 kubet kubet 8kbet 99ok trang chủ sc88 xin88 good88 kubet fm88 kubet thailand vip66 xoso66 https://tp88fun.com/ hello88 qq88 Xoso66 Vip66 hitclub bong99 XOSO66 new882.info Thabet fun88 nhà cái uy tín sunwin sunwin rikvip hitclub sunwin go88 12bet v9bet betvisa betvisa vin777 vin777 ee88 bet88 abc8 c54 https://keonhacai.fund/ sunwin Xoso66 58win fun88.supply EE88 https://da88.design/ https://fun88.supply/ F8BET80 https://q23win.com/ u888 W88 link 58win 58WIN https://bbet88b.com/ OK9 SHBET https://xx88.center/ vswin 789PCOM NHÀ CÁI MMOO TT88COM GO 99 RR88 ABC8 https://nowgoal.ws/ https://tylekeonhacai.me/ https://keonhacai.org.vc/ https://xx88.ac/ xx88.me.uk XN88 NOHU90 AF88 HZ88 https://xx88.asia/ 789f NOHU HITCLUB Sunwin 58WIN MV88 888NEW AZ888 PG99 TD88 12bet v9bet NOHU90 Thabet vip66 7mcn hm88 xoso66 DA88 9BET https://daga.rocks https://c168.info/ LC88 Game SH BET https://jun88sr.com/ NOHU90 https://kjcgaming.com/ https://nohutm.com 789Win https://go8.red/ https://urr88.com/ hit club game bai tg88 kèo nhà cái 5 9 win Sunwin UU88 nổ hũ uy tín Go88 https://bancadoithuong.codes/ https://danhdeonline.blog/ Xocdia88 https://nhacaiuytin10.uk.com/ https://keonhacai88.tv/ https://keonhacai.loans/ https://gamebaidoithuong.io/ https://keonhacai.kiwi/ 789club sodo casino ok 8386 xx88 V9BET Sun52 https://918xxy.com/ https://go99bet.live/ https://tt88.ae.org/ kjc https://go99.mx/ 79king nhà cái MB66 Alo789 MV88 sc88 11uu vn23 88CLB Thabet nạp tiền qq88 sun win luck8 https://devmarks.io cwin V9bet ALO8.com F168 VIN777 Rik88 8kbet KUBET TT88 789club 789club AX88 xoso66 https://sc88.info/ HZ88 MMOO OPEN88 12bet https://nohu90s.asia go88 trang cá độ bóng đá https://nohuq.net/ https://s8inc.com/ SODO https://cm88.uk.net/ ko66 12bet https://cm88.gg/ 8us F168 Jun88 Jun88 fly88 12bet 8DAY https://f168.today/ Vip66 TẢI SUNWIN https://open88seo.com/ Luck8 winvn RED88 VIC88 F168 keobongda.one/ Jun88 https://keonhacaitop.com/ hytw3339 Kết quả bóng đá open88 https://sc88.market/ trang chủ MB66 az888 WIN678 https://789betlol.com/ F168 12bet SH BET vic88 red88 tỷ lệ nhà cái game nổ hũ game bài tỷ số trực tuyến https://qq88pro.vip/ Keonhacai5 23win 7m https://sc88.info/ luckywin hm88 23win 888slot sky88 sodo casino go8 https://fly88h.com/ 8kbet

©2026 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về CNTT

No Result
View All Result
  • Tin tức
  • Network
    • Mạng cơ bản
    • Hyper-V
    • Linux
    • Windown Server 2012
  • Security
    • Basic Hacking
    • Deface
    • Kali Linux / Parrot
    • SQL Injection
  • Thủ thuật
    • Khóa Học Miễn Phí
    • Code
    • Mẹo Vặt Máy Tính
    • Facebook
    • Windows 7/8/10/11
    • Đồ Họa
    • Video
  • Software
    • Phần mềm máy tính
    • Phần mềm điện thoại
  • Tin học văn phòng
  • Kiến thức
  • MMO
    • Advertisers – Publishers
    • Affiliate Program
    • Kiếm tiền bằng điện thoại
    • Pay Per Click – PPC

©2026 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về CNTT

wpDiscuz