2016-06-10 3 views
0

У меня игра подошла и отобразился прямоугольник. Когда я нажимаю свой KEYDOWN, он не перемещает прямоугольник, он просто делает его длиннее. Я пробовал тонны вещей. Я новичок в Pygame.
Любая помощь будет потрясающей.Перемещение рисованного прямоугольника

Вот код:

import pygame 
import time 
import random 
import math 
import sys 


pygame.init() 

display_width = 1200 
display_height = 800 
white = (255,255,255) 
black = (0,0,0) 



gameDisplay = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption('Vertical Pong') 
clock = pygame.time.Clock() 


def pongBoard(x,y,): 
    pygame.draw.rect(gameDisplay,white,(x,y,250,25)) 


def gameLoop(): 

    x = 325 
    y = 750 
    xChange = 0 



    inGame = True 

    while inGame: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       sys.exit() 

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_a or event.key == pygame.K_LEFT: 
        xChange = -5 
        print("Left") 
      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_d or event.key == pygame.K_RIGHT: 
        xChange = 5 
        print("Right") 
      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_d or event.key == pygame.K_RIGHT: 
        xChange = 0 
      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_a or event.key == pygame.K_LEFT: 
        xChange = 0 

     pongBoard(x,y) 

     x += xChange 






     pygame.display.update() 
     clock.tick(60) 




gameLoop() 
pygame.quit() 
quit() 

ответ

0

Таким образом, проблема заключается в следующем: Прямоугольник постоянно перерисовывать в другом коорд, но экран не разыгрывается над прямоугольником, чтобы прикрыть ту часть, которая не должно быть там. Проще говоря, нам нужно постоянно рисовать фон.

Так что теперь код в главном цикле игры:

while inGame: 
    #This code below draws the background 
    pygame.draw.rect(gameDisplay, black, (0, 0, display_width, display_height)) 

То есть! Фон будет постоянно закрывать мяч для понга, а мяч для понга будет постоянно близок к новому положению!

P.S, есть лучший способ сделать Стрелка вправо движение здесь: How to get keyboard input in pygame?

+0

Это делает общий смысл! Итак, когда я перемещаю объекты, они фактически не перемещают местоположение объекта? Его просто рисует новый объект, а затем обновляет фон, чтобы скрыть последнюю позицию? Спасибо огромное! – bworley90

+0

Yup! Вот как вы это делаете. Есть более сложные дела, но это обычный метод в pygame. – Demandooda

+0

Спасибо, что нашли время ответить – bworley90

0

это actualy вертится, но старый один раз остается там, что делает его похожим он не двигается, но только растет. один из способов, чтобы изменить это было бы изменить старый цвет один на цвет фона

попробовать этот код работает :-)

import pygame 
import time 
import random 
import math 
import sys 


pygame.init() 

display_width = 1200 
display_height = 800 
white = (255,255,255) 
black = (0,0,0) 
red = (123,11,45) 



gameDisplay = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption('Vertical Pong') 
clock = pygame.time.Clock() 


def pongBoard(x,y,xold): 
    pygame.draw.rect(gameDisplay,white,[x,y,250,25]) 
    pygame.draw.rect(gameDisplay,red,[xold,y,250,25]) 


def gameLoop(): 

    x = 325 
    y = 750 
    xChange = 0 



    inGame = True 

    while inGame: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       sys.exit() 

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_a or event.key == pygame.K_LEFT: 
        xChange = -50 
        pongBoard(x,y,xold) 
        print("Left") 
      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_d or event.key == pygame.K_RIGHT: 
        xChange = 50 
        pongBoard(x,y,xold) 
        print("Right") 
      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_d or event.key == pygame.K_RIGHT: 
        xChange = 0 
      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_a or event.key == pygame.K_LEFT: 
        xChange = 0 
     xold = x 

     x += xChange 
     xold = x-xChange 






     pygame.display.update() 
     clock.tick(60) 




gameLoop() 
pygame.quit() 
quit() 
+0

большое спасибо! работает отлично! – bworley90

Смежные вопросы