私はパイゲームで卓球をしていますが、問題があります。ボールがパドルに衝突すると、ボールがパドルについたままになります。 Heresコード、私は頭痛の問題を把握できません。パイの卓球:ボールは跳ねません
メインファイル:ボール用
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
どうもありがとう:/
PS移動フラグ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
をあなたのコードはボールの方向を更新しているので:あなたが追加する必要があるとして
コードは完全ではないと推測されますが、 'update'は常にボールの速度を減算するように見えるため、一方向にしか移動しません。 'platform'が衝突するものであれば、ball_speedが追加されますが、次の' update'は再び減算されます。デバッガを備えた多くのPython IDEがありますので、コードをステップバイステップで実行してロジックを確認することができます。あなたのXとY座標が変化するのを見てください。 –
問題を再作成するためにできるだけ多くのコードを削除してください。デバッグが簡単になります。また、問題の一部であるコード(この場合は 'ai_settings.ball_speed')を含める必要があります。コードはテスト可能でなければならないので、字下げが正しいことと、問題を再現するために必要なコードが提供されていることを確認してください。また、pygameをpyとしてインポートする理由は何ですか?コードをはるかにあいまいにし、多くの型を節約しません。しかし、長い名前であなたのモジュールには理解できます。 –