Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pygame库的简单python游戏的问题_Python_Pygame - Fatal编程技术网

使用pygame库的简单python游戏的问题

使用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

我是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 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