试图让我的播放器转换为transfrom.flip python

试图让我的播放器转换为transfrom.flip python,python,python-3.x,pygame,transform,flip,Python,Python 3.x,Pygame,Transform,Flip,我正在与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

我正在与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

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

您可以使用检查键的状态,查看是否←或→按下(如下例所示)或将
speed
变量更改为事件循环中的另一个值,然后更改while循环中不在事件循环中的每个帧的
x
位置(
x+=speed

关于图像翻转,保留对原始图像的引用,并将其分配给
browsman
变量。当玩家想要向另一个方向移动时,翻转原始图像并指定它(如果他们向原始方向移动,只需指定原始图像)


如果是,它应该包含一个pygame。Rect不,那是错误的。虽然可以在
曲面上调用
get_rect()
,但生成的
rect
将只描述其大小,而与在屏幕上绘制的位置无关。您正在考虑一个
精灵
,它实际上结合了
精灵
矩形
。谢谢!正如我所希望的那样,它工作得非常好!虽然我完全不明白发生了什么事!
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()