基于平铺的运动pygame

时间:2016-10-13 07:17:17

标签: python animation pygame tiled

我试图使用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。

0 个答案:

没有答案