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
Mì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.
Đâ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ù.
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