• 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 12: Tiêu diệt kẻ thù

DeathGM by DeathGM
16/11/2021
in Godot
Reading Time: 5 mins read
A A
0

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

  1. Tiêu diệt kẻ thù
    1. Hitbox
      1. Add
      2. Script
  2. Hurtbox
    1.  Add
    2. Script

Trong phần này, mình sẽ hướng dẫn bạn cách để có thể tiêu diệt kẻ thù khi player tấn công nhé. Và trong phần sau thì mình sẽ hướng dẫn bạn cách để kẻ thù có thể tiêu diệt Player.

Tiêu diệt kẻ thù

Về đầu tiên, mình sẽ phải tạo 1 cái Area2D ở Scene Player và cái Area2D này sẽ luôn luôn tắt và chỉ được bật khi tấn công. Mình tạo thêm 1 cái gọi là hurtbox ở Scene kẻ thù và nếu như hitbox của Player được bật và va chạm với hurtbox của kẻ thù thì tức là Player đã đánh trúng kẻ thù và sau đó máu của kẻ thù sẽ bị trừ và < 0 thì sẽ biến mất.

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

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

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? 60

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

03/03/2022

Hitbox

Add

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù

Mình sẽ tạo thêm 1 cái Area2D ở Scene player và rename nó là Hitbox và add thêm CollisionShape2D

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 46

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 47

Sau đó chỉnh Shape cho bằng với chỗ tấn công ở animation tấn công.

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 48 [Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 49 [Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 50

Sau đó mình sẽ kết nối tín hiệu frame change vào script. Ở đây, mình kết nối cái này là do mình muốn biết nếu như đang ở trong animation tấn công mà nó đã tới frame cần bật hitbox thì mình sẽ bật nó.

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 51

Frame 3 là frame mà mình muốn bật hitbox.

Script

 

extends KinematicBody2D

var tocdo = 200
var trongluc = 10
var chuyendong = Vector2()
var huong_dichuyen = 1
onready var animation = $AnimatedSprite
var dangtancong = false

var satthuong = 10
func _physics_process(delta):
    
    if !dangtancong:
        huong_dichuyen = Input.get_axis("ui_left","ui_right")
        if huong_dichuyen != 0:
            chuyendong.x = lerp(chuyendong.x,huong_dichuyen * tocdo,0.5)
            animation.play("chay")
            scale.x = scale.y * huong_dichuyen
        else:
            chuyendong.x = lerp(chuyendong.x,0,0.5)
            animation.play("dungyen")

        if is_on_floor():
            if Input.is_action_just_pressed("ui_accept") :
                chuyendong.y = -250
        else:
            animation.play("nhay")
    if Input.is_key_pressed(KEY_J) and is_on_floor():
        dangtancong = true
        chuyendong.x = 0
        animation.play("tancong")
    
    chuyendong.y += trongluc 
    chuyendong.normalized()
    chuyendong = move_and_slide(chuyendong,Vector2.UP)


func _on_AnimatedSprite_animation_finished():
    if animation.animation == "tancong":
        dangtancong = false



func _on_AnimatedSprite_frame_changed():
    if animation.animation == "tancong":
        if animation.frame == 3:
            $Hitbox/CollisionShape2D.disabled = false
        else:
            $Hitbox/CollisionShape2D.disabled = true 
        

Ở bên trên là full code.

Mình khai báo 1 biến mới là : var satthuong = 10 tác dụng của nó thì xem tên nha.

Ở hàm frame change đoạn if animation.animation == "tancong": là mình kiểm tra nếu như đang là animation tấn công và if animation.frame == 3:là nếu như frame bằng 3 mình sẽ bật hitbox  và ngược lại.

Hurtbox

 Add

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 52

Bạn add cái Area2D và rename là Hurtbox + them CollisionShape2D

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 53

Về CollisionShape2D thì nó bằng với ColllisionShape2D của KinematicBody.

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 54 [Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 55 [Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 56

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 57

Sau đó thì kết nối cái tín hiệu cho nó, ở đây mình kết nối tín hiệu area_entered chứ không phải body entered là vì Hitbox nó là area2d chứ không phải là body.

Và kết nối để kiểm tra nếu như hitbox đi vào thì sẽ làm gì đó….

Script

extends KinematicBody2D


var tocdo = 80
var trongluc = 10
var chuyendong = Vector2()
var huong_dichuyen = 1
onready var animation = $AnimatedSprite
var dangtancong = false
var mau = 20
func _physics_process(delta):
	if dangtancong == false:
		chuyendong.x = tocdo * huong_dichuyen
		chuyendong.y += trongluc
		chuyendong = move_and_slide(chuyendong,Vector2.UP)
		animation.play("dichuyen")
		
		if $RayCast2D.is_colliding() == false:
			huong_dichuyen = huong_dichuyen * -1
			scale.x = scale.y * huong_dichuyen
		
		if is_on_wall() and $XacDinhPlayer.is_colliding() == false:
			huong_dichuyen = huong_dichuyen * -1
			scale.x = scale.y * huong_dichuyen
	
	var coll = $XacDinhPlayer.get_collider()
	if coll != null and coll.name == "Player" and dangtancong == false:
		dangtancong = true
		animation.play("tancong")
	if mau <= 0:
		animation.play("chet")


func _on_AnimatedSprite_animation_finished():
	if animation.animation == "tancong":
		dangtancong = false
	if animation.animation == "chet":
		queue_free()


func _on_Hurtbox_area_entered(area):
	if area.get_parent().name == "Player":
		mau -= area.get_parent().satthuong

Trên đây sẽ là full đoạn code của phần này.

Mình tạo 1 biến mới tên mau và đây là biến máu của kẻ thù.

Dòng  if area.get_parent().name == "Player": của area_entered là mình sẽ kiểm tra tên bố mẹ của area2D là Player thì mau sẽ -= satthuong của Player.

Và ở hàm Physics mình sẽ check nếu máu <= 0 thì chạy animation chết, và ở hàm animation finshed mình sẽ check nếu animation kết thúc là chết -> queue_free() ( đây là hàm giúp bạn xoá node khỏi tree ).

[Tạo 2D Platformer Game với Godot] Phần 12: Tiêu diệt kẻ thù 58

Đây là kết quả cuối cùng.

 

 

 

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

[Tạo 2D Platformer Game với Godot] Phần 11: Tấn công của kẻ thù

Next Post

[Tạo 2D Platformer Game với Godot] Phần 13: Tiêu diệt Player

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 61
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 62
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 63
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 26: Thêm điểm số khi hết game 64
Godot

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

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

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

29/11/2021
Next Post
[Tạo 2D Platformer Game với Godot] Phần 13: Tiêu diệt Player 66

[Tạo 2D Platformer Game với Godot] Phần 13: Tiêu diệt Player

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.

0 Comments
Inline Feedbacks
View all comments

Liên hệ Quảng Cáo

Lien he AnonyViet

Đối tác —

Fshare

Các bài mới

CTF là gì? Muốn làm Hacker có nên chơi CTF? 67

CTF là gì? Muốn làm Hacker có nên chơi CTF?

21/05/2022
khoa hoc Hacker mu trang - Masters In Ethical Hacking

Tải khóa học Hacker mũ trắng – Masters In Ethical Hacking

20/05/2022
Cách ẩn nhà của bạn khỏi Google Maps 68

Cách ẩn nhà của bạn khỏi Google Maps

19/05/2022
tao tai khoan vcb bang sdt

Cách Tạo tài khoản Vietcombank theo Số điện thoại miễn phí

18/05/2022
Mip22 - tạo trang Phishing cho Linux và Android

Mip22 – Công cụ tạo trang Phishing cho Linux và Android

18/05/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

  • CTF là gì? Muốn làm Hacker có nên chơi CTF?
  • Cách giao dịch Ngoại Hối
  • Tải khóa học Hacker mũ trắng – Masters In Ethical Hacking
  • Cách ẩn nhà của bạn khỏi Google Maps
  • Cách Tạo tài khoản Vietcombank theo Số điện thoại miễn phí
  • Mip22 – Công cụ tạo trang Phishing cho Linux và Android

©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 567LIVE MMLive 92lottery sun86 stackoverflow

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 567LIVE MMLive 92lottery sun86 stackoverflow

wpDiscuz
pixel