• 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
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

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game

DeathGM by DeathGM
30/11/2021
in Godot
Reading Time: 6 mins read
A A
1

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

  1. Điểm số
    1. Cách giải quyết
    2. Autoload script
    3. Add group scene đồng xu
    4. Map
    5. Player
    6. PlayerData
    7. EndLevelMenu
    8. Level Script
    9. Kết quả
    10. Lưu ý
  2. Tổng Kết

Trong phần này thì mình sẽ hướng dẫn bạn cách để thêm điểm số vào cái LevelMap để nó có thể cập nhật số sao sau khi hết game.

Điểm số

Cách giải quyết

Về cách xử lý vấn đề của phần này thì mình sẽ giải thích như sau:

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

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

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

07/04/2022
godot lap trinh game

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

15/03/2022 - Updated on 17/03/2022
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
Có nên dùng Game Maker Studio để làm Game trong năm không? 72

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

03/03/2022

+ Đầu tiên mình sẽ cần 1 script và script đó có thể được truy cập vào mọi nơi, script này sẽ chịu trách nhiệm cho việc lưu trữ dữ liệu cụ thể ở đây là điểm số của từng map.

+ Mình sẽ tính điểm số đạt được của 1 map ở trong script của EndLevelMenu, điểm số này nếu muốn tính sẽ cần có: (số đồng xu đã thu thập được / tổng số đồng xu trong map ) * 100.

+ Để lấy được tổng số đồng xu thì mình sẽ thêm cái scene đồng xu vào 1 group gọi là dongxu và mình có hàm get_tree().get_nodes_in_group(“dongxu) sẽ cho phép mình lấy tất cả số đông xu đang có trên scene và hàm này sẽ trả về kiểu array.

+ Rồi ở LevelMap mấy child Level1,2,.. mình sẽ gán biến SoDiem đã làm ở phần trước bằng với điểm số ở trong script chứa dữ liêu.

Autoload script

Đây là 1 tính năng của Godot cho phép bạn biến 1 script nào đó thành script autoload tức là nó luôn luôn chạy cho dù bạn đang ở bất kỳ scene nào và có thể được truy cập ở mọi nơi.

[Tạo 2D Platformer Game với Godot] Phần 25: Thêm điểm số khi hết game

Bạn tao cho mình 1 script mới tên là PlayerData ở Scenes

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 55

Rồi vô Project -> project settings -> Autoload

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 56

Nhấn vô icon thư mục.

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 57

Tìm script vừa tạo[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 58 [Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 59Nhấn vô add và bạn sẽ thấy nó hiển thị ở ô bên dưới.

Add group scene đồng xu

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 60

Qua scene đồng xu

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 61

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 62 [Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 63Ở bên phải bên cạnh signals bạn nhán vô group rồi gõ tên group -> nhấn add để thêm node vô group

Map

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 64 [Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 65

Ở scene Map1 mình sẽ add thêm 1 Node2D để chứa các node DongXu để nhìn cho nó gọn.

Rồi mình chỉnh sao cho dễ để thu thập

Bạn chỉnh đồng xu bao nhiêu là tuỳ bạn nhé không nhất thiết phải giống mình.

Player

Ở script của Player bạn chỉ cần thêm cho mình 1 biến đó là:

onready var max_dongxu = get_tree().get_nodes_in_group("dongxu")

Biến này mình dùng để xác định tổng số lượng đồng xu có trong map.

PlayerData

Ở Script autoload Playerdata mà mình vừa tạo trên nãy thì mình thêm 1 biến thuộc Dictonary tên là điểm số và nó có trách nhiệm là mang điểm số của từng map.

extends Node


var diemso = {
    "Map1": 0,
    "Map2":0,
    "Map3:": 0,
}


EndLevelMenu

 

extends CanvasLayer



onready var level = get_parent().get_node("KhuVucDiChuyen")
onready var map = get_parent().name
onready var player = get_parent().get_node("Player")
var diemso 
func _on_NutLevelKeTiep_pressed():
    get_tree().paused = false
    get_tree().change_scene(level.LevelKeTiep)
    diemso = int(( float(player.dongxu) /player.max_dongxu) * 100)
    if diemso > PlayerData.diemso[map]: 
        PlayerData.diemso[map] = diemso
    pass # Replace with function body.

func _on_NutChoiLai_pressed():
    get_tree().paused = false
    get_tree().reload_current_scene()
    print("choi lai")
    pass # Replace with function body.


func _on_NutVeMenu_pressed():
    get_tree().paused = false
    get_tree().change_scene("res://Scences/Map/LevelMap.tscn")
    diemso = int(( float(player.dongxu) /player.max_dongxu.size()) * 100)
    if diemso > PlayerData.diemso[map]: 
        PlayerData.diemso[map] = diemso
    pass # Replace with function body.

Ở đây, mình khai báo thêm 3 biến là:

+ map: để mình xác định được tên của map mình đang chơi.

+ player: để mình có thể lấy được số lượng đồng xu đã thu thập và tổng số đồng xu trong map.

+ diemso: tính điểm số mà bạn đạt được.

func _on_NutLevelKeTiep_pressed():
    get_tree().paused = false
    get_tree().change_scene(level.LevelKeTiep)
    diemso = int(( float(player.dongxu) /player.max_dongxu) * 100)
    if diemso > PlayerData.diemso[map]: 
        PlayerData.diemso[map] = diemso

diemso = int(( float(player.dongxu) /player.max_dongxu) * 100): là công thức mình tính điểm số.

if diemso > PlayerData.diemso[map]: là mình check nếu như diemso của màn này mà lớn hơn điểm số đã có sẵn thì nó sẽ thêm điểm số này vào và ngược lại.

Mình sẽ làm tương tự như bên hàm NutVeMenu vì khi bạn show cái EndLevelMenu là bạn đã hoàn thành nó rồi cho nên thoát ra hay chơi tiếp đều tính và nếu như nhấn chơi lại thì không.

Level Script

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 66

Bạn qua cho mình cái scene Level ở LevelMap ấy.

Và ở hàm _process mình thêm 1 dòng để cập nhật điểm số.

SoDiem = PlayerData.diemso[MapName]

Mình sẽ có full code như bên dưới:

extends Control

export (String) var MapName
export (String,FILE) var Scene
export (String) var Level
onready var ngoisaovang = preload("res://Assets/LevelMap/3 UI/Star1.png")
var SoDiem = 0

func _ready():
    $SoLevel.text = Level
func _process(delta):
    SoDiem = PlayerData.diemso[MapName]
    if SoDiem >= 1 and SoDiem <= 30:
        $NgoiSao1.texture = ngoisaovang
    elif SoDiem >= 30 and SoDiem <= 95:
        $NgoiSao1.texture = ngoisaovang
        $NgoiSao2.texture = ngoisaovang
    elif SoDiem >= 95:
        $NgoiSao1.texture = ngoisaovang
        $NgoiSao2.texture = ngoisaovang
        $NgoiSao3.texture = ngoisaovang


func _on_HinhTron_pressed():
    get_tree().change_scene(Scene)
    pass # Replace with function body.

Kết quả

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 67

Vậy sau khi thu thập hết đồng xu mình thêm vào và quay về Level Mênu mình sẽ được 3 sao.

Lưu ý

Ở cái Menu ấy, bạn chỉnh code chỗ nút Bắt đầu, cái change_scene thành cái scene Level Map nha.

[Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 68 [Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 69 [Tạo 2D Platformer Game với Godot] Phần 26: Thêm điểm số khi hết game 70

Tổng Kết

Vậy là mình đã hướng dẫn xong bạn cách thêm số sao đạt được rồi, trong phần tiếp mình sẽ hướng dẫn bạn cách để khoá level lại và unlock level kế tiếp.

Tags: Godotlập trình gamethết kế game
Previous Post

Cách tự động chuyển tiếp Email trong Gmail

Next Post

Cách leo thang đặc quyền Linux bằng SUID

DeathGM

DeathGM

Related Posts

godot lap trinh game
Godot

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

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

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

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

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

08/12/2021
[Tạo 2D Platformer Game với Godot] Phần 27: Mở khoá level 75
Godot

[Tạo 2D Platformer Game với Godot] Phần 27: Mở khoá level

07/12/2021
[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 76
Godot

[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level

29/11/2021
[Tạo 2D Platformer Game với Godot] Phần 24: Tạo Pause Menu 77
Godot

[Tạo 2D Platformer Game với Godot] Phần 24: Tạo Pause Menu

28/11/2021
Next Post
Cách leo thang đặc quyền Linux bằng SUID 78

Cách leo thang đặc quyền Linux bằng SUID

guest
guest

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.

1 Comment
oldest
newest
Inline Feedbacks
View all comments
Robert Cell
Robert Cell
7 months ago

anh ơi sao nó bị lỗi Invalid get index ‘Map’ (on base Dictionary ) vậy ạ

Reply
wpdiscuz   wpDiscuz

Liên hệ Quảng Cáo

Lien he AnonyViet

Đối tác —

Fshare

Các bài mới

DDosify - Công cụ kiểm tra sức chịu tải DDoS của Website 79

DDosify – Công cụ kiểm tra sức chịu tải DDoS của Website

01/07/2022
Danh sách các lệnh Linux bạn cần phải biết 80

Danh sách các lệnh Linux bạn cần phải biết

30/06/2022
Cách ẩn Code HTML không cho người khác View Source 81

Cách ẩn Code HTML không cho người khác View Source

29/06/2022
Cách cài Windows 11 không cần tài khoản Microsoft bằng Rufus 82

Cách cài Windows 11 không cần tài khoản Microsoft bằng Rufus

28/06/2022
Cách xem lại mật khẩu Wifi trên Andorid, iPhone và máy tính 83

Cách xem lại mật khẩu Wifi trên Andorid, iPhone và máy tính

27/06/2022

Ads

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: anonyviet.com[@]gmail.com

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

 

Bản quyền: DMCA.com Protection Status

Bài viết mới

  • DDosify – Công cụ kiểm tra sức chịu tải DDoS của Website
  • Danh sách các lệnh Linux bạn cần phải biết
  • Cách ẩn Code HTML không cho người khác View Source
  • Cách cài Windows 11 không cần tài khoản Microsoft bằng Rufus
  • Cách xem lại mật khẩu Wifi trên Andorid, iPhone và máy tính
  • Anonymous tuyên bố sẽ đưa ‘tội ác’ của Do Kwon ra ánh sáng

©2022 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về Công nghệ. Google iwin888 Bing tải game iwin Github tải iwin apk Github tải win456 Youtube ku fun wikipedia 88vin reddit twin 92lottery sun86 stackoverflow tool tài xỉu 68 club 68 game bài

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

©2022 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về Công nghệ. Google iwin888 Bing tải game iwin Github tải iwin apk Github tải win456 Youtube ku fun wikipedia 88vin reddit twin 92lottery sun86 stackoverflow tool tài xỉu 68 club 68 game bài

wpDiscuz
pixel