Pygame Pong, Paddle 只上下移动一次,球在恢复后不会移动
Pygame Pong, Paddle only moves once up and down and ball doesn't move after regen
所以我正在尝试创建一个单人 Pong 游戏。我能够让球从屏幕上弹开然后回来,但是当它撞到左侧的墙上时它会重新生成但不会移动。此外,当尝试移动桨时,它只会向上移动 1 个像素,只会向下移动 1 个像素,然后它不会再向上或向下移动。很难解释,所以这是代码。
import sys
import pygame
pygame.init()
size = width, height = 1000, 800
screenColor = 0, 0, 0
outline = 0, 0, 255
paddleOne = pygame.image.load("PONGPADDLE.png")
ball = pygame.image.load("Bullet.png")
ballRect = ball.get_rect()
paddleRect = paddleOne.get_rect()
speed = [1, 1]
paddleOne_x = 980
paddleOne_y = 400
FPS = 1000
fpsClock = pygame.time.Clock()
paddleOnePos_x = 0
paddleOnePos_y = 0
screen = pygame.display.set_mode(size)
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
paddleRect.y += 10
if paddleRect.top > 0:
paddleRect.top = -1
if event.key == pygame.K_DOWN:
paddleRect.y -= 10
if paddleRect.bottom < 800:
paddleRect.top = +1
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
paddleRect_y = 0
if event.key == pygame.K_DOWN:
paddleRect_y = 0
ballRect = ballRect.move(speed)
if ballRect.right > width:
speed[0] = -speed[0]
if ballRect.top < 0 or ballRect.bottom > height:
speed[1] = -speed[1]
if ballRect.left < 0:
ballRect = ball.get_rect()
elif ballRect.colliderect(paddleRect):
speed[1] = -speed[1]
paddleOne_y += paddleRect.bottom
paddleOne_y += paddleRect.top
screen.fill(screenColor)
screen.blit(paddleOne, (paddleRect.left, paddleRect.top))
# screen.blit(paddleOne, (paddleOne_x, paddleOne_y))
screen.blit(ball, ballRect)
pygame.draw.rect(screen, outline, ((0, 0), (width, height)), 5)
pygame.display.flip()
fpsClock.tick(FPS)
如果您希望只要按住箭头键,桨叶就会移动,并希望它在松开键时停止移动,那么您应该改变桨叶的速度,而不是它的位置。示例实现:
paddle_y_velocity = 0
while 1:
if paddleRect.top < 0:
paddleRect.top = 0
if paddleRect.bottom > 800:
paddleRect.bottom = 800
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
paddle_y_velocity -= 1
if event.key == pygame.K_DOWN:
paddle_y_velocity += 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
paddle_y_velocity = 0
paddleRect.top += paddle_y_velocity
ballRect = ballRect.move(speed)
#etc
所以我正在尝试创建一个单人 Pong 游戏。我能够让球从屏幕上弹开然后回来,但是当它撞到左侧的墙上时它会重新生成但不会移动。此外,当尝试移动桨时,它只会向上移动 1 个像素,只会向下移动 1 个像素,然后它不会再向上或向下移动。很难解释,所以这是代码。
import sys
import pygame
pygame.init()
size = width, height = 1000, 800
screenColor = 0, 0, 0
outline = 0, 0, 255
paddleOne = pygame.image.load("PONGPADDLE.png")
ball = pygame.image.load("Bullet.png")
ballRect = ball.get_rect()
paddleRect = paddleOne.get_rect()
speed = [1, 1]
paddleOne_x = 980
paddleOne_y = 400
FPS = 1000
fpsClock = pygame.time.Clock()
paddleOnePos_x = 0
paddleOnePos_y = 0
screen = pygame.display.set_mode(size)
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
paddleRect.y += 10
if paddleRect.top > 0:
paddleRect.top = -1
if event.key == pygame.K_DOWN:
paddleRect.y -= 10
if paddleRect.bottom < 800:
paddleRect.top = +1
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
paddleRect_y = 0
if event.key == pygame.K_DOWN:
paddleRect_y = 0
ballRect = ballRect.move(speed)
if ballRect.right > width:
speed[0] = -speed[0]
if ballRect.top < 0 or ballRect.bottom > height:
speed[1] = -speed[1]
if ballRect.left < 0:
ballRect = ball.get_rect()
elif ballRect.colliderect(paddleRect):
speed[1] = -speed[1]
paddleOne_y += paddleRect.bottom
paddleOne_y += paddleRect.top
screen.fill(screenColor)
screen.blit(paddleOne, (paddleRect.left, paddleRect.top))
# screen.blit(paddleOne, (paddleOne_x, paddleOne_y))
screen.blit(ball, ballRect)
pygame.draw.rect(screen, outline, ((0, 0), (width, height)), 5)
pygame.display.flip()
fpsClock.tick(FPS)
如果您希望只要按住箭头键,桨叶就会移动,并希望它在松开键时停止移动,那么您应该改变桨叶的速度,而不是它的位置。示例实现:
paddle_y_velocity = 0
while 1:
if paddleRect.top < 0:
paddleRect.top = 0
if paddleRect.bottom > 800:
paddleRect.bottom = 800
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
paddle_y_velocity -= 1
if event.key == pygame.K_DOWN:
paddle_y_velocity += 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
paddle_y_velocity = 0
paddleRect.top += paddle_y_velocity
ballRect = ballRect.move(speed)
#etc