【发布时间】:2013-01-25 04:13:17
【问题描述】:
我正在 Pygame 中构建 Pong 克隆。我不知道如何为球和桨添加碰撞检测,以便球会从桨上反弹。我怎样才能做到这一点?怎样才能让球击中球拍时反方向?
bif="bg.jpg"
import pygame, sys
from pygame.locals import *
pygame.init()
pygame.display.set_caption("Griffin West's Python Pong")
pygame.mixer.init()
sounda= pygame.mixer.Sound("Music.wav")
sounda.play()
screen=pygame.display.set_mode((1280,720),0,32)
background=pygame.image.load(bif).convert()
color1=(255,255,255)
color2=(255,255,0)
color3=(0,0,255)
color4=(0,255,0)
pos1=(640,0)
pos2=(640,720)
pos3=(640,360)
pos4=(0,360)
pos5=(1280,360)
radius=(100)
x1,y1=75,0
x2,y2=1175,0
x3,y3=1,1
clock=pygame.time.Clock()
speedx=750
speedy=750
movex1, movey1=0,0
movex2, movey2=0,0
s1=0
s2=0
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_w:
movey1=-2
elif event.key==K_s:
movey1=+2
if event.key==K_UP:
movey2=-2
elif event.key==K_DOWN:
movey2=+2
if event.type==KEYUP:
if event.key==K_w:
movey1=0
elif event.key==K_s:
movey1=0
if event.key==K_UP:
movey2=0
elif event.key==K_DOWN:
movey2=0
x1+=movex1
y1+=movey1
x2+=movex2
y2+=movey2
milli=clock.tick()
seconds=milli/1000.0
dx=seconds*speedx
dy=seconds*speedy
x3+=dx
y3+=dy
if x3>1280:
x3+=-dx # get ball out of the wall
speedx = -speedx # change direction
s1=s1+1
if y3>720:
y3+=-dy
speedy = -speedy
if x3<0:
x3+dx
speedx = -speedx
x3=x3+1
s2=s2+1
if y3<0:
y3=y3+1
y3+=dy
speedy = -speedy
if x3<=y3y3+30:
speedx = -speedy
screen.blit(background, (0,0))
screen.lock()
pygame.draw.line(screen, color1, pos1, pos2, 1)
pygame.draw.circle(screen, color1, pos3, radius, 1)
pygame.draw.circle(screen, color1, pos4, radius, 1)
pygame.draw.circle(screen, color1, pos5, radius, 1)
pygame.draw.rect(screen, color3, Rect((x1,y1),(30,100)))
pygame.draw.rect(screen, color2, Rect((x2,y2),(30,100)))
pygame.draw.circle(screen, color4, (int(x3),int(y3)), 15)
screen.unlock()
myfont = pygame.font.SysFont("Press Start 2P", 50)
myfont2 = pygame.font.SysFont("Press Start 2P", 25)
label = myfont.render("Python", 1, (255,0,0))
screen.blit(label, (494, 115))
label = myfont.render("Pong", 1, (255,0,0))
screen.blit(label, (544, 175))
label = myfont2.render("Player 1: "+str(s1), 1, (255,255,255))
screen.blit(label, (25, 675))
label = myfont2.render("Player 2: "+str(s2), 1, (255,255,255))
screen.blit(label, (950, 675))
pygame.display.update()
【问题讨论】:
标签: python pygame collision-detection pong