Python Forum

Full Version: Rectangle keeps teleporting?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi, I am trying to make this cube move, but it just teleports when I let go of an arrow key. Please help!

import pygame

pygame.init()

# screen variables
sWidth = 1000
sHeight = 700

# colours
red = (255, 0, 0)
black = (0, 0, 0)
white = (255, 255, 255)

# Main mechanics
gDisplay = pygame.display.set_mode((sWidth, sHeight))
clock = pygame.time.Clock()
pygame.display.set_caption('Zube')




def gameStart():
    # Mechanics

    # Shapes and stuff
    playerStartingx = 64
    playerStartingy = sHeight - 100
    playerWidth = 60
    playerHeight = 60

    # Game Loop Variable
    playing = True

    while playing:
        for event in pygame.event.get():
            gDisplay.fill(white)
            pygame.draw.rect(gDisplay, red, [playerStartingx, playerStartingy, playerWidth, playerHeight], 0)
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    playerStartingx += -50

                elif event.key == pygame.K_RIGHT:
                    playerStartingx += 50

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    playerStartingx += 0

        pygame.display.update()
        clock.tick(60)


gameStart()
I apologize if the formatting on this isn't 100% correct, this is my first post.

(Jun-25-2018, 08:41 PM)keyfive Wrote: [ -> ]
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    playerStartingx += 0

You can make your code simpler by taking this out. I think you thought this was speed: If the key is down, you wanted the object going 50 pixels / frame and if the key is released the object goes 0 pixels / frame. However in your code, you are changing the position each time a key is pressed. The object will move +-50 pixels if a key is pressed down and 0 pixels if the key is up. <<< and this is why you don't need this part of the code, because the object won't move anyway.

When I tested the changes, the block still jumps but it is smoother. I suspect it has to do something with the for loop going through events. I think when a key is pressed it adds an event so the list just keeps getting longer. That's just a guess though because I don't have any experience with pygame.

Hopefully this will help you find that bug!