In this article I will guide you to create enemies for our characters by Godot game programming. The enemy will make the character lose blood or you have to fight the enemy. And this part has some parts that can be very very difficult and unsuccessful, so you guys should prepare yourself mentally.
Join the channel Telegram belong to AnonyViet 👉 Link 👈 |
And here we go.
Creating Enemies in Godot
First we will create a button KinematicBody2D rename to enemy. LIVE enemy > more AnimatedSprite because it is type 1 and Collision for it as normal.
If you are using anonyviet's assets, there are enemy assets at: asset-player > NPC > enemy assets
Choose any one.
Create SpriteFrame new
Create Animation is move
Here is a blurry photo, please import it again.
I reimported it and it looks better.
Next set collision for it, here I set below not above so that the top part can let the character jump up and destroy it.
Lock it and create a new script and this script will be named enemy
We will create the following variables.
const vitri = 1 const chuyendong = vector2 const tocdo = tùy bạn const trongluc = tùy bạn const FLOOR = Vector2(0,-1)
Here const is the command used to lock the number, meaning when you declare a variable with const, it will lock that number and its value can never be edited.
Physical motion code
Next we will create the physical motion function
And will code as follows
Assign x-axis movement = with speed * with vitri (* positive speed will be on the right and negative speed will be on the left)
Call the animation just created above: $AnimatedSprite.play(“tênanmation’)
Assign chuyendong trục y += trongluc
And call the move_and_slide command so the enemy can move.
And here we will need a function to let the enemy detect the wall and it will move back.
For example: The enemy moves to the wall, then detects that wall and it will move back. It's like when you reach the wall, you will turn around, it's that simple.
And we will use the if command to check the wall: if is_on_wall():
inside if wall will be: vitri = vitri * -1
You have seen above tocdo * vitri
then positive speed will be on the right and negative speed will be on the left so when vitri * with -1 then it will reverse and the enemy will move backwards when it hits the wall and vice versa if it hits the right.
And it worked, but you notice that our enemy doesn't change direction but stays in one direction. Now we'll fix it.
You code as follows
if vitri == 1:
(vitri = 1 = positive number which positive number = move to the right)
$AnimatedSprite.flip_h = false
(flip_h is the command used to rotate the sprite to the right or left)
else:
(opposite of the above)
$AnimatedSprite.flip_h = true
(flip_h = false means it will not rotate and will stay the same, true = otherwise)
And it moved back
Okay, so that's part 1 of creating enemies for the character. Part 2 will help you code enemies to move back and forth on the map as shown below.
When you create those blocks the enemy won't move back and forth and that's why there will be Part 2.
And Part 3 will help you create, hp, damage for enemies^^.