I have a problem with my pygame game. I made an player animation when the player is moving. I also added a bullet. My problem is that after I used my bullet my player and the bullet is flickering. When i only update the display on the end, you can not see the bullet. Multiple updates bring the issue of flickering player and bullet. pls help me. Thank you
import random
import pygame
# Intialize the pygame
pygame.init()
# create the screen
screen = pygame.display.set_mode((640, 360))
# Background
background = pygame.image.load('SSF2_Final_Valley.png')
walkRight = [pygame.image.load('R1a.png'), pygame.image.load('R2a.png'), pygame.image.load('R3a.png'), pygame.image.load('R4a.png'), pygame.image.load('R5a.png'), pygame.image.load('R6a.png'), pygame.image.load('R7a.png'), pygame.image.load('R8a.png'), pygame.image.load('R9a.png')]
walkLeft = [pygame.image.load('L1a.png'), pygame.image.load('L2a.png'), pygame.image.load('L3a.png'), pygame.image.load('L4a.png'), pygame.image.load('L5a.png'), pygame.image.load('L6a.png'), pygame.image.load('L7a.png'), pygame.image.load('L8a.png'), pygame.image.load('L9a.png')]
char = pygame.image.load('stand.png')
vel = 5
width = 64
screen_width = 640
left = False
right = False
clockobject = pygame.time.Clock()
#player
playerImg = pygame.image.load('stand.png')
playerX = 15
playerY = 290
playerX_change = 0
# Bullet
# Ready - You can't see the bullet on the screen
# Fire - The bullet is currently moving
bulletImg = pygame.image.load('kunai.png')
bulletX = 15
bulletY = 290 - 32
bulletX_change = 3
bulletY_change = 0
bullet_state = "ready"
def redrawGameWindow():
global player
def player(x, y):
global walkCount
screen.blit(background, (0,0))
#chracter wird gezecihnet
if walkCount + 1 >= 20:
walkCount = 0
if left:
screen.blit(walkLeft[walkCount//3], (x, y))
walkCount += 1
elif right:
screen.blit(walkRight[walkCount//3], (x, y))
walkCount += 1
else:
screen.blit(char, (x, y))
pygame.display.update()
global fire_bullet
def fire_bullet(x, y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletImg, (x + 32, y + 32))
pygame.display.update()
#pygame.display.update()
running = True
while running:
# RGB = Red, Green, Blue
screen.fill((0, 0, 0))
# Background Image
screen.blit(background, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
exit()
# if keystroke is pressed check whether its right or left
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
if bullet_state is "ready":
# Get the current x cordinate of the spaceship
bulletX = playerX
fire_bullet(bulletX, bulletY)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and playerX > vel:
playerX -= vel
left = True
right = False
elif keys[pygame.K_RIGHT] and playerX < screen_width- width :
playerX += vel
right = True
left = False
else:
right = False
left = False
walkCount = 0
# 5 = 5 + -0.1 -> 5 = 5 - 0.1
# 5 = 5 + 0.1
# Bullet Movement
if bulletX <= 0:
bulletX = 15
bullet_state = "ready"
if bullet_state is "fire":
fire_bullet(bulletX, bulletY)
bulletX += bulletX_change
if (bulletX > screen_width-width):
bullet_state = "ready"
redrawGameWindow()
player(playerX, playerY)
pygame.display.update()