s1 = net.addSwitch( 's1', failmode='standalone', stp=True)
到目前为止,到目前为止,我的作品基本上应该是复古的街机游戏乒乓球,球从球拍的边缘弹起,如果不是相反的话,球击中窗口边缘时会得分。因此,具体来说,该项目的这一部分要求我使球从球拍的前部弹起,而我对如何执行此操作感到困惑。我的想法最初是在Rect类中使用collidepoint方法,如果该方法返回true,则将反转球的速度。但是,我无法访问类内部或类游戏中方法玩法内部球的中心坐标,我打算在球和paddle1,paddle2的特定实例上进行此工作,因此我无法不知道该怎么做。
答案 0 :(得分:1)
在Game.update
中评估球是击中右侧的左桨还是右击左侧的桨。
如果球击中了桨,则得分可以增加:
class Game():
# [...]
def update(self):
self.ball.move()
# evaluate if Ball hits the left paddle (Paddle1) at the right
if self.ball.velocity[0] < 0 and self.Paddle1.rect.top <= self.ball.center[1] <= self.Paddle1.rect.bottom:
if self.Paddle1.rect.right <= self.ball.center[0] <= self.Paddle1.rect.right + self.ball.radius:
self.ball.velocity[0] = -self.ball.velocity[0]
self.ball.center[0] = self.Paddle1.rect.right + self.ball.radius
self.score1 += 1
# evaluate if Ball hits the right paddle (Paddle2) at the left
if self.ball.velocity[0] > 0 and self.Paddle2.rect.top <= self.ball.center[1] <= self.Paddle2.rect.bottom:
if self.Paddle2.rect.left >= self.ball.center[0] >= self.Paddle2.rect.left - self.ball.radius:
self.ball.velocity[0] = -self.ball.velocity[0]
self.ball.center[0] = self.Paddle2.rect.left - self.ball.radius
self.score2 += 1
通过pygame.key.get_pressed()
获取键的状态,并将桨的位置更改为Game.handle_events
。
例如将左拨片移动 w / s ,右拨片移动 UP / DOWN :
class Game():
# [...]
def handle_events(self):
events=pygame.event.get()
for event in events:
if event.type== pygame.QUIT:
self.close_clicked=True
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
self.Paddle1.rect.top = max(0, self.Paddle1.rect.top - 3)
if keys[pygame.K_s]:
self.Paddle1.rect.bottom = min(self.surface.get_height(), self.Paddle1.rect.bottom + 3)
if keys[pygame.K_UP]:
self.Paddle2.rect.top = max(0, self.Paddle2.rect.top - 3)
if keys[pygame.K_DOWN]:
self.Paddle2.rect.bottom = min(self.surface.get_height(), self.Paddle2.rect.bottom + 3)