平铺运动

2024-05-14 20:57:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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)

我希望我能清楚地说明我想做什么,如果没有,我会尽力回答他们。我不懂面向对象编程,而且由于我的日程安排,我没有时间学习,所以我希望你能帮助我而不使用类。如果相关的话,我也使用python3.4.4。在


Tags: eventfalsetruegetifscreenpygameelif

热门问题