This is tutorial number 3 in the Pygame RPG series
The most important class in this RPG tutorial is the Player class. This class is responsible for almost everything player related, including movement, attacking, collision detection, rendering, state tracking and many more.
Due to it’s total size and many concepts, we’ll be building up the Player class slowly over the rest of the tutorial series. In this tutorial and the next, we’ll focus on creating the base code for the Player class.
Creating the Player Class
If you’ve been through our previous tutorial on Backgrounds, you’ll know what the
self.rect variables are storing (image and rect object respectively).
class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.image.load("Player_Sprite_R.png") self.rect = self.image.get_rect() # Position and direction self.vx = 0 self.pos = vec((340, 240)) self.vel = vec(0,0) self.acc = vec(0,0) self.direction = "RIGHT"
Now for the variables for position and direction.
self.direction is used to store the current direction of the Player. By default we have kept the player facing right.
The other three variables,
self.acc are created using the vector object we created in the first tutorial. What this means is that these variables now have two components which can be accessed in the following format,
self.pos.y. It’s a useful way of keeping both components in a single variable, instead of two separate ones.
As to purpose of these three variables,
self.pos is for the position of the player.
self.vel is for the velocity of the player and
self.acc is for the acceleration of the player. (If you’ve studied Physics, you should know that velocity and acceleration have vertical and horizontal components)
Creating the remaining functions
We’ll be covering the remaining functions later on in this series, in the appropriate tutorials. For now just remember that they exist and what their purpose is going to be (move for movement code, attack for attacking code).
def move(self): pass def update(self): pass def attack(self): pass def jump(self): pass
Once again, we use the
pass keyword as a place holder. Leaving the function blank will cause an error after all. Also keep the indentation of the methods in mind. Incorrect indentation will result in the methods not being part of the Player class.
Creating the player object
Once we’re done with class, we have to actually create the player object through which all interaction will take place. The fact that you can create multiple objects from the same class also opens up the possibility of creating a two player game.
player = Player()
Remember to declare this before the game loop, and not within it.
Finally, we need to render our player. We’ll be adding the following line of code, “after” the rendering of both the ground and background. All these render functions are of course, in the game loop since they need to be redrawn every frame.
background.render() ground.render() displaysurface.blit(player.image, player.rect)
We don’t “have” to create a render function. We’ve showcased this by directly writing the
blit() method for the player. Also this time we just passed
blit(), which works because
rect stores a pair coordinates.
Below is a screen shot of our Player sprite in the pygame window.
The reason why our player is at the top left corner is because we didn’t pass a
center = (x,y). Because of this, the player rect defaults to a value of (0 , 0). This problem will be solved later on in the series, so don’t worry.
This tutorial was just the intro to the Player class. We’ll be slowly building both the game and the Player class over the next 4 – 5 tutorials, so pay close attention.
The button below is a download link for the Player sprite image.
This marks the end of the Player Class tutorial of our Pygame RPG tutorial series. Any suggestions or contributions for CodersLegacy are more than welcome. Questions regarding the article content can be asked in the comments section below.