我在Pygame中建立一个乒乓克隆。我不知道如何在球和球拍上添加碰撞检测,这样球就会从球拍上反弹。我该怎么做?当球碰到球拍时,我怎么能让球反方向跑呢?在
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()
This answer有一个包含冲突检测的示例pong实现。具体来说,您将对下面列出的代码中的
bounce
方法感兴趣。在在乒乓球课上:
在划桨课上:
^{2}$球类:
做一个if语句,检查球的x坐标是否超出了球拍的x坐标,以及它的y坐标是否在球拍的上下y坐标内。如果是这样,用球的x速度乘以-1。在
相关问题 更多 >
编程相关推荐