In this article, I will guide you how to create enemies for our characters Godot game programming. Enemies will cause the character to lose health or you will have to fight the enemy. And this part has a few parts that may be very difficult and unsuccessful, so please prepare yourself mentally.
Join the channel Telegram belong to AnonyViet 👉 Link 👈 |
And let's get started.
Create enemies
First create a new Sence and include the child node's 2D kinematicbody AnimatedSprite and CollsionShape2D then press Ctrl + S stay.
If you are using anonyviet assets, there are enemy assets at: asset-player > NPC > enemy assets
Choose any one.
Create a new SpriteFrame
Creating Animation is move
If your photo is blurry Import come again
Next set collision for it, here I set it below and not above so that the upper 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 additional variables later
var Vitri = 1 var vantoc = Vector2.ZERO //hoặc Vector2() đều giống như nhau var Tocdo = tùy bạn var Trongluc = tùy bạn var FLOOR = Vector2(0,-1)
Here const is the command used to lock the number, meaning that when you declare a variable with const, it will lock that number and its value can never be edited.
Next we will create the physical motion function
And will code as follows
Assign gravity to it
vantoc.y = trongluc
Assign speed to it
vantoc.x += tocdo * delta * vitri
(Here * delta to reduce enemy speed)
Add move_and_slide statement to make it moveable
vantoc = move_and_slide(vantoc)
Next you will instance it outside our sense:
And instance it
Run the game and you will see it move
Here, I have the collsionshape visible mode, so there's nothing
Next we will code it to move left, and animate
And here I will have a command:
if is_on_wall()
: is_on_wall() is a statement that returns true if the Body is on the Wall, and it only executes when called with move_and_slide
And next below if is_on_wall() we will code one more line:
vitri = vitri * -1
and this line when it touches something vitri is 1 then it will * -1 and it will move backwards
Oh, and if you run the game and see the character running slowly, check if move_and_slide has FLOOR. If not, add it. If it's there and it's still slow, adjust the speed to about 20-30.
And next we will code the animation for it
if vitri == 1: $AnimatedSprite.flip_h = false else: $AnimatedSprite.flip_h = true
The 2 lines above are the 2 lines that will change the image of the enemy, flip_h = false
The image will flip to the right flip_h = true
is to the left
if vitri == 1
: means the position is equal to 1 and = 1 then it will move to the right but our enemy moves to the right first so flip_h will = false
And vice versa
Then you call animation move for me
$AnimatedSprite.play("Move")
Mine is fine after running the game
And in the next lesson, I will guide you to create raycast so that enemies can move on the tilemap as shown below without falling.