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