Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
platformer problem
#1
im trying to make a platformer Big Grin


but it doesnt work properly

first of all, what it should do is that the man should face right or left after pressing left or right arrow, then it should fire some projectiles when you press space bar, thanks for the support

import pygame
pygame.init()

win = pygame.display.set_mode((500, 500))

pygame.display.set_caption("First Game")


walkRight = [pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'),pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'),pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png')]
walkLeft = [pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'),pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'),pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'),pygame.image.load('L1.png'),  pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png')]
bg = pygame.image.load('bg.jpg')
char = pygame.image.load('standing.png')


clock = pygame.time.Clock()

class player(object):
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5
        self.isJump = False
        self.jumpCount = 5
        self.left = False
        self.right = False
        self.walkCount = 0
        self.standing = False
        
    def draw(self, win):
        if(self.walkCount < 50):

            if not (self.standing):
                if self.left:
                    win.blit(walkLeft[self.walkCount], (self.x, self.y))
                    self.walkCount +=1
                    ##print (self.walkCount)
                elif self.right:
                    win.blit(walkRight[self.walkCount], (self.x, self.y))
                    self.walkCount +=1
                    ##print (self.walkCount)
            else:
                if (self.right):
                    win.blit(walkRight[0], (self.x, self.y))
        
                else:
                    win.blit(walkLeft[0], (self.x, self.y))
                    ##print(self.walkCount)
                
class projectile(object):
    def __init__(self, x, y, radius, color, facing):
        self.x = x
        self.y = y
        self.radius = radius
        self.color = color
        self.facing = facing
        self.vel = 8 * facing

    def draw(self, win):
        pygame.draw.circle(win, self.color, (self.x, self.y), self.radius)


def redrawGameWindow():
    global walkCount
    win.blit(bg, (0, 0))
    man.draw(win)


    for bullet in bullets:
        bullet.draw(win)
            
    ##pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))
    pygame.display.update()

#mainloop
man = player(300, 410, 64, 64)

bullets = []
run = True
keys = pygame.key.get_pressed()

while run:
    clock.tick(27)
    

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    for bullet in bullets:
        if bullet.x < 500 and bullet.x > 0:
            bullet.x += bullet.vel
        else:
            bullets.pop(bullets.index(bullet))

    if keys[pygame.K_SPACE]:
        if man.left:
            facing = -1
        else:
            facing = 1
            
        if len(bullets) < 5:
            bullets.append(projectile(round(man.x + man.width //2), round (man.y + man.height //2), 6, (0, 0, 0), facing))

    

    if keys[pygame.K_LEFT] and man.x > man.vel:
        man.x -= man.vel
        man.left=True
        man.right=False
        man.standing=False
    elif keys[pygame.K_RIGHT] and man.x < 500 - man.width - man.vel:
        man.x += man.vel
        man.right=True
        man.left=False
        man.standing=False
    else:

        man.standing=True

    if not(man.isJump):
        ##if keys[pygame.K_UP] and man.y > man.vel:
          ##  man.y -= man.vel
        if keys[pygame.K_DOWN] and man.y < 500 - man.height - man.vel:
            man.y += man.vel
        if keys[pygame.K_UP]:
            man.isJump = True
            man.right= False
            man.left = False

            man.walkCount = 0
    else:
        if man.jumpCount >= -5:
            neg = 1
            if man.jumpCount < 0:
                neg = -1                
            man.y -= (man.jumpCount ** 2)* 2 * neg
            man.jumpCount -= 1
        else:
            man.isJump = False
            man.jumpCount = 5

    redrawGameWindow()
    ##win.fill((0, 0, 0))

    ##pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))
    pygame.display.update()

pygame.quit()
anyone can help?
Reply
#2
Move keys = pygame.key.get_pressed() to just after the event loop
It must refresh every loop.
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    keys = pygame.key.get_pressed()
You can also do this.
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        run = False
    elif event.type == pygame.KEYDOWN:
        if event.key == pygame.K_SPACE:
            # action
99 percent of computer problems exists between chair and keyboard.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyGame] platformer enemy animation Yegor123 3 2,018 May-03-2023, 08:42 AM
Last Post: Windspar
  Tkinter platformer game Linch1 1 5,205 Mar-10-2019, 03:17 AM
Last Post: Windspar
  Napkin Platformer abscorpy 3 2,817 Jan-26-2019, 03:20 PM
Last Post: Windspar
  platformer problem abscorpy 4 3,633 Nov-27-2018, 08:46 PM
Last Post: nilamo
  Help On Platformer Spectroxis 2 11,330 Apr-27-2017, 09:56 PM
Last Post: metulburr

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020