【问题标题】:Trying to get my player to transfrom.flip python试图让我的玩家transform.flip python
【发布时间】:2019-02-03 11:17:14
【问题描述】:

我在 pygame 上苦苦挣扎。当我分别按下左右键时,我希望我的播放器移动并面向右侧或左侧。相反,它只是翻转。不知道怎么让它指向左边,或者右边然后走。

run = True

while run:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            run = False

        if event.type == pg.KEYDOWN:
            if event.key == pg.K_RIGHT:
                swordsman = pg.transform.flip(swordsman, True, False)
                x += speed

            if event.key == pg.K_LEFT:
                swordsman = pg.transform.flip(swordsman, True, False)
                x -= speed

【问题讨论】:

    标签: python python-3.x pygame transform flip


    【解决方案1】:

    swordsmanpygame.Sprite 对象吗?如果是,它本身应该包含一个pygame.Rect 对象。变量x 只是一个变量,它的变化对你的swordsman 没有影响。试试swordsman.rect.x = x

    【讨论】:

    • 如果是,它应该包含一个 pygame.Rect 不,那是错误的。虽然您可以在Surface 上调用get_rect(),但生成的Rect 只会描述它的大小,与它在屏幕上的绘制位置无关。您正在考虑Sprite,它实际上结合了SpriteRect
    【解决方案2】:

    您可以使用pg.key.get_pressed() 检查按键的状态以查看是否按下了 ←→(如下例所示),或者,将speed 变量更改为事件循环中的另一个值,然后更改x 位置(x += speed)而不是事件循环中的while 循环中的每一帧(释放键时将速度重置为0)。

    关于图像翻转,保留对原始图像的引用并将其分配给swordsman变量。当玩家想要向另一个方向移动时,翻转原图并赋值(如果是原图移动就赋值原图)。

    import pygame as pg
    
    
    pg.init()
    screen = pg.display.set_mode((640, 480))
    clock = pg.time.Clock()
    BG_COLOR = pg.Color('gray12')
    # This is the original swordsman image/surface (just a
    # rectangular surface with a dark topleft corner).
    SWORDSMAN_ORIGINAL = pg.Surface((30, 50))
    SWORDSMAN_ORIGINAL.fill((50, 140, 200))
    pg.draw.rect(SWORDSMAN_ORIGINAL, (10, 50, 90), (0, 0, 13, 13))
    # Assign the current swordsman surface to another variable.
    swordsman = SWORDSMAN_ORIGINAL
    x, y = 300, 200
    speed = 4
    
    run = True
    while run:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                run = False
            elif event.type == pg.KEYDOWN:
                if event.key == pg.K_RIGHT:
                    # When the player presses right, flip the original
                    # and assign it to the current swordsman variable.
                    swordsman = pg.transform.flip(SWORDSMAN_ORIGINAL, True, False)
                elif event.key == pg.K_LEFT:
                    # Here you can just assign the original.
                    swordsman = SWORDSMAN_ORIGINAL
    
        # Check the state of the keys each frame.
        keys = pg.key.get_pressed()
        # Move if the left or right keys are held.
        if keys[pg.K_LEFT]:
            x -= speed
        elif keys[pg.K_RIGHT]:
            x += speed
    
        screen.fill(BG_COLOR)
        screen.blit(swordsman, (x, y))
        pg.display.flip()
        clock.tick(60)
    
    pg.quit()
    

    【讨论】:

    • 谢谢!它也像我希望的那样工作!我完全不明白发生了什么!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2021-06-15
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2021-04-09
    相关资源
    最近更新 更多