So I'm creating a simple minigame for my University classes. I'm new to Python/Pygame and I've come across minor bugs. I want to make my Player(Sprite) jump and have jumping animation when i click "w" or "key_up" but it doesn't seem to work. Walking animations work no problem. Also I want the Enemy when hits certain x position to stop walking animation and start attacking animation but it also doesn't seem to work.
import pygame
from glob import glob
import sys
from pygame.locals import *
# background = pygame.Surface((640, 400))
# background.fill((30, 90, 120))
# background = pygame.image.load('91cc401f51287f6cde01233e7f01623f-700x400.png')
background = pygame.image.load('game_background_1.png')
# W, H = 640, 400
W, H = 960, 540
HW, HH = W / 2, H / 2
AREA = W * H
FPS = 60
bg_x = 0
isJump = False
jumpCount = 10
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((W, H))
window = pygame.display.set_mode((W, H))
class Sprite(pygame.sprite.Sprite):
def __init__(self, x, y):
super(Sprite, self).__init__()
self.isJump = False
self.jumpCount = 10
self.x = x
self.y = y
self.SpriteWalking = glob("Knight/Walking/*.png")
self.SpriteIdle = glob("Knight/Idle/*png")
self.load_images()
self.rect = self.image.get_rect()
self.rect.topleft = [x, y]
self.rect.x = 50
self.rect.y = 200
def load(self, x):
return pygame.image.load(x).convert_alpha()
def flip(self, x):
return pygame.transform.flip(self.load(x), 1, 0)
def load_images(self):
self.walkList = [self.load(f) for f in self.SpriteWalking]
self.walkList_flip = [self.flip(f) for f in self.SpriteWalking]
self.idleList = [self.load(f) for f in self.SpriteIdle]
self.idleList_flip = [self.flip(f) for f in self.SpriteIdle]
self.counter = 0
self.image = self.walkList[0]
self.rect = self.image.get_rect()
self.dir = ""
self.prov = ""
g.add(self)
def update_counter(self, vel, img_list):
self.counter += vel
if self.counter >= len(img_list):
self.counter = 0
self.image = img_list[int(self.counter)]
def update(self):
if moveRight:
self.update_counter(.3, self.walkList)
self.prov = self.dir
if moveLeft:
self.update_counter(.1, self.walkList_flip)
# self.image = self.listflip[int(self.counter)]
self.prov = self.dir
if self.dir == "":
self.update_counter(.1, self.idleList)
if moveRight:
self.image = self.idleList[int(self.counter)]
else:
self.image = self.idleList_flip[int(self.counter)]
def jump(self):
global jumpCount, isJump
if pressed_keys[K_UP] or pressed_keys[K_w]:
if jumpCount >= -10:
isJump = True
# skok = pygame.image.load('0_Fallen_Angels_Falling Down_003.png')
# window.blit(skok, self.x, self.y)
neg = 1
if jumpCount < 0:
neg = -1
self.y -= (jumpCount ** 2) * 0.1 * neg
jumpCount -= 1
else:
isJump = False
jumpCount = 10
def crouch(self):
crouch_jpg = pygame.image.load('0_Fallen_Angels_Throwing_007.png')
window.blit(crouch_jpg, (self.x, self.y))
g = pygame.sprite.Group()
# player = Rycerz(50, 200)
player = Sprite(50, 250)
# g.add(player)
moveLeft = False
moveRight = False
MOVESPEED = 3
class Ogre2(pygame.sprite.Sprite):
def __init__(self, x, y):
self.x = x
self.y = y
super().__init__()
self.walk_animation = False
self.sprites = []
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_000.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_002.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_004.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_006.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_008.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_010.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_012.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_014.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_016.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_018.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_020.png'))
self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_022.png'))
self.current_sprite = 0
self.image = self.sprites[self.current_sprite]
self.swing_animation = False
self.ataki = []
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_000.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_001.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_002.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_003.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_004.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_005.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_006.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_007.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_008.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_009.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_010.png'))
self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_011.png'))
self.image2 = self.ataki[self.current_sprite]
self.rect = self.image.get_rect()
self.rect.topleft = [x, y]
self.rect.x = 700
self.speedy = 0.05
# if x > 120:
# x -= 0.3
def update2(self):
self.rect.x -= self.speedy
if self.rect.x == 90:
self.speedy = 0
def swingattack(self):
self.swing_animation = False
if self.rect.x == 90:
self.swing_animation = True
def attack(self):
self.walk_animation = True
if self.rect.x == 90:
self.walk_animation = False
def update(self, speed):
if self.walk_animation:
self.current_sprite += speed
if int(self.current_sprite) >= len(self.sprites):
self.current_sprite = 0
self.walk_animation = False
self.image = self.sprites[int(self.current_sprite)]
def updateattack(self, speed):
if self.swing_animation:
self.current_sprite += speed
if int(self.current_sprite) >= len(self.ataki):
self.current_sprite = 0
self.swing_animation = False
self.image2 = self.ataki[int(self.current_sprite)]
class Princess(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y):
super().__init__()
self.attack_animation = False
self.sprites = []
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_000.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_001.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_002.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_003.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_004.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_005.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_006.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_007.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_008.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_009.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_010.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_011.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_012.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_013.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_014.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_015.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_016.png'))
self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_017.png'))
self.current_sprite = 0
self.image = self.sprites[self.current_sprite]
self.rect = self.image.get_rect()
self.rect.topleft = [pos_x, pos_y]
def attack(self):
self.attack_animation = True
def update(self, speed):
if self.attack_animation:
self.current_sprite += speed
if int(self.current_sprite) >= len(self.sprites):
self.current_sprite = 0
self.attack_animation = False
self.image = self.sprites[int(self.current_sprite)]
enemy = Ogre(500, 200)
enemy2 = Ogre(650, 200)
enemy3 = Ogre(1000, 200)
# Creating the sprites and groups
moving_sprites = pygame.sprite.Group()
princess = Princess(10, 200)
moving_sprites.add(princess)
ogre = Ogre2(650, 200)
moving_sprites.add(ogre)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
# Change the keyboard variables.
if event.key == K_LEFT or event.key == K_a:
moveRight = False
moveLeft = True
if event.key == K_RIGHT or event.key == K_d:
moveLeft = False
moveRight = True
player.image = player.walkList[int(player.counter)]
if event.key == K_DOWN or event.key == K_s:
player.crouch = True
# KEYUP
if event.type == KEYUP:
player.counter = 0
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
if event.key == K_LEFT or event.key == K_a:
moveLeft = False
if event.key == K_RIGHT or event.key == K_d:
moveRight = False
if event.key == K_DOWN or event.key == K_s:
player.crouch = False
if moveLeft and player.rect.left > -35:
player.rect.left -= MOVESPEED
try:
player.counter += .1
player.image = pygame.transform.flip(player.walkList[int(player.counter)], True, False)
except:
player.counter = 0
player.image = pygame.transform.flip(player.walkList[int(player.counter)], True, False)
if moveRight and player.rect.right < W + 35:
player.rect.right += MOVESPEED
try:
player.counter -= .1
player.image = player.walkList[int(player.counter)]
except:
player.counter = 0
player.image = player.walkList[int(player.counter)]
# pressed_keys
pygame.event.pump()
keys = pygame.key.get_pressed()
clock.tick(FPS)
pressed_keys = pygame.key.get_pressed()
screen.blit(background, (bg_x, 0))
moving_sprites.draw(screen)
moving_sprites.update(0.25)
princess.attack()
princess.update(0.05)
ogre.attack()
ogre.update(0.05)
ogre.update2()
ogre.swingattack()
ogre.updateattack(0.25)
player.jump()
g.draw(screen)
g.update()
pygame.display.update()