I was working on a game with python and I wanted to add a feature that whenever a key is pressed rotate the player image according to which key, but the self.rotation
variable never updates
player class code:
import pygame
from physics import Movement
class Player():
def __init__(self, x, y, width, height, skin):
self.x = x
self.y = y
self.rotation = 0
self.width = width
self.height = height
self.rect = (x, y, width, height)
self.speed = 3
self.skin = skin
def draw(self, win, skin):
self.rotation = Movement.rotate(self, self.rotation)
print(self.rotation)
player = pygame.transform.rotate(skin.convert_alpha(), self.rotation)
win.blit(player, self.rect)
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] or keys[pygame.K_a]:
self.x -= self.speed
if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
self.x += self.speed
if keys[pygame.K_UP] or keys[pygame.K_w]:
self.y -= self.speed
if keys[pygame.K_DOWN] or keys[pygame.K_s]:
self.y += self.speed
self.update()
def update(self):
self.rect = (self.x, self.y, self.width, self.height)
physics class code:
import pygame
class Movement():
def rotate(self, rotation):
self.rotation = rotation
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
if self.rotation < 90 and self.rotation > 0:
self.rotation += 5
if keys[pygame.K_DOWN] or keys[pygame.K_s]:
if self.rotation < 180 and self.rotation > 90:
self.rotation += 5
if keys[pygame.K_LEFT] or keys[pygame.K_a]:
if self.rotation < 270 and self.rotation > 180:
self.rotation += 5
if keys[pygame.K_UP] or keys[pygame.K_w]:
if self.rotation < 360 and self.rotation > 270:
self.rotation += 5
return self.rotation
game code:
import pygame
from Network import Network
pygame.font.init()
pygame.init()
width = 700
height = 600
fps = 60
current_id = 0
img = pygame.image.load('game_background.png')
win = pygame.display.set_mode((width, height))
pygame.display.set_caption("Astro party")
info_font = pygame.font.SysFont("Verdana", 26)
player_list = {}
player_count = 0
loaded_skins = {}
n = Network()
name = 'Player'
NAME_FONT = pygame.font.SysFont("comicsans", 24)
def redrawWindow(win, players, id):
global player_count
win.blit(img.convert(), (0, 0))
for player in players:
p = players[player]
if player_count < len(players):
skin = pygame.image.load(p['skin'])
loaded_skins[player] = skin
p['player'].draw(win, loaded_skins[player])
text = NAME_FONT.render(p["name"], 1, (0,0,0))
win.blit(text, (p['player'].x - text.get_width()/2, p['player'].y - text.get_height()/2))
player_count = len(players)
def main(name):
global win, width, height
run = True
n = Network()
clock = pygame.time.Clock()
current_id = n.connect(name)
player_list = n.send("get")
while run:
clock.tick(fps)
player_list = n.send("get")
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
player_list[current_id]['player'].move()
data = player_list
n.send(data, pick=True)
redrawWindow(win, player_list, current_id)
pygame.display.update()
n.disconnect()
pygame.quit()
quit()
main(name)
So I was trying to ratote the player image whenever the player clicks a specific key, and I tried printing self.rotation, but it never updates.