Я занимаюсь разработкой своего первого приложения Pygame в форме клона брекера.Для весла игрока я проверяю удержания клавиш в основном игровом цикле, а затем перерисовываю спрайт объекта игрока в каждом кадре, как показано во фрагменте кода ниже:
class Player():
def __init__(self):
self.sprite = pg.transform.scale(pg.image.load('49-Breakout-Tiles.png'), (61,16))
self.rect = self.sprite.get_rect()
self.rect.right += displayRect.center[0]-25
self.rect.top += displayRect.center[1]+450
self.draw(0)
def draw(self, x):
pg.draw.rect(display, black, (self.rect.x, self.rect.y, 61, 16))
self.rect.right += x
if not displayRect.contains(self.rect):
self.rect.right -= x
display.blit(self.sprite, self.rect)
#from gameloop
moveNeg, movePos = False, False
while True:
for event in pg.event.get():
if event.type == pg.KEYDOWN:
if event.key == pg.K_LEFT or event.key == pg.K_a:
moveNeg = True
if event.key == pg.K_RIGHT or event.key == pg.K_d:
movePos = True
if event.type == pg.KEYUP:
if event.key == pg.K_LEFT or event.key == pg.K_a:
moveNeg = False
if event.key == pg.K_RIGHT or event.key == pg.K_d:
movePos = False
if moveNeg:
player.draw(-1)
if movePos:
player.draw(1)
Этот код работает нормально, а такжегарантирует, что весло игрока остается в пределах экрана.
Однако для объекта мяча я пытаюсь использовать rect.move(x,y)
для его перемещения.Я уже пробовал с rect.right
и rect.top
, но объект ball все еще не отвечает.Вот код, который у меня есть:
class Ball():
def __init__(self):
self.sprite = pg.transform.scale(pg.image.load('58-Breakout-Tiles.png'), (16, 16))
self.rect = self.sprite.get_rect()
self.rect.x += displayRect.center[0]
self.rect.y += displayRect.center[1]
self.dir = [random.uniform(-1.0,1.0), random.uniform(-1.0,1.0)]
print(self.dir)
def draw(self, xy):
pg.draw.rect(display, black, (self.rect.x, self.rect.y, 16, 16))
self.rect = self.rect.move(xy[0], xy[1])
display.blit(self.sprite, self.rect)
Шарик центрируется при инициализации объекта (как показано в строках 3/4 функции __init__
, но я не понимаю, почему этоповлияет на движение шара rect
. Также для ясности self.dir
используется, чтобы дать мячу случайное начальное направление, и я знаю, что он может двигаться вверх с этой текущей конфигурацией.
Поскольку я новичок в Pygame, это полностью сбивает меня с толку, почему моя логика несовершенна, поэтому любая помощь очень ценится. Спасибо