2017-08-22 2 views
-3

J'essaye de déplacer ce rectangle pour faire du Pong. Je l'avais travaillé avant mais j'ai foiré le code. Quelqu'un pourrait-il m'aider à le faire bouger et peut-être rendre mon code plus propre?Le bloc ne peut pas bouger

Encore une fois, je l'ai fait bouger, mais le problème semble être dans la méthode Update.

Peut-être le paramètre ScreenSide ??? ...

import pygame, sys, random 
from pygame.locals import * 
pygame.init() 
screen_width = 800 
screen_height = 600 
screen = pygame.display.set_mode((800, 600)) 
rectImg1 = 'Rect.jpg' 
rectImg2 = 'Rect2.jpg' 

RIGHT = "RIGHT" 
LEFT = "LEFT" 

WHITE = (255,255,255) 
FPS = 30 
PADDLE_SPEED = 5 
BALL_SPEED = 10 
fpsClock = pygame.time.Clock() 
xPos = 0 
yPos = 0 
leftY = 20 
rightY = 20 
class Paddle(pygame.sprite.Sprite): 
    def __init__(self, screenSide): 
     pygame.sprite.Sprite.__init__(self) 
     self.screenSide = screenSide 
     if self.screenSide == LEFT: 
      self.image = pygame.image.load(rectImg1).convert_alpha() 
      self.rect = self.image.get_rect() 
      self.rect.x = 20 
      self.rect.y = 20 
    def update(self): 
     if self.screenSide == LEFT: 
      self.y = leftY 
allSpritesGroup = pygame.sprite.Group() 

paddle = Paddle(LEFT) 

allSpritesGroup.add(paddle) 

#code to make it move 
while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
    if paddle.screenSide == LEFT: 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_s: 
       paddle.y += PADDLE_SPEED 
      elif event.key == pygame.K_w: 
       paddle.y -= PADDLE_SPEED 
     elif event.type == pygame.KEYUP: 
      if event.key == pygame.K_s or event.key == pygame.K_w: 
       paddle.y == 0 
    screen.fill((255,255,255)) 

    allSpritesGroup.draw(screen) 
    allSpritesGroup.update() 
    pygame.display.flip() 
    fpsClock.tick(FPS) 
pygame.quit() 
+2

Veuillez ajouter des détails sur ce que fait le code et quelle est la sortie désirée. – Antimony

Répondre

0

Juste une supposition, mais votre problème pourrait être:

elif event.type == pygame.KEYUP: 
    if event.key == pygame.K_s or event.key == pygame.K_w: 
     paddle.y == 0 

Cela ressemble plus à une comparaison et sinon vous » re régler le y sur 0 à chaque fois que vous relâchez une touche.

En outre, vous avez raison sur la fonction de mise à jour:

def update(self): 
    if self.screenSide == LEFT: 
     self.y = leftY 

Vous y mettre constamment le 20 donc il ne se déplace pas depuis à chaque fois qu'il met à jour son passé à 20.

0

Votre gestion des événements est cassée. Les événements KEYDOWN et KEYUP sont en dehors de la boucle d'événement à cause de cette ligne if paddle.screenSide == LEFT:. Vous devez également mettre à jour paddle.rect.y et non paddle.y et vous devriez le faire dans la classe non avec des variables globales. Je donnerais aux palettes un attribut self.y_speed que vous définissez dans la boucle d'événement et ensuite l'utiliser pour mettre à jour la position self.rect.y chaque image dans la méthode update. Supprimez les vérifications screenSide et transmettez simplement l'image et la position aux sprites pendant l'instanciation.

import sys 
import pygame 


pygame.init() 
screen = pygame.display.set_mode((800, 600)) 
screen_rect = screen.get_rect() 

rectImg1 = pygame.Surface((30, 50)) 
rectImg1.fill((20, 20, 120)) 
rectImg2 = pygame.Surface((30, 50)) 
rectImg2.fill((120, 10, 20)) 

WHITE = (255,255,255) 
FPS = 30 
PADDLE_SPEED = 5 
fpsClock = pygame.time.Clock() 


class Paddle(pygame.sprite.Sprite): 

    def __init__(self, image, pos): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = image 
     self.rect = self.image.get_rect(topleft=pos) 
     self.y_speed = 0 

    def update(self): 
     self.rect.y += self.y_speed 


allSpritesGroup = pygame.sprite.Group() 

paddle = Paddle(rectImg1, (20, 20)) 
paddle2 = Paddle(rectImg2, (750, 20)) 
allSpritesGroup.add(paddle, paddle2) 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_s: 
       paddle.y_speed = PADDLE_SPEED 
      elif event.key == pygame.K_w: 
       paddle.y_speed = -PADDLE_SPEED 
     elif event.type == pygame.KEYUP: 
      if event.key == pygame.K_s or event.key == pygame.K_w: 
       paddle.y_speed = 0 

    allSpritesGroup.update() 

    screen.fill(WHITE) 
    allSpritesGroup.draw(screen) 
    pygame.display.flip() 
    fpsClock.tick(FPS)