pong in pygame:球不反弹

pong in pygame: ball doesnt bounce

我正在 pygame 打乒乓球,但我遇到了问题。当球与桨碰撞时,它不会弹开。这是我的代码:

主文件:

import pygame as py

import game_functions as gf
from game_objects import Platform, Platform2, Ball
from settings import Settings


def run_game():
py.init()
ai_settings = Settings()
screen = py.display.set_mode((
    ai_settings.screen_width, ai_settings.screen_height
))
py.display.set_caption('Pong')
platform = Platform(ai_settings, screen)
platform2 = Platform2(ai_settings, screen)
ball = Ball(ai_settings, screen)

while True:
    gf.check_events(platform, platform2, ball)
    platform.update(), platform2.update(), ball.update()
    gf.collide_check(ball, platform, platform2, ai_settings)
    gf.update_screen(ai_settings, screen, platform, platform2, ball)

run_game()

class 球:

class Ball:

def __init__(self, ai_settings, screen):
    self.ai_settings = ai_settings
    self.screen = screen
    self.screen_rect = screen.get_rect()

    self.image = py.image.load('pics/ball.png')
    self.rect = self.image.get_rect()

    self.rect.centerx = self.screen_rect.centerx
    self.rect.centery = self.screen_rect.centery

    self.moving = False

def update(self):

    if self.moving:
        self.rect.centerx -= self.ai_settings.ball_speed

def draw_ball(self):

    self.screen.blit(self.image, self.rect)

这是我改变方向的功能:

def collide_check(ball, platform, platform2, ai_settings):

    if ball.rect.colliderect(platform.rect):
        ball.rect.centerx += ai_settings.ball_speed
    elif ball.rect.colliderect(platform2.rect):
        ball.rect.centerx -= ai_settings.ball_speed

非常感谢您的帮助:/

P.S。如果按下桨移动的任何键,移动标志 self.moving 将更改为 true

您的更新功能还不完善,需要补充:

def update(self):

self.collide_check(ball, platform, platform2, ai_settings)

if self.moving:
    self.rect.centerx -= self.ai_settings.ball_speed

以便您的代码更新球的方向。由于它现在位于更新部分,因此每次更新周期发生时都会检查冲突。 因此,您可能需要添加

collide_check() 

函数入球class。 我还应该补充一点:

if ball.rect.colliderect(platform.rect):
   ball.rect.centerx += ai_settings.ball_speed

应该改为:

if ball.rect.colliderect(platform.rect):
    ai_settings.ball_speed * -1

这样就使 ai_settings.ball_speed 朝相反的方向发展,因为 n * -1 = -1 和 -n * -1 = 1。