Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyGame] Rectangle keeps teleporting?
#1
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()

Quote
#2
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!
Quote

Top Page

Forum Jump:


Users browsing this thread: 1 Guest(s)