pong in pygame:球没弹跳

问题描述 投票:0回答:1

我在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 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

非常感谢您的帮助:/

附:移动标志self.moving将更改为true,如果按任何键移动键。

pygame python-3.4
1个回答
0
投票

您的更新功能未完全完成,因为您需要添加:

def update(self):

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

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

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

collide_check() 

功能进入球类。我还要补充一点:

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。

© www.soinside.com 2019 - 2024. All rights reserved.