1
import sys

import pygame

(width, height) = (800, 600)
screen = pygame.display.set_mode((width, height))
pygame.display.flip()

#Title and Icon
pygame.display.set_caption("Space Invader")
icon = pygame.image.load("spaceship.png")
pygame.display.set_icon(icon)

#Player
playerImg = pygame.image.load("player.png")
playerX = 370
playerY = 480
player_change = 0


def player(x, y):
    screen.blit(playerImg, (x, y))


#Game loop
running = True
while running:
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        pygame.display.flip()

        #RGB- Red, Green, Blue
        screen.fill((0, 128, 128))

# if keystroke is pressed check whether its right or left
        if event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_LEFT:
                     playerX_change = -0.1
                 if event.key == pygame.K_RIGHT:
                     playerX_change = 0.1
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0.1

    # 5 = 5 + -0.1 -> 5 = 5 -0.1
    # 5 = 5 + 0.1
    playerX += playerX_change
    player(playerX, playerY)
    pygame.display.update()

New atcoding so I followed this youtube video and there his image loaded and mine did too at first. But later if I added these lines of code, it stopped appearing on the screen. I followed his instructions step by step.

 if event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_LEFT:
                     playerX_change = -0.1
                 if event.key == pygame.K_RIGHT:
                     playerX_change = 0.1
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0.1

How can i solve this problem

Rabbid76
  • 202,892
  • 27
  • 131
  • 174
alex
  • 11
  • 4

2 Answers2

1

You just need 1 application loop. All the events must be handled in the event loop. You have to correct the Indentation.
Also see How to get keyboard input in pygame?:

speed = 1 

# application loop
clock = pygame.time.Clock() 
running = True
while running:
    clock.tick(100)

    # event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            
    keys = pygame.key.get_pressed()
    playerX += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * speed       

    # clear display
    screen.fill((0, 128, 128))

    # draw scene 
    player(playerX, playerY)

    # update diesplay
    pygame.display.update()

pygame.quit()
sys.exit()

The typical PyGame application loop has to:

Rabbid76
  • 202,892
  • 27
  • 131
  • 174
0
while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        pygame.display.flip()

        #RGB- Red, Green, Blue
        screen.fill((0, 128, 128))

# if keystroke is pressed check whether its right or left
        if event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_LEFT:
                     playerX_change = -0.1
                 if event.key == pygame.K_RIGHT:
                     playerX_change = 0.1
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0.1

        # **This code is outside of main loop**
        playerX += playerX_change
        player(playerX, playerY)
        pygame.display.update()

You are running main loop twice(while running) and the new code you added was out of it's scope.