Thứ Năm, 18 tháng 11, 2021

Published tháng 11 18, 2021 by Admin with 0 comment

[Tạo 2D Platformer Game với Godot] Phần 15: Thêm animation bị thương cho Player

Trong phần này mình sẽ thêm add thêm animation bị thương cho Player còn về kẻ thù thì đã thêm ở phần trước, phần này thì cũng dễ tương tự như phần trước thôi.

Animation bị thương

Thêm animation

Ở phần thiết kế nhân vật thì mình chưa thêm animation bị thương vào cho nên bạn sẽ thêm vào cho mình nhé.

[Tạo 2D Platformer Game với Godot] Phần 15: Thêm animation bị thương cho player

Add cho mình 1 animation tên là bithuong rồi các bạn sẽ tự add lại chứ  mình không hướng dẫn và cũng như ôn lại kiến thức.

Sau đó thì tắt loop luôn nha.

Áp dụng animation

Thì như đã nói ở đâu bài, cách hoạt động của nó cũng không khác gì với phần trước cả.

Mình sẽ tạo 1 biến là bithuong để kiểm tra đang bị thường hay không sau đó khi bị kẻ thù tấn công thì bithuong = true, dangtancong = false để nếu mà bị kẻ thù tấn công nó sẽ không tấn công nữa mà chạy animation bị thương và chạy animation bị thương. Và mình cũng check thêm ở các điều kiện khác.

Sau đó nếu kết thúc Animation bị thương thì bithuong = false

var bithuong = false

Biến bị thương nè.

func _on_Hurtbox_area_entered(area):
if area.name == "Hitbox" and area.get_parent().dangtancong == true:
mau -= area.get_parent().satthuong
dangtancong = false
bithuong = true
animation.play("bithuong")

Nếu như bị đánh thì dangtancong = false, bithuong = true và chạy animation bị thương.

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

Check nếu animation bị thương kết thúc thì biến bithuong = false.

if !dangtancong and not bithuong:
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")

Thêm điều kiện vào để khi bị thương thì mình không thể di chuyển cho đến khi nó kết thúc.

if Input.is_key_pressed(KEY_J) and is_on_floor():
if not bithuong:
dangtancong = true
chuyendong.x = 0
animation.play("tancong")

Kiểm tra khi nhấn phím tấn công và không trong trạng thái bị thường thì tấn công.

extends KinematicBody2D

var tocdo = 200
var trongluc = 10
var chuyendong = Vector2()
var huong_dichuyen = 1

onready var animation = $AnimatedSprite
var dangtancong = false
var bithuong = false

var mau = 20
var satthuong = 10

func _physics_process(delta):

if !dangtancong and not bithuong:
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():
if not bithuong:
dangtancong = true
chuyendong.x = 0
animation.play("tancong")

chuyendong.y += trongluc
chuyendong.normalized()
chuyendong = move_and_slide(chuyendong,Vector2.UP)

if mau <= 0:
set_physics_process(false)
animation.play("chet")
$CollisionShape2D.disabled = true
func _on_AnimatedSprite_animation_finished():
if animation.animation == "tancong":
dangtancong = false
if animation.animation == "bithuong":
bithuong = false
func _on_AnimatedSprite_frame_changed():
if animation.animation == "tancong":
if animation.frame == 3:
$Hitbox/CollisionShape2D.disabled = false
else:
$Hitbox/CollisionShape2D.disabled = true

func _on_Hurtbox_area_entered(area):
if area.name == "Hitbox" and area.get_parent().dangtancong == true:
mau -= area.get_parent().satthuong
dangtancong = false
bithuong = true
animation.play("bithuong")

Và mình có full code của phần này như trên.

[Tạo 2D Platformer Game với Godot] Phần 15: Thêm animation bị thương cho Player 16

Và mình có kết quả cuối cùng.

Tổng Kết

Vậy trong phần này mình đã hướng dẫn bạn cách để có thể sử dụng animation bị thương cho nhân vật.

Adblock test (Why?)


Xem Them Chi Tiet

Nhung Mon Do Cong Nghe Duoc Yeu Thich

Do Cong Nghe Phu Kien
Xem Them Chi Tiet

Phu nu phai dep dan ong moi yeu! Sam ngay bo vay dam sieu dep

Thanh xuan nhu mot tach trá Khong mua do hot phi hoai thanh xuan
      edit

0 Comments:

Đăng nhận xét