使用pygame库的简单python游戏的问题
我是Python和Pygame的新手,我开始制作一个简单的游戏,有点像网球游戏,但每次球在矩形下跳跃+-5像素并阻挡。我认为问题在于pXY和bXY使用pygame库的简单python游戏的问题,python,pygame,Python,Pygame,我是Python和Pygame的新手,我开始制作一个简单的游戏,有点像网球游戏,但每次球在矩形下跳跃+-5像素并阻挡。我认为问题在于pXY和bXY 导入系统,pygame 从pygame.locals导入* pygame.init() pygame.display.set_模式((500500))#ustawiwanie wielkosci pygame.display.set_标题((“小狗屎”)35; ustawianie nazwy okienko=pygame.display.get#u
导入系统,pygame
从pygame.locals导入*
pygame.init()
pygame.display.set_模式((500500))#ustawiwanie wielkosci
pygame.display.set_标题((“小狗屎”)35; ustawianie nazwy
okienko=pygame.display.get#u surface()
#讣告
prostokat=pygame.Surface((80,20))#tworzenie prostokąta/tulpa,szerokość/wysokość
prostokat.fill((128,15220))#zmiana koloru prostokąta/r:g:b
pXY=prostokat.get_rect()#pobranie wymiarów prostokąta
pXY.x=225#wartośćx
pXY.y=460#wartośćy
kolko=pygame.image.load(“./ball.png”)
bXY=kolko.get_rect()
bXY.x=120 35; POŁOŻENIE OBIEKTU
bXY.y=200#POŁOŻENIE OBIEKTU
bx,by=5,5
px=3
bAB=kolko.get_rect()
bA=25
bB=25
kolko=pygame.transform.scale(kolko,(bA,bB))
pygame.display.flip()35; wyświetlenie/odrysowanie całego-okna
fps=pygame.time.Clock()
尽管如此:
okienko.fill((128128128))#zmiana koloru płaszczyzny na szary
pXY.x+=px
如果pXY.x>420或pXY.x<0:
px*=-1
okienko.blit(普罗斯托卡特,pXY)
bXY.x+=bx
如果bXY.x>475或bXY.x<0:
bx*=-1
bXY.y+=by
如果bXY.y>475或bXY.y<0:
通过*=-1
如果pXY.collide rect(bXY):#KOLIDACJA OBIEKTOW
比=5
okienko.blit(科尔科,bXY)
pygame.display.update()#更新okienka
fps.tick(30)#odswiezanie obrazu,30 fps
对于pygame.event.get()中的zdarzenie:
如果zdarzenie.type==pygame.QUIT:
pygame.quit()
退出()
如果zdarzenie.type==KEYDOWN:
如果zdarzenie.key==K_左:
px=-7
如果zdarzenie.key==K_RIGHT:
px=7
而事实是:赞比亚奥基恩卡省的pętla
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出()
当球位于矩形下方,跳跃+-5像素并阻挡时,当球位于左侧时,球无法离开此区域碰撞检测逻辑将无法给出物理上准确的结果。例如,无论球在哪里与挡板碰撞,它都将以5像素/帧的速度开始向下移动。这意味着,当球从上方撞击时,它将穿过球拍,但如果球从下方撞击,它将“反弹”。这就是导致球的行为方式。如果桨叶和球发生碰撞,则此线是设定速度的位置:
if pXY.colliderect(bXY): # KOLIDACJA OBIEKTOW
by=5
一个稍微好一点的方法是,如果球与球拍相撞,将球的方向反转。但这仍然使球仅在y轴上反转方向,无论球在桨上的哪个位置碰撞(顶部、底部、左侧、右侧)。可以将上述代码更改为此代码以获得此效果:
if pXY.colliderect(bXY): # KOLIDACJA OBIEKTOW
by*=-1
最后一段代码被稍微整理一下并翻译成英语。它使用上面的第二个代码块将球从挡板上弹起:
import sys
import pygame
pygame.init()
window = pygame.display.set_mode((500, 500))
pygame.display.set_caption('new caption')
paddle = pygame.Surface((80, 20))
paddle.fill((128, 15, 220))
paddle_rect = paddle.get_rect()
paddle_rect.x = 225
paddle_rect.y = 460
ball = pygame.Surface((25, 25))
ball.fill((255, 0, 0))
ball_rect = ball.get_rect()
ball_rect.x = 120
ball_rect.y = 200
ball_velocity_x = 5
ball_velocity_y = 5
paddle_velocity_x = 3
clock = pygame.time.Clock()
while True:
# event processing code
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
paddle_velocity_x = -7
elif event.key == pygame.K_RIGHT:
paddle_velocity_x = 7
# update code
# update the position of the paddle and bounce it off the edges of the window
paddle_rect.x += paddle_velocity_x
if paddle_rect.x > 420 or paddle_rect.x < 0:
paddle_velocity_x *= -1
# update the position of the ball and bounce it off th eedges of the window
ball_rect.x += ball_velocity_x
ball_rect.y += ball_velocity_y
if ball_rect.x > 475 or ball_rect.x < 0:
ball_velocity_x *= -1
if ball_rect.y > 475 or ball_rect.y < 0:
ball_velocity_y *= -1
if paddle_rect.colliderect(ball_rect):
ball_velocity_y *= -1
# drawing code
window.fill((128, 128, 128))
window.blit(paddle, paddle_rect)
window.blit(ball, ball_rect)
pygame.display.update()
clock.tick(30)
导入系统
导入pygame
pygame.init()
window=pygame.display.set_模式((500500))
pygame.display.set_标题('新标题')
桨=pygame.表面((80,20))
桨叶填充((128、15、220))
palle\u rect=palle.get\u rect()
右桨x=225
右桨y=460
球=pygame.表面((25,25))
填充球((255,0,0))
ball\u rect=ball.get\u rect()
球径x=120
球径y=200
球速度×x=5
球速度y=5
桨叶_速度_x=3
clock=pygame.time.clock()
尽管如此:
#事件处理代码
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
桨叶_速度_x=-7
elif event.key==pygame.K_RIGHT:
桨叶_速度_x=7
#更新代码
#更新挡板的位置并将其从窗口边缘弹起
桨叶直径x+=桨叶速度x
如果桨叶x>420或桨叶x<0:
桨叶_速度_x*=-1
#更新球的位置并将其从窗口的边缘反弹
ball_rect.x+=ball_速度_x
球直径y+=球速度y
如果球径x>475或球径x<0:
球的速度x*=-1
如果球径y>475或球径y<0:
球的速度y*=-1
如果桨叶垂直碰撞(球垂直):
球的速度y*=-1
#绘图代码
窗口填充((128128128))
窗口。blit(拨动,拨动)
窗口。blit(球,球)
pygame.display.update()
时钟滴答(30)
谢谢您的评论,但您的代码只有在papper\u rect.y