【问题标题】:Pacman - Collision Detection Problems (Pygame)Pacman - 碰撞检测问题 (Pygame)
【发布时间】:2019-12-27 22:42:30
【问题描述】:

我对 Pygame 比较陌生,我正在尝试为一个项目创建 Pacman 游戏。我在 Pacman 和这个块(导入的图像)之间进行碰撞检测时遇到问题。 Pacman 直接穿过了我不想发生的障碍;我想要它,这样吃豆人就不能通过它。我搜索了许多网站和许多论坛,并尝试了许多其他人使用过的不同方法,但我似乎无法理解碰撞检测。以下是我当前的代码。

def Pacman():
    pygame.init()
    # Creating screen
    global screen
    screen = pygame.display.set_mode((0,0), pygame.FULLSCREEN)
    screen = pygame.display.set_mode((0,0), pygame.RESIZABLE)
    # Setting window caption
    pygame.display.set_caption('Pacman')
    # Loading two images
    pacman_image = pygame.image.load("pacmanphoto.png").convert_alpha()
    block_image = pygame.image.load("blockphoto.png").convert_alpha()
    rect1 = pacman_image.get_rect()
    rect2 = block_image.get_rect()
    rect1.x = 100
    rect1.y = 200
    rect2.x = 300
    rect2.y = 400

    clock = pygame.time.Clock()
    x = 10
    y = 10
    pygame.key.set_repeat(10, 10)
    # Movement
    while True:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    y -= 10
                if event.key == pygame.K_DOWN:
                    y += 10
                if event.key == pygame.K_RIGHT:
                    x += 10
                if event.key == pygame.K_LEFT:
                    x -= 10
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        if rect1.colliderect(rect2):
            y -=10
        ##### where collision detection should be ####


        # Displaying images on screen
        screen.blit(pacman_image, (x,y))
        screen.blit(block_image, (50,50))
        clock.tick(12)
        pygame.display.update()
        screen.fill(BLACK)

如果有人能以任何方式帮助我,请告诉我:) 谢谢

【问题讨论】:

    标签: python-3.x pygame collision-detection


    【解决方案1】:

    首先,您的代码相当杂乱无章。我建议使用类,以便 Pacman 函数看起来更清晰、可读,并且所有内容都不会被压缩在一个函数中。 如果你不想让吃豆人穿过街区,你应该知道你在做什么。你不希望 Pacman 穿过方块,这基本上意味着如果 Pacman 的 y(y 轴值)在方块的 y 轴和 x 轴之间,那么就会发生碰撞,从这里开始您可以将 pacman_x 和 pacman 的 y 设置为块的 x 和 y。

    # Inside The Pacman Function
    pac_x = 10
    pac_y = 10
    block_x = 50
    block_y = 50
    # getting the block's height and width
    block_width, block_height = block_image.get_size()
    ##### where collision detection should be ####
    if block_x + block_width > pac_x > block_x:
        if block_y + block_height > pac_y > block_y:
            print('Collision occurred.')
            pac_x = block_x
            pac_y = block_y
            # Here you can add more functionality to your game
    # Displaying images on screen
    screen.blit(pacman_image, (pac_x,pac_y))
    screen.blit(block_image, (block_x, block_y))
    

    【讨论】:

    • 您好阿南特,感谢您的回复。但是,在运行代码时,我似乎得到了一个空白的黑屏。
    • 他没有写完整的代码。您应该使用 Pacman 函数中包含的他的代码运行自己的代码,根据他的代码更改变量和内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多