所以我试图用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)
但是猫咪只是一直走到窗口的尽头。我究竟做错了什么?提前谢谢。
答案 0 :(得分:0)
if catRight >= WINDOWWIDTH:
moveRight = False
catright = WINDOWHEIGHT
if moveRight == True:
catx += 5
我认为这是你的错误所在。
答案 1 :(得分: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
当然,您可以将这个想法扩展到所有其他边缘。