我正在研究Pong的克隆并检测碰撞btw球和我使用过这句话的踏板
if ball_pos[1] in range(paddle_1[1],paddle_1[1]+30) and ball_pos[0] in range(0,gutter+10) :
ball_vel[0] *= -1
但是,如果我尝试为正确的球拍实现相同的功能,那么它就不起作用了。 这是整个代码
import time
import pygame
done = False
pygame.init()
screen_size = [320,240]
white = [255,255,255]
black = [0,0,0]
gutter = 10
ball_pos = [160,120]
ball_vel = [1,0]
paddle_1 = [0,0]
paddle_2 = [screen_size[0]-5,0]
vel_1 = [0,0]
vel_2 = [0,0]
P1 = False
P2 = False
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption("mygame")
while not done:
time.sleep(0.02)
screen.fill(black)
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
if pygame.key.get_pressed()[pygame.K_DOWN]:
vel_1[1] += 2
P1 = True
if pygame.key.get_pressed()[pygame.K_UP]:
P1 = True
vel_1[1] -= 2
if pygame.key.get_pressed()[pygame.K_s]:
P2 = True
vel_2[1] += 2
if pygame.key.get_pressed()[pygame.K_w]:
P2 = True
vel_2[1] -= 2
if event.type == pygame.KEYUP:
if(P1):
vel_1 = [0,0]
P1 = False
if (P2):
vel_2 = [0,0]
P2 = False
if ball_pos[1] in range(paddle_1[1],paddle_1[1]+30) and ball_pos[0] in range(0,gutter+10) :
ball_vel[0] *= -1
#This Is Where I am getting a Funny Behaviour
if ball_pos[1] in range(paddle_2[1],paddle_2[1]+30) and ball_pos[0] in range(230,240):
ball_vel[0] *= -1
if ball_pos[1] > 230 or ball_pos[1] < 5:
ball_vel[1] *= -1
paddle_1[0] += vel_1[0]
paddle_1[1] += vel_1[1]
paddle_2[0] += vel_2[0]
paddle_2[1] += vel_2[1]
ball_pos[0] += ball_vel[0]
ball_pos[1] += ball_vel[1]
pygame.draw.line(screen,white,(gutter,0),(gutter,screen_size[1]))
pygame.draw.line(screen,white,(screen_size[0]-gutter,0),(screen_size[0]-gutter,screen_size[1]))
pygame.draw.circle(screen,white,ball_pos,10,0)
pygame.draw.line(screen,white,[paddle_1[0]+5,paddle_1[1]],[paddle_1[0]+5,paddle_1[1]+30],gutter)
pygame.draw.line(screen,white,paddle_2,[paddle_2[0],paddle_2[1]+30],10)
pygame.display.flip()
pygame.quit()
答案 0 :(得分:2)
该行
if ball_pos[1] in range(paddle_2[1],paddle_2[1]+30) and ball_pos[0] in range(230,240):
应该是
if ball_pos[1] in range(paddle_2[1],paddle_2[1]+30) and ball_pos[0] in range(310,320):
240
是屏幕的高度,但您要检查屏幕的宽度,即320
。< / p>
您的代码还有一些问题,但这超出了此答案的范围。