I'm currently trying to run my code in the main GameScene by drawing a PlayerPaddle. I'm currently refactoring my code by using Sprites. Right now, I'm getting errors saying my PlayerPaddle object has no attribute centery. If I comment that line out, then I'm getting how other attributes, such as centerx and rect are also not attributes, though I'm not sure how to fix self.rect.center with sprites...
Here is the PlayerPaddle class, which inherits from the Paddle Class, which inherits from the Image class.
class Image(pygame.sprite.Sprite):
def __init__(self, screen_size, color=(255,0,0)):
super().__init__()
self.screen_size = screen_size
self.angle = 0
self.dir = 0
self.original_image = pygame.image.load('naruto.png').convert()
self.colorkey = self.original_image.get_at((0,0))
self.original_image = pygame.transform.scale(self.original_image, (20, 100))
self.update()
Paddle Class
class Paddle(Image):
def __init__(self, screen_size, color = (255,0,0)):
super().__init__(screen_size, color = (255, 0, 0))
def update(self):
super().update()
def Render(self, screen_size):
super().draw(screen_size)
PlayerPaddle class
class PlayerPaddle(Image):
def __init__(self, screen_size, color = (255,0,0)):
self.rect.centerx = 10
self.rect.centery = screen_size[1] // 2
self.height = 100
self.width = 20
self.speed = 3
self.direction = 0
super().__init__(screen_size, color = (255, 0, 0))
def update(self):
super().update()
self.centery += self.direction*self.speed
#self.rect.centery += self.direction*self.speed
self.rect.center = (self.centerx, self.centery)
if self.rect.top < 0:
self.rect.top = 0
if self.rect.bottom > self.screen_size[1]-1:
self.rect.bottom = self.screen_size[1]-1
def draw(self, screen_size):
super().draw(screen_size)
Finally, here is my GameScreen, which inherits from a Scene Class(not pictured). This is where I create my objects and define all the events and updates.
class GameScreen(SceneBase):
def __init__(self):
SceneBase.__init__(self)
self.player_paddle = classes.PlayerPaddle(screen_size)
self.my_font = pygame.font.SysFont("Arial", 50)
def ProcessInput(self, events, pressed_keys):
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.player_paddle.direction = -1
elif event.key == pygame.K_DOWN:
self.player_paddle.direction = 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP and self.player_paddle.direction == -1:
self.player_paddle.direction = 0
elif event.key == pygame.K_DOWN and self.player_paddle.direction == 1:
self.player_paddle.direction = 0
def Update(self):
self.player_paddle.update()
def Render(self):
screen.fill(WHTIE)
self.player_paddle.Render(screen)
def SwitchToScene(self, next_scene):
self.next = next_scene
I'm not sure why I'm returning attribute errors, since I defined attributes in the PlayerPaddle class, such as self.centerx and self.centery. Also, how do I deal with self.rect.center with the case of my code? Thanks and much appreciation.
Traceback (most recent call last):
File "C:\Users\matth\OneDrive\Documents\15-112\Term Project\TP3Pong\run_game.py", line 50, in <module>
run_game(1200, 800, 64, scenes.GameScreen())
File "C:\Users\matth\OneDrive\Documents\15-112\Term Project\TP3Pong\scenes.py", line 94, in __init__
self.player_paddle = classes.PlayerPaddle(screen_size)
File "C:\Users\matth\OneDrive\Documents\15-112\Term Project\TP3Pong\classes.py", line 172, in __init__
self.rect.centerx = 10
AttributeError: 'PlayerPaddle' object has no attribute 'rect)