In this part I will show you how to set up attack on enemies and in the next part I will show you how to damage/kill enemies, player.
| Join the channel Telegram of the AnonyViet 👉 Link 👈 |
Attack setting
![[Tạo 2D Platformer Game với Godot] Part 11: Attack of the enemy 12 [Tạo 2D Platformer Game với Godot] Part 10: Attack of the Enemy](https://anonyviet.com/wp-content/uploads/2021/11/13-11-2021-10-47-03.png)
In the previous section, I showed you how to set up the enemy and in it the above code is used to determine when it meets the wall and it will turn around.
But here when it meets the Player, it also turns around so we have to determine that when it hits the wall and it’s not the Player, it will turn around.
And vice versa, if I collide with a wall and it’s a Player, I’ll make the enemy’s child attack.
Add node
![[Tạo 2D Platformer Game với Godot] Part 11: Attack of the Enemy 13 [Tạo 2D Platformer Game với Godot] Part 11: Attack of the enemy 9](https://anonyviet.com/wp-content/uploads/2021/11/13-11-2021-10-50-59.png)
You add yourself a raycast node named XacDinhPlayer (this raycast node I use to determine if the Player is standing in front of the enemy, it will attack).
![[Tạo 2D Platformer Game với Godot] Part 11: Attack of the Enemy 14 [Tạo 2D Platformer Game với Godot] Part 11: Enemy's Attack 10](https://anonyviet.com/wp-content/uploads/2021/11/13-11-2021-11-03-12.png)
Done, you adjust to horizontal and the raycast arrow should not collide with CollisionShape2D.
You turn it on and adjust the Cast To.
var dangtancong = false
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")
I will have the same code as Player’s attack.
I omitted the moving part if dangtancong == false: is to move if not in attack mode and vice versa.
Current if is_on_wall() and $XacDinhPlayer.is_colliding() == false: then i add $XacDinhPlayer.is_colliding() == false is to determine that when it encounters a wall, if it’s a Player, it doesn’t rotate and vice versa.
Current var coll = $XacDinhPlayer.get_collider() I will create a variable and assign it as $XacDinhPlayer.get_collider() là jaw get_collider() allow me to identify RayCast which node is colliding with, I will assign the colliding node to the coll variable.
Current if coll != null and coll.name == "Player" and dangtancong == false: I check if col has been assigned with a node and the name is “Player” and not in attack state, it will perform the attack.
func _on_AnimatedSprite_animation_finished():
if animation.animation == "tancong":
dangtancong = false
![[Tạo 2D Platformer Game với Godot] Part 11: Attack of the Enemy 17 [Tạo 2D Platformer Game với Godot] Part 11: Attack of the Enemy 13](https://anonyviet.com/wp-content/uploads/2021/11/13-11-2021-11-12-15.png)
I thought it was similar to the Player side, I needed to add a function to determine when the animation ended dangtancong = false by connecting the signal.
![[Tạo 2D Platformer Game với Godot] Part 11: Attack of the enemy [Tạo 2D Platformer Game với Godot] Part 11: Attack of the enemy](https://anonyviet.com/wp-content/uploads/2021/11/13-11-2021-11-01-23.png)
And this is the final result.
Summary
So I’ve finished showing you how to do it, if you have any questions, please Join Godot Community Group VN or Anonyviet Community for answers,








