1 回答

TA貢獻2011條經(jīng)驗 獲得超2個贊
問題是你如何檢查球是否離開了屏幕。您當前的檢查條件永遠不會觸發(fā),因為它永遠不會等于,因為它是一個整數(shù)。pong_ball.rect.leftWIDTH - 12.5
一個簡單的調試方法只需打印要檢查的值,因此
print(pong_ball.rect.left, WIDTH - 12.5)
將輸出:
1264 1267.5
1267 1267.5
1270 1267.5
1273 1267.5
1276 1267.5
1279 1267.5
625 1267.5
628 1267.5
當球向屏幕右側移動時,其位置將被重置。
因此,您會看到球的位置超過您的極限,而不會觸發(fā)您的條件。
如果將比較分別更改為 和,則分數(shù)將更新。><
但是,這將導致另一個問題,從上面的調試打印中也可以明顯看出。有四幀的評分條件為真,因為重置位置檢入沒有 12.5 像素的回旋余地。這就是當初存在回旋余地的原因嗎?你未來的自己可能會喜歡評論。PongBall.update()
但是,如果您更改比較以刪除 12.5 像素緩沖區(qū),則分數(shù)不會更新。這是因為位置在其方法中更新和重置。pong_ballupdate()
如果我們遵循您的彈跳方法,我們可以添加一個單獨的方法,并在滿足評分標準時調用該方法。resetPongBall
所以你的類現(xiàn)在是:PongBall
class PongBall(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.image = pg.Surface((30, 30))
self.image.fill(WHITE)
self.rect = self.image.get_rect()
self.speedx = random.choice(pong_ball_x)
self.speedy = random.choice(pong_ball_y)
self.reset()
def update(self):
self.rect.x += self.speedx
self.rect.y += self.speedy
if self.rect.top <= 0:
self.speedy = -self.speedy
if self.rect.bottom >= HEIGHT:
self.speedy = -self.speedy
def reset(self):
self.rect.x = WIDTH / 2 - 15
self.rect.y = HEIGHT / 2 - 15
def bounce(self):
self.speedx = -self.speedx
您的主循環(huán)將更改為同時執(zhí)行重置:
while running:
# process input (events)
for event in pg.event.get():
# check for closing window
if event.type == pg.QUIT:
running = False
# check for score
if pong_ball.rect.left > WIDTH - 12.5:
score = score + 1
pong_ball.reset()
if pong_ball.rect.right < 12.5:
score2 = score2 + 1
pong_ball.reset()
# update
....
那么你的分數(shù)應該表現(xiàn)正確。
添加回答
舉報