I am trying to make my sprite move in only 4 dimensions, left, right, up, and down. How can I make the sprite not go crosswise?
'''
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, "Tanks", "playerTankDown.png")).convert()
self.leftImage = pygame.image.load(os.path.join(imgFolder, "Tanks", "playerTankLeft.png")).convert()
self.rightImage = pygame.image.load(os.path.join(imgFolder, "Tanks", "playerTankRight.png")).convert()
self.image = self.upImage
self.image.set_colorkey((0, 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, 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
'''
I have coded the movement for 4 dimensions, when I press A button in my keyboard, it goes to left, while holding left, if I press D, it stops and turns to right. This is nice, no problem. However, if I press W while holding left, it goes in up-left direction. How can I make this not happen. If I am holding A, and if I press W while holding A, I want the sprite to continue its movement in left direction.