Breaking

Minggu, 14 November 2021

[Tạo 2D Platformer Game với Godot] Phần 10: Tấn công của Player

Trong phần này thì mình sẽ hướng dẫn bạn cách để làm cho nhân vật tấn công và lập trình cho kẻ thù có thể xác định được Player để có thể tấn công ở phần sau nha.

Thiết lập tấn công

func _physics_process(delta):

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):
animation.play("tancong")

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

Trên đoạn code trên mình vừa thêm vào 2 dòng cơ bản để bạn có thể chạy Animation tấn công và mình đảm bảo chắc sẽ có nhiều bạn nghĩ nó hoạt động nhưng thực chất là KHÔNG đoạn code trên sẽ không thể hoạt động.

Nếu như bạn nhấn phím J để chạy animation tấn công thì sẽ không thể vì là animation hiện tại đang được sử dụng và animation sử dụng nó là dungyen.

var dangtancong = false
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)

Và mình sẽ có đoạn code trên.

Ở đây mình tạo 1 biến mới là  var dangtancong= false biến này dùng để xác định rằng mình có đang thực hiện việc tấn công hay không

Mình bỏ toàn bộ đoạn di chuyển vào nhảy trong if !dangtancong: là vì mình sẽ kiểm tra nếu như mình đang không tấn công thì có thể di chuyển bình thường còn nếu đang tấn công thì code bên trong không chạy và bạn sẽ không thể di chuyển hay chạy trong khi đang tấn công.

Ở  dòng if Input.is_key_pressed(KEY_J) and is_on_floor(): :

+ Mình thêm is_on_floor() là để muốn chắc chắn rằng mình không thể tấn công khi đang nhảy.

+ mình sẽ set dangtancong thành true để báo hiệu mình đang thực hiện anim tấn công.

+ mình để chuyendong.x = 0 là để dừng lại và thực hiện anim tấn công, bạn không thể vừa chạy mà vừa tấn công được.

Khi tới đây mình còn thiếu 1 thứ đó là đưa biến dangtancong về false khi kết thúc animation tấn công.

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

[Tạo 2D Platformer Game với Godot] Phần 10: Tấn công [Tạo 2D Platformer Game với Godot] Phần 10: Tấn công của Player 19Mình sẽ có thêm 1 hàm nữa và hàm này được kết nối signal từ node AnimatedSprite

extends KinematicBody2D

var tocdo = 200
var trongluc = 10
var chuyendong = Vector2()
var huong_dichuyen = 1
onready var animation = $AnimatedSprite
var dangtancong = false
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

Vậy mình sẽ có toàn bộ code là như trên.[Tạo 2D Platformer Game với Godot] Phần 10: Tấn công của Player 20

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

Tổng Kết

Ở phần tiếp, mình sẽ hướng dẫn bạn cách để có thể thiết lập tấn công trên kẻ thù.

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

Tidak ada komentar:

Posting Komentar

close