碰撞检测后运动停止-Pygame

莎拉·尤萨夫(Sarah Yousaf)

我最近在程序中添加了碰撞检测功能,因此,pacman的运动已完全停止,我似乎无法弄清原因。在添加碰撞检测之前,运动很好。下面是我的代码,如果有人可以帮助我,我将不胜感激!

# Import relevant modules
import pygame, sys
from pygame.locals import *

# Colours
global BLACK
BLACK = (0,0,0)


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
    global pacman_image
    global block_image
    pacman_image = pygame.image.load("pacmanphoto.png").convert_alpha()
    block_image = pygame.image.load("blockphoto.png").convert_alpha()
    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()


            # 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 
            screen.blit(pacman_image, (x, y))
            screen.blit(block_image, (block_x, block_y))        

            clock.tick(12)
            pygame.display.update()
            screen.fill(BLACK)

Pacman()
pygame.quit()
迈克尔·贾瑞特

就像现在的代码一样,让“吃豆人”运动起来没有问题,但是碰撞检测代码没有任何作用。这是因为您正在使用元组(x,y)将“吃豆人”绘制到屏幕上,而碰撞检测代码仅操纵另外两个局部变量pac_xpac_y,而绘制代码从未使用过这些变量解决方法是删除以下两行:

pac_x = 10
pac_y = 10

并更换所有出现pac_x,并pac_yxy这样可以释放精灵来回移动。

冲突检测的问题仍然存在,不幸的是,该问题的解决方案比两个if语句更复杂最重要的是,您需要考虑吃豆人精灵的宽度,因此需要替换

if block_x + block_width > x > block_x:

用类似的东西

if x < block_x and (x + pac_width) > block_x:

发生左侧碰撞

if x < (block_x + block_width) and (x + pac_width) > (block_x + block_width):

发生右侧碰撞 应该对顶部和底部碰撞进行类似的检查,吃豆人应该被夹住的方向应该取决于碰撞发生的哪一侧。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章