我试图使用Pygame和Tiled一起制作游戏。问题是,当我试图移动我的角色时,它会从一个瓦片到另一个瓦片(16x16瓦片网格)如此快速,即使我降低了fps,它看起来像是从一个瓦片传送到另一个瓦片(我的运动增加了16像素,因此它与地图匹配)。我想要实现的有点像当你移动口袋妖怪时会发生什么,当你从一块瓷砖移动到另一块瓷砖时你可以看到平滑的动画(我使用Pyganim进行步行动画)。
while running:
ColDetectposX = gameMap.get_tile_properties(((posX/16)+1),((posY/16)),1)
ColDetectnegX = gameMap.get_tile_properties(((posX/16)-1),((posY/16)),1)
ColDetectposY = gameMap.get_tile_properties(((posX/16)),((posY/16)+1),1)
ColDetectnegY = gameMap.get_tile_properties(((posX/16)),((posY/16)-1),1)
if facedown:
screen.blit(chardown,(posX,posY))
elif faceup:
screen.blit(charup,(posX,posY))
elif faceleft:
screen.blit(charleft,(posX,posY))
elif faceright:
screen.blit(charright,(posX,posY))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
walking = True
if event.key == pygame.K_RIGHT:
try:
if ColDetectposX['Collision'] == 'true':
walkright.blit(screen, (posX,posY))
facedown=False
faceup=False
faceleft=False
faceright=True
pass
else:
walkright.blit(screen, (posX,posY))
facedown=False
faceup=False
faceleft=False
faceright=True
posX+=16
except TypeError:
facedown=False
faceup=False
faceleft=False
faceright=True
posX+=16
elif event.key == pygame.K_LEFT:
try:
if ColDetectnegX['Collision'] == 'true':
walkleft.blit(screen, (posX,posY))
facedown=False
faceup=False
faceleft=True
faceright=False
pass
else:
facedown=False
faceup=False
faceleft=True
faceright=False
walkleft.blit(screen, (posX,posY))
posX-=16
except TypeError:
facedown=False
faceup=False
faceleft=True
faceright=False
walkleft.blit(screen, (posX,posY))
posX-=16
elif event.key == pygame.K_UP:
try:
if ColDetectnegY['Collision'] == 'true':
walkup.blit(screen, (posX,posY))
facedown=False
faceup=True
faceleft=False
faceright=False
pass
else:
facedown=False
faceup=True
faceleft=False
faceright=False
walkup.blit(screen, (posX,posY))
posY-=16
except TypeError:
facedown=False
faceup=True
faceleft=False
faceright=False
walkup.blit(screen, (posX,posY))
posY-=16
elif event.key == pygame.K_DOWN:
try:
if ColDetectposY['Collision'] == 'true':
walkdown.blit(screen, (posX,posY))
facedown=True
faceup=False
faceleft=False
faceright=False
pass
else:
facedown=True
faceup=False
faceleft=False
faceright=False
walkdown.blit(screen, (posX,posY))
posY+=16
except TypeError:
facedown=True
faceup=False
faceleft=False
faceright=False
walkdown.blit(screen, (posX,posY))
posY+=16
pygame.display.update()
fps.tick(11)
我希望我能清楚地解释我想做什么,如果不是,我会尽力尽力回答。我不知道面向对象编程,由于我的日程安排,我没有时间学习,所以我希望你能不用课程来帮助我。如果相关,我也使用python 3.4.4。