1

所以我试图用 Python 和 Pygame 创建一个益智平台游戏,但我遇到了一些麻烦。当我为主角使用 blitted 图像而不是 rect 图像时,如何制作碰撞检测器?我知道 rect 图像具有左、右、顶部和底部像素功能(这对于碰撞检测非常有用)但是对于 blitted 图像有类似的东西吗?还是我只需要为 x 和 y 坐标 + 图像的宽度/高度创建一个变量?我试过使用

import pygame, sys
from pygame.locals import *

WINDOWWIDTH = 400
WINDOWHEIGHT = 300
WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')
catx = 0
caty = 0
catRight = catx + 100
catBot = caty + 100

moveRight = False

pygame.init()


FPS = 40 # frames per second setting
fpsClock = pygame.time.Clock()

# set up the window
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
pygame.display.set_caption('Animation')


while True: # the main game loop
    DISPLAYSURF.fill(WHITE)

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            if event.key in (K_RIGHT, K_w):
                moveRight = True

        elif event.type == KEYUP:
            if event.key in (K_RIGHT, K_w):
                moveRight = False

    if catRight == WINDOWWIDTH:
        moveRight = False
    if moveRight == True:
        catx += 5

    DISPLAYSURF.blit(catImg, (catx, caty))


    pygame.display.update()
    fpsClock.tick(FPS)

但是 catImg 只是一直越过窗口的尽头。我究竟做错了什么?提前致谢。

4

2 回答 2

0
if catRight >= WINDOWWIDTH:
        moveRight = False
        catright = WINDOWHEIGHT
    if moveRight == True:
        catx += 5

我认为这就是你的错误所在。

于 2013-10-12T20:13:00.940 回答
0

为了防止图像偏离右边缘,您需要计算其 x 坐标可以具有的最大值,并确保永远不会超过该值。所以在循环之前创建一个包含值的变量:

CAT_RIGHT_LIMIT = WINDOWWIDTH - catImg.get_width()

然后在循环中检查它:

if catx >= CAT_RIGHT_LIMIT:
    moveRight = False
    catx = CAT_RIGHT_LIMIT
if moveRight == True:
    catx += 5

当然,您可以将此想法扩展到所有其他边缘。

于 2013-10-12T20:47:11.630 回答