Pygame Pong 有条件使球弹跳
Pygame Pong conditional to make ball bounce
是否可以将条件添加到此代码中,从而导致
x_direction 改变使球在超过宽度时看起来弹跳?类似:if x_val > width x_direction == x_direction * -1? (同样适用于 y_direction)。
import pygame
BLACK = (0,0,0)
WHITE = (255,255,255)
BLUE = (50,50,255)
YELLOW = (255,255,0)
width = 64
height = 480
pygame.init()
size = (width,height)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pong")
done = False
clock = pygame.time.Clock()
ball_width = 20
x_val = 150
y_val = 200
x_direction = 1
y_direction = 1
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
x_val = x_val + x_direction
y_val = y_val + y_direction
screen.fill (BLACK)
# condition to go here to make ball bounce
pygame.draw.rect(screen, BLUE, (x_val,y_val,ball_width,20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
您的 x_val
和 y_val
需要在主循环内递增,否则它们将递增一次而不会再次递增。
你已经非常接近你需要的条件了。下面是一些代码,可以让球在撞到屏幕的墙壁时改变方向:
if x_val < 0 or x_val > width:
x_direction = x_direction * -1
if y_val < 0 or x_val > height:
y_direction = y_direction * -1
此代码也必须包含在主循环中,因为我们需要检查球的位置以查看它是否在每一帧都与墙碰撞。
由于您的球有大小并且您的 x_val
和 y_val
变量表示球的 中心 ,因此您必须包括球的大小在上面的条件中,使球从它的边缘而不是它的中心反弹。
是否可以将条件添加到此代码中,从而导致 x_direction 改变使球在超过宽度时看起来弹跳?类似:if x_val > width x_direction == x_direction * -1? (同样适用于 y_direction)。
import pygame
BLACK = (0,0,0)
WHITE = (255,255,255)
BLUE = (50,50,255)
YELLOW = (255,255,0)
width = 64
height = 480
pygame.init()
size = (width,height)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pong")
done = False
clock = pygame.time.Clock()
ball_width = 20
x_val = 150
y_val = 200
x_direction = 1
y_direction = 1
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
x_val = x_val + x_direction
y_val = y_val + y_direction
screen.fill (BLACK)
# condition to go here to make ball bounce
pygame.draw.rect(screen, BLUE, (x_val,y_val,ball_width,20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
您的 x_val
和 y_val
需要在主循环内递增,否则它们将递增一次而不会再次递增。
你已经非常接近你需要的条件了。下面是一些代码,可以让球在撞到屏幕的墙壁时改变方向:
if x_val < 0 or x_val > width:
x_direction = x_direction * -1
if y_val < 0 or x_val > height:
y_direction = y_direction * -1
此代码也必须包含在主循环中,因为我们需要检查球的位置以查看它是否在每一帧都与墙碰撞。
由于您的球有大小并且您的 x_val
和 y_val
变量表示球的 中心 ,因此您必须包括球的大小在上面的条件中,使球从它的边缘而不是它的中心反弹。