微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让我的精灵在pygame中不交叉?

如何解决如何让我的精灵在pygame中不交叉?

我试图让我的精灵仅在4个维度上移动,左,右,上和下。如何使子画面不交叉?

'''

class Tank(pygame.sprite.Sprite):
# Sprite for the Tank
# Constructor function - runs whenever you create a Tank object.
def __init__(self,xCoordinate,yCoordinate):
    pygame.sprite.Sprite.__init__(self)  # So the sprite functions properly
    self.upImage = pygame.image.load(os.path.join(imgFolder,"Tanks","playerTankUp.png")).convert()
    self.downImage = pygame.image.load(os.path.join(imgFolder,"playerTankDown.png")).convert()
    self.leftimage = pygame.image.load(os.path.join(imgFolder,"playerTankLeft.png")).convert()
    self.rightimage = pygame.image.load(os.path.join(imgFolder,"playerTankRight.png")).convert()

    self.image = self.upImage
    self.image.set_colorkey((0,0))

    self.rect = self.image.get_rect()  # With this function we surround the image with a rectangle which is
    # extremely useful when we handle collisions.
    self.rect.centerx = xCoordinate
    self.rect.bottom = yCoordinate
    self.speedX = 0     # Speed in x direction when created
    self.speedY = 0     # Speed in y direction when created


def update(self):
    self.speedX = 0
    self.image.set_colorkey((0,0))
    keystate = pygame.key.get_pressed()  # This returns a list containing every key on keyboard that happens
                                         # to be down right at this instant
    if keystate[pygame.K_LEFT] or keystate[pygame.K_a]:  # Check if the left arrow key is down at the moment
        self.image = self.leftimage
        self.speedX = -7
        self.rect.x += self.speedX

    if keystate[pygame.K_RIGHT] or keystate[pygame.K_d]:
        self.image = self.rightimage
        self.speedX = 7
        self.rect.x += self.speedX

    if keystate[pygame.K_UP] or keystate[pygame.K_w]:
        self.image = self.upImage
        self.speedY = -7
        self.rect.y += self.speedY

    if keystate[pygame.K_DOWN] or keystate[pygame.K_s]:
        self.image = self.downImage
        self.speedY = 7
        self.rect.y += self.speedY

'''

我已将运动编码为4个维度,当我按下键盘上的A按钮时,它会移至左侧;按住I的同时,如果我按D键,它将停止并向右旋转。很好,没问题。但是,如果我在按住W的同时按W,则它沿左上方向移动。我如何才能做到这一点。如果我握住A,并且在握住A的同时按W,则希望精灵继续向左移动。

解决方法

问题出在您的if此处:

if keystate[pygame.K_LEFT] or keystate[pygame.K_a]:  # Check if the left arrow key is down at the moment
    self.image = self.leftImage
    self.speedX = -7
    self.rect.x += self.speedX

if keystate[pygame.K_RIGHT] or keystate[pygame.K_d]:
    self.image = self.rightImage
    self.speedX = 7
    self.rect.x += self.speedX

if keystate[pygame.K_UP] or keystate[pygame.K_w]:
    self.image = self.upImage
    self.speedY = -7
    self.rect.y += self.speedY

if keystate[pygame.K_DOWN] or keystate[pygame.K_s]:
    self.image = self.downImage
    self.speedY = 7
    self.rect.y += self.speedY

在同一时间按住多个键时,例如,左箭头键和上箭头键, keystate[pygame.K_LEFT]keystate[pygame.K_UP]都将在同一迭代中返回True。 因此就像“哦,您向左按下,所以我将从7中删除x”,同时 “哦,您按下了,所以我将从7中删除y”。

您可以通过将最后三个if语句更改为elif来避免这种情况。这样做是为了告诉python: “只有在我上方没有发生这种情况时,才对我进行评估。如果发生了,请跳过我。”

使用

if keystate[pygame.K_LEFT] or keystate[pygame.K_a]:  # Check if the left arrow key is down at the moment
    self.image = self.leftImage
    self.speedX = -7
    self.rect.x += self.speedX

elif keystate[pygame.K_RIGHT] or keystate[pygame.K_d]:
    self.image = self.rightImage
    self.speedX = 7
    self.rect.x += self.speedX

elif keystate[pygame.K_UP] or keystate[pygame.K_w]:
    self.image = self.upImage
    self.speedY = -7
    self.rect.y += self.speedY

elif keystate[pygame.K_DOWN] or keystate[pygame.K_s]:
    self.image = self.downImage
    self.speedY = 7
    self.rect.y += self.speedY

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。