Pong Collision Pygame
问题描述:
我正在为pygame编写一个paddle pong游戏的代码,在这个游戏中球会从没有打开桨的三面墙上弹开,当它碰到桨的墙而不是桨时,你失去了生命。我的问题是,我无法弄清楚碰撞检测。以下是我迄今所做的:Pong Collision Pygame
import pygame, sys
from pygame.locals import *
pygame.init()
screen_width = 640
screen_height = 480
Display = pygame.display.set_mode((screen_width, screen_height), 0, 32)
pygame.display.set_caption('Lonely Pong')
back = pygame.Surface((screen_width, screen_height))
background = back.convert()
background.fill((255, 255, 255))
paddle = pygame.Surface((80, 20))
_paddle = paddle.convert()
_paddle.fill((128, 0, 0))
ball = pygame.Surface((15, 15))
circle = pygame.draw.circle(ball, (0, 0, 0), (7, 7), 7)
_ball = ball.convert()
_ball.set_colorkey((0, 0, 0))
_paddle_x = (screen_width/2) - 40
_paddle_y = screen_height - 20
_paddlemove = 0
_ball_x, _ball_y = 8, 8
speed_x, speed_y, speed_circle = 250, 250, 250
Lives = 5
clock = pygame.time.Clock()
font = pygame.font.SysFont("verdana", 20)
paddle_spd = 5
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
if event.type == KEYDOWN:
if event.key == K_RIGHT:
_paddlemove = paddle_spd
elif event.key == K_LEFT:
_paddlemove = -paddle_spd
elif event.type == KEYUP:
if event.key == K_RIGHT:
_paddlemove = 0
elif event.key == K_LEFT:
_paddlemove = 0
Livespr = font.render(str(Lives), True, (0, 0, 0))
Display.blit(background, (0, 0))
Display.blit(_paddle, (_paddle_x, _paddle_y))
Display.blit(_ball, (_ball_x, _ball_y))
Display.blit(Livespr, ((screen_width/2), 5))
_paddle_x += _paddlemove
passed = clock.tick(30)
sec = passed/1000
_ball_x += speed_x * sec
_ball_y += speed_y * sec
pygame.display.update()
我一直有另一个问题是,当我启动它,球不会出现在所有。请有人指点我正确的方向?第一
答
第一件事情,球不会出现,因为你没有填充表面,您正在设置color_key:
_ball.set_colorkey((0, 0, 0))
应该
_ball.fill((0, 0, 0))
其次,碰撞检测, pygame提供了一些功能,如碰撞点和碰撞。
https://www.pygame.org/docs/ref/rect.html#pygame.Rect.collidepoint
这意味着你将需要表面的矩形。通过这样做:
my_surface.get_rect()
https://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_rect
为了与屏幕的边缘碰撞,你总是可以做
if _ball_x <= 0 or _ball_y <= 0 or _ball_x >= 640 or _ball_y >= 480:
# collision detected
+0
非常感谢你,生病了。 – TheBudderBomb
我想你的代码永远不会越过事件的'在pygame的.event.get()',绘制代码。绘图代码应该在内部循环中;修复缩进并重试。 – 9000
但它像它唯一的跳绳画球,因为它吸引了桨和生命 – TheBudderBomb
你检查过“秒”不是零吗?也许'秒=通过/ 1000.0'可以解决它。 – 9000