Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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
Python pygame.display.update() 时钟滴答(60) pygame.quit()_Python_Python 3.x_Pygame - Fatal编程技术网

Python pygame.display.update() 时钟滴答(60) pygame.quit()

Python pygame.display.update() 时钟滴答(60) pygame.quit(),python,python-3.x,pygame,Python,Python 3.x,Pygame,问题是您正在设置ball\u x和ball\u y,但这些位置没有绘制球。球实际上是在被称为ball\u pos的向量中的坐标处绘制的 要解决此问题: 正如您可能猜到的,有一个非常简单的解决方案:只需重置球位置即可 另外,我重置了向量球的水平,这样球在再次移动到中心后不会移动 您可能还需要添加重置汽车位置的代码。此外,只有在有“红色球门”的情况下,球才会重置 以下是固定代码: import pygame import pygame as pg from pygame.math import Ve

问题是您正在设置
ball\u x
ball\u y
,但这些位置没有绘制球。球实际上是在被称为
ball\u pos
的向量中的坐标处绘制的

要解决此问题

  • 正如您可能猜到的,有一个非常简单的解决方案:只需重置球位置即可
  • 另外,我重置了向量
    球的水平
    ,这样球在再次移动到中心后不会移动
  • 您可能还需要添加重置汽车位置的代码。此外,只有在有“红色球门”的情况下,球才会重置

    以下是固定代码:

    import pygame
    import pygame as pg
    from pygame.math import Vector2
    
    
    pygame.init()
    
    
    WIDTH = 1150
    HEIGHT = 800
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    clock = pygame.time.Clock()
    # Images.
    bgImg = pygame.image.load("Football_pitch.png")
    REDGOAL = pg.Surface((50, 150), pg.SRCALPHA)
    REDGOAL.fill((255, 0, 0))
    redgoal_rect = REDGOAL.get_rect(topleft=(0, 340))
    redgoal_mask = pg.mask.from_surface(REDGOAL)
    BLUEGOAL = pg.Surface((50, 150), pg.SRCALPHA)
    BLUEGOAL.fill((0, 0, 255))
    bluegoal_rect = REDGOAL.get_rect(topleft=(1100, 340))
    bluegoal_mask = pg.mask.from_surface(REDGOAL)
    
    
    BLUECAR_ORIGINAL = pygame.Surface((50, 30), pygame.SRCALPHA)
    pygame.draw.polygon(
        BLUECAR_ORIGINAL, (0, 0, 255), [(0, 30), (50, 20), (50,10), (0, 0)])
    bluecar = BLUECAR_ORIGINAL
    REDCAR_ORIGINAL = pygame.Surface((50, 30), pygame.SRCALPHA)
    pygame.draw.polygon(
        REDCAR_ORIGINAL, (255, 0, 0), [(0, 0), (50, 10), (50, 20), (0, 30)])
    redcar = REDCAR_ORIGINAL
    
    score = 0
    redspeed = 7
    bluespeed = 7
    ball_x = 575
    ball_y = 400
    dx = 0
    dy = 0
    x = 800
    y = 500
    
    
    
    BALL = pygame.Surface((30, 30), pygame.SRCALPHA)
    pygame.draw.circle(BALL, [0,0,0], [15, 15], 15)
    # Ball variables.
    ball_pos = Vector2(ball_x, ball_y)
    ballrect = BALL.get_rect(center=ball_pos)
    ball_vel = Vector2(dx, dy)
    ball_mask = pg.mask.from_surface(BALL)
    # Car variables.
    pos_red = Vector2(x,y)
    vel_red = Vector2(redspeed,0)
    redrect = redcar.get_rect(center=pos_red)
    redangle = 180
    pos_blue = Vector2(275,300)
    vel_blue = Vector2(bluespeed,0)
    bluerect = bluecar.get_rect(center=pos_red)
    blueangle = 0
    # Masks.
    mask_blue = pygame.mask.from_surface(bluecar)
    mask_red = pygame.mask.from_surface(redcar)
    mask_ball = pygame.mask.from_surface(BALL)
    ballrect = BALL.get_rect(center=ball_pos)
    vel_red.rotate_ip(-180)
    
    def redgoal():
            print("Red Goal!!!")
            ball_vel.x = 0
            ball_vel.y = 0
            ball_pos.x = 575
            ball_pos.y = 400
    
    
    
    def bluegoal():
            print("Blue Goal!!!")
            boostedspeedred = 10
    
    
    run = True
    while run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
    
    
        if y <0:
            y = 10
        if y > 450:
            y = 440
        if x > 480:
            x = 470
    
    
    
        if ballrect.top < 0 and ball_vel.y < 0:
            ball_vel.y *= -1
        elif ballrect.bottom > screen.get_height() and ball_vel.y > 0:
            ball_vel.y *= -1
        if ballrect.left < 0 and ball_vel.x < 0:
            ball_vel.x *= -1
        elif ballrect.right > screen.get_width() and ball_vel.x > 0:
            ball_vel.x *= -1
    
        if redrect.top < 0 and redrect.y < 0:
            redrect.y *= +10
        elif redrect.bottom > screen.get_height() and redrect.y > 0:
            redrect.y *= -10
        if redrect.left < 0 and redrect.x < 0:
            redrect.x *= -10
        elif redrect.right > screen.get_width() and redrect.x > 0:
            redrect.x *= -10
    
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            redangle += 5
            vel_red.rotate_ip(-5)
            redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
            redrect = redcar.get_rect(center=redrect.center)
            # We need a new mask after the rotation.
            mask_red = pygame.mask.from_surface(redcar)
        elif keys[pygame.K_RIGHT]:
            redangle -= 5
            vel_red.rotate_ip(5)
            redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
            redrect = redcar.get_rect(center=redrect.center)
            mask_red = pygame.mask.from_surface(redcar)
        elif keys[pygame.K_UP]:
            redspeed == 10
    
    
    
        if keys[pygame.K_a]:
            blueangle += 5
            vel_blue.rotate_ip(-5)
            bluecar = pygame.transform.rotate(BLUECAR_ORIGINAL, blueangle)
            bluerect = bluecar.get_rect(center=bluerect.center)
            mask_blue = pygame.mask.from_surface(bluecar)
        elif keys[pygame.K_d]:
            blueangle -= 5
            vel_blue.rotate_ip(5)
            bluecar = pygame.transform.rotate(BLUECAR_ORIGINAL, blueangle)
            bluerect = bluecar.get_rect(center=bluerect.center)
            mask_blue = pygame.mask.from_surface(bluecar)
    
    
        # Move the cars.
        pos_red += vel_red
        redrect.center = pos_red
        pos_blue += vel_blue
        bluerect.center = pos_blue
        # Move the ball.
        ball_vel *= .99  # Friction.
        ball_pos += ball_vel
        ballrect.center = ball_pos
    
        # Red car collision.
        # We need the offset between the redrect and the ballrect.
        offset_red = redrect[0] - ballrect[0], redrect[1] - ballrect[1]
        # Pass the offset to the `overlap` method. If the masks collide,
        # overlap will return a single point, otherwise `None`.
        overlap_red = mask_ball.overlap(mask_red, offset_red)
        # Blue car collision.
        offset_blue = bluerect[0] - ballrect[0], bluerect[1] - ballrect[1]
        overlap_blue = mask_ball.overlap(mask_blue, offset_blue)
        offset = redgoal_rect[0] - ballrect[0], redgoal_rect[1] - ballrect[1]
        redgoaloverlap = ball_mask.overlap(redgoal_mask, offset)
        offset = bluegoal_rect[0] - ballrect[0], bluegoal_rect[1] - ballrect[1]
        bluegoaloverlap = ball_mask.overlap(bluegoal_mask, offset)
    
        if redgoaloverlap:
            redgoal()
        if bluegoaloverlap:
            bluegoal()
    
        if overlap_red and overlap_blue:  # Both collide with the ball.
            # Not sure what should happen here.
            ball_vel = vel_red + vel_blue * 1.4
        elif overlap_red:  # Red collides with the ball.
            ball_vel = Vector2(vel_red) * 1.4
        elif overlap_blue:  # Blue collides with the ball.
            ball_vel = Vector2(vel_blue) * 1.4
    
    
    
    
        # Drawing.
        screen.blit(bgImg, (0, 0))
        screen.blit(BALL, ballrect)
        screen.blit(redcar, redrect)
        screen.blit(bluecar, bluerect)
        screen.blit(REDGOAL, redgoal_rect)
        screen.blit(BLUEGOAL, bluegoal_rect)
    
        pygame.display.flip()
        pygame.display.update()
        clock.tick(60)
    
    pygame.quit()
    
    导入pygame
    导入pygame作为pg
    从pygame.math导入向量2
    pygame.init()
    宽度=1150
    高度=800
    screen=pygame.display.set_模式((宽度、高度))
    clock=pygame.time.clock()
    #图像。
    bgImg=pygame.image.load(“Football\u pitch.png”)
    REDGOAL=pg.Surface((50150),pg.SRCALPHA)
    REDGOAL.fill((255,0,0))
    redgoal_rect=redgoal.get_rect(左上方=(0340))
    redgoal\u mask=从曲面(redgoal)开始的pg.mask
    BLUEGOAL=pg.Surface((50150),pg.SRCALPHA)
    BLUEGOAL.fill((0,0255))
    bluegoal_rect=REDGOAL.get_rect(左上方=(1100340))
    bluegoal_mask=从_表面(REDGOAL)开始的pg.mask
    BLUECAR_ORIGINAL=pygame.Surface((50,30),pygame.SRCALPHA)
    pygame.draw.polygon(
    蓝车原版,(0,0255),[(0,30),(50,20),(50,10),(0,0)])
    bluecar=bluecar\u原件
    REDCAR_ORIGINAL=pygame.Surface((50,30),pygame.SRCALPHA)
    pygame.draw.polygon(
    红车原版,(255,0,0),[(0,0),(50,10),(50,20),(0,30)])
    redcar=redcar\u原件
    分数=0
    redspeed=7
    蓝速=7
    球x=575
    球y=400
    dx=0
    dy=0
    x=800
    y=500
    BALL=pygame.Surface((30,30),pygame.SRCALPHA)
    pygame.draw.circle(球[0,0,0],[15,15],15)
    #球变量。
    球位置=矢量2(球x,球y)
    ballrect=球。get_rect(中心=球位置)
    球水平=矢量2(dx,dy)
    ball_mask=pg.mask.自_表面(ball)
    #汽车变量。
    位置红色=矢量2(x,y)
    vel_red=矢量2(红色速度,0)
    redrect=redcar.get_rect(中心=pos_red)
    红色角度=180
    位置蓝色=矢量2(275300)
    蓝色水平=矢量2(蓝色速度,0)
    bluerect=bluecar.get_rect(中心=位置红色)
    蓝角=0
    #面具。
    mask_blue=pygame.mask.from_曲面(bluecar)
    mask_red=pygame.mask.from_surface(redcar)
    mask_ball=pygame.mask.from_曲面(球)
    ballrect=球。get_rect(中心=球位置)
    红色水平。旋转ip(-180)
    def redgoal():
    打印(“红色目标!!!”)
    球体x级=0
    滚珠y级=0
    球头位置x=575
    球头位置y=400
    def bluegoal():
    打印(“蓝色目标!!!”)
    boostedspeedred=10
    运行=真
    运行时:
    对于pygame.event.get()中的事件:
    如果event.type==pygame.QUIT:
    运行=错误
    如果y 450:
    y=440
    如果x>480:
    x=470
    如果ballrect.top<0且ball_.Level.y<0:
    球级别y*=-1
    elif ballrect.bottom>screen.get_height()和ball_vel.y>0:
    球级别y*=-1
    如果ballrect.left<0且ball_.x<0:
    球级别x*=-1
    elif ballrect.right>screen.get_width()和ball_Level.x>0:
    球级别x*=-1
    如果redrect.top<0且redrect.y<0:
    修正y*=+10
    elif redrect.bottom>screen.get_height()和redrect.y>0:
    redrect.y*=-10
    如果redrect.left<0且redrect.x<0:
    redrect.x*=-10
    elif redrect.right>screen.get_width()和redrect.x>0:
    redrect.x*=-10
    keys=pygame.key.get_pressed()
    如果键[pygame.K_左]:
    红色角度+=5
    红色水平。旋转ip(-5)
    redcar=pygame.transform.rotate(redcar\u原始,redangle)
    redrect=redcar.get_rect(center=redrect.center)
    #旋转后我们需要一个新的面具。
    mask_red=pygame.mask.from_surface(redcar)
    elif keys[pygame.K_RIGHT]:
    红色角度-=5
    红色水平。旋转ip(5)
    redcar=pygame.transform.rotate(redcar\u原始,redangle)
    redrect=redcar.get_rect(center=redrect.center)
    mask_red=pygame.mask.from_surface(redcar)
    elif keys[pygame.K_UP]:
    redspeed==10
    如果键[pygame.K_a]:
    蓝角+=5
    蓝色水平。旋转ip(-5)
    bluecar=pygame.transform.rotate(bluecar_ORIGINAL,blueangle)
    bluerect=bluecar.get_rect(中心=bluerect.center)
    mask_blue=pygame.mask.from_曲面(bluecar)
    elif keys[pygame.K_d]:
    蓝角-=5
    蓝色水平。旋转ip(5)
    bluecar=pygame.transform.rotate(bluecar_ORIGINAL,blueangle)
    bluerect=bluecar.get_rect(中心=bluerect.center)
    mask_blue=pygame.mask.from_曲面(bluecar)
    #把车开走。
    位置红色+=水平红色
    redrect.center=pos_red
    位置蓝色+=水平蓝色
    bluerect.center=位置为蓝色
    #移动球。
    球体水平*=0.99#摩擦力。
    球位+=球位
    ballrect.center=球位置
    #红色汽车相撞。
    #我们需要redrect和ballrect之间的偏移量。
    偏移量\u red=redrect[0]-ballrect[0],redrect[1]-ballrect[1]
    #将偏移量传递给“重叠”方法。如果面具相撞,
    #重叠将返回单个点,否则为“无”。
    重叠\红色=遮罩\球。重叠(遮罩\红色,偏移\红色)
    #蓝色汽车相撞。
    偏移量_blue=bluerect[0]-ballrect[0],bluerect[1]-ballrect[1]
    重叠\蓝色=遮罩\球。重叠(遮罩\蓝色,偏移\蓝色)
    偏移量=redgoal_-rect[0]-ballrect[0],redgoal_-rect[1]-ballrect[1]
    RedGoalLoverLap=球\u遮罩。重叠(redgoal\u遮罩,偏移)
    偏移量=bluegoal_-rect[0]-ballrect[0],bluegoal_-rect[1]-ballrect[1]
    BlueGoalLoverLap=球罩。重叠(bluegoal罩,偏移)
    如果红色GoalLoverLap:
    redgoal()
    如果BlueGoalLoverLap:
    蓝目标()
    如果重叠红色和重叠蓝色:#两者都与球碰撞。
    #不知道这里会发生什么。
    球形=红色+蓝色*1.4
    elif重叠红色:#红色coll
    
    import pygame
    import pygame as pg
    from pygame.math import Vector2
    
    
    pygame.init()
    
    
    WIDTH = 1150
    HEIGHT = 800
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    clock = pygame.time.Clock()
    # Images.
    bgImg = pygame.image.load("Football_pitch.png")
    REDGOAL = pg.Surface((50, 150), pg.SRCALPHA)
    REDGOAL.fill((255, 0, 0))
    redgoal_rect = REDGOAL.get_rect(topleft=(0, 340))
    redgoal_mask = pg.mask.from_surface(REDGOAL)
    BLUEGOAL = pg.Surface((50, 150), pg.SRCALPHA)
    BLUEGOAL.fill((0, 0, 255))
    bluegoal_rect = REDGOAL.get_rect(topleft=(1100, 340))
    bluegoal_mask = pg.mask.from_surface(REDGOAL)
    
    
    BLUECAR_ORIGINAL = pygame.Surface((50, 30), pygame.SRCALPHA)
    pygame.draw.polygon(
        BLUECAR_ORIGINAL, (0, 0, 255), [(0, 30), (50, 20), (50,10), (0, 0)])
    bluecar = BLUECAR_ORIGINAL
    REDCAR_ORIGINAL = pygame.Surface((50, 30), pygame.SRCALPHA)
    pygame.draw.polygon(
        REDCAR_ORIGINAL, (255, 0, 0), [(0, 0), (50, 10), (50, 20), (0, 30)])
    redcar = REDCAR_ORIGINAL
    
    score = 0
    redspeed = 7
    bluespeed = 7
    ball_x = 575
    ball_y = 400
    dx = 0
    dy = 0
    x = 800
    y = 500
    
    
    
    BALL = pygame.Surface((30, 30), pygame.SRCALPHA)
    pygame.draw.circle(BALL, [0,0,0], [15, 15], 15)
    # Ball variables.
    ball_pos = Vector2(ball_x, ball_y)
    ballrect = BALL.get_rect(center=ball_pos)
    ball_vel = Vector2(dx, dy)
    ball_mask = pg.mask.from_surface(BALL)
    # Car variables.
    pos_red = Vector2(x,y)
    vel_red = Vector2(redspeed,0)
    redrect = redcar.get_rect(center=pos_red)
    redangle = 180
    pos_blue = Vector2(275,300)
    vel_blue = Vector2(bluespeed,0)
    bluerect = bluecar.get_rect(center=pos_red)
    blueangle = 0
    # Masks.
    mask_blue = pygame.mask.from_surface(bluecar)
    mask_red = pygame.mask.from_surface(redcar)
    mask_ball = pygame.mask.from_surface(BALL)
    ballrect = BALL.get_rect(center=ball_pos)
    vel_red.rotate_ip(-180)
    
    def redgoal():
            print("Red Goal!!!")
            ball_vel.x = 0
            ball_vel.y = 0
            ball_pos.x = 575
            ball_pos.y = 400
    
    
    
    def bluegoal():
            print("Blue Goal!!!")
            boostedspeedred = 10
    
    
    run = True
    while run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
    
    
        if y <0:
            y = 10
        if y > 450:
            y = 440
        if x > 480:
            x = 470
    
    
    
        if ballrect.top < 0 and ball_vel.y < 0:
            ball_vel.y *= -1
        elif ballrect.bottom > screen.get_height() and ball_vel.y > 0:
            ball_vel.y *= -1
        if ballrect.left < 0 and ball_vel.x < 0:
            ball_vel.x *= -1
        elif ballrect.right > screen.get_width() and ball_vel.x > 0:
            ball_vel.x *= -1
    
        if redrect.top < 0 and redrect.y < 0:
            redrect.y *= +10
        elif redrect.bottom > screen.get_height() and redrect.y > 0:
            redrect.y *= -10
        if redrect.left < 0 and redrect.x < 0:
            redrect.x *= -10
        elif redrect.right > screen.get_width() and redrect.x > 0:
            redrect.x *= -10
    
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            redangle += 5
            vel_red.rotate_ip(-5)
            redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
            redrect = redcar.get_rect(center=redrect.center)
            # We need a new mask after the rotation.
            mask_red = pygame.mask.from_surface(redcar)
        elif keys[pygame.K_RIGHT]:
            redangle -= 5
            vel_red.rotate_ip(5)
            redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
            redrect = redcar.get_rect(center=redrect.center)
            mask_red = pygame.mask.from_surface(redcar)
        elif keys[pygame.K_UP]:
            redspeed == 10
    
    
    
        if keys[pygame.K_a]:
            blueangle += 5
            vel_blue.rotate_ip(-5)
            bluecar = pygame.transform.rotate(BLUECAR_ORIGINAL, blueangle)
            bluerect = bluecar.get_rect(center=bluerect.center)
            mask_blue = pygame.mask.from_surface(bluecar)
        elif keys[pygame.K_d]:
            blueangle -= 5
            vel_blue.rotate_ip(5)
            bluecar = pygame.transform.rotate(BLUECAR_ORIGINAL, blueangle)
            bluerect = bluecar.get_rect(center=bluerect.center)
            mask_blue = pygame.mask.from_surface(bluecar)
    
    
        # Move the cars.
        pos_red += vel_red
        redrect.center = pos_red
        pos_blue += vel_blue
        bluerect.center = pos_blue
        # Move the ball.
        ball_vel *= .99  # Friction.
        ball_pos += ball_vel
        ballrect.center = ball_pos
    
        # Red car collision.
        # We need the offset between the redrect and the ballrect.
        offset_red = redrect[0] - ballrect[0], redrect[1] - ballrect[1]
        # Pass the offset to the `overlap` method. If the masks collide,
        # overlap will return a single point, otherwise `None`.
        overlap_red = mask_ball.overlap(mask_red, offset_red)
        # Blue car collision.
        offset_blue = bluerect[0] - ballrect[0], bluerect[1] - ballrect[1]
        overlap_blue = mask_ball.overlap(mask_blue, offset_blue)
        offset = redgoal_rect[0] - ballrect[0], redgoal_rect[1] - ballrect[1]
        redgoaloverlap = ball_mask.overlap(redgoal_mask, offset)
        offset = bluegoal_rect[0] - ballrect[0], bluegoal_rect[1] - ballrect[1]
        bluegoaloverlap = ball_mask.overlap(bluegoal_mask, offset)
    
        if redgoaloverlap:
            redgoal()
        if bluegoaloverlap:
            bluegoal()
    
        if overlap_red and overlap_blue:  # Both collide with the ball.
            # Not sure what should happen here.
            ball_vel = vel_red + vel_blue * 1.4
        elif overlap_red:  # Red collides with the ball.
            ball_vel = Vector2(vel_red) * 1.4
        elif overlap_blue:  # Blue collides with the ball.
            ball_vel = Vector2(vel_blue) * 1.4
    
    
    
    
        # Drawing.
        screen.blit(bgImg, (0, 0))
        screen.blit(BALL, ballrect)
        screen.blit(redcar, redrect)
        screen.blit(bluecar, bluerect)
        screen.blit(REDGOAL, redgoal_rect)
        screen.blit(BLUEGOAL, bluegoal_rect)
    
        pygame.display.flip()
        pygame.display.update()
        clock.tick(60)
    
    pygame.quit()