【问题标题】:Pygame Pong, Paddle only moves once up and down and ball doesn't move after regenPygame Pong,Paddle 只上下移动一次,球在 regen 后不移动
【发布时间】:2015-05-04 23:45:26
【问题描述】:

所以我正在尝试创建一个单人 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)

【问题讨论】:

  • 你的整个if event.type == pygame.KEYUP: 块对我来说看起来很奇怪。 paddleRect_y = 0 表示每次用户释放向上或向下按钮时,拨片将重置其位置到屏幕顶部。所以你的桨没有移动对我来说并不奇怪。也许您正在尝试执行类似“当用户释放键时将桨的 速度 重置为零”之类的操作?
  • 您的if paddleRect.top &gt; 0if paddleRect.bottom &lt; 800: 条件似乎也有问题。如果您尝试进行边界检查,我认为您需要将&lt;&gt; 切换,反之亦然。

标签: python pong


【解决方案1】:

如果您希望桨叶在按住箭头键时一直移动,并希望在松开键时停止移动,那么您应该更改桨叶的速度,而不是其位置。示例实现:

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

【讨论】:

  • 非常感谢您解决了这个问题哈哈。我不敢相信我以前没有看到过
  • 您也知道为什么它没有与桨发生碰撞。这似乎不起作用,当它再生时球甚至都不动
猜你喜欢
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多