I'm making my first game in pygame for a school project, and I need to make the players stand in platforms. I'm trying to make collisions using rects, but it isn't working. I've seen a lot of tutorials, but I don't understand what is wrong with my code.
I tried to make a rect in both the players and in the platform, but the collision doesn't work. (I put "print" inside the collision block just to check if it was working).
import pygame as pg
pg.init()
playerwaterimg = pg.image.load("waterboy.png")
playerfireimg = pg.image.load("firegirl.png")
paredeimg = pg.image.load("pedra.jpg")
playerwater = pg.transform.scale(playerwaterimg, (60, 85))
playerfire = pg.transform.scale(playerfireimg, (75, 80))
parede1 = pg.transform.scale(paredeimg, (1366, 30))
parede2 = pg.transform.scale(paredeimg, (30, 768))
parede3 = pg.transform.scale(paredeimg, (30, 768))
parede4 = pg.transform.scale(paredeimg, (1366, 30))
parede5 = pg.transform.scale(paredeimg, (1000, 30))
playerwaterloc = [50, 738 - 60]
playerfireloc = [100, 738 - 75]
rectwater = playerwater.get_rect()
rectfire = playerfire.get_rect()
rectparede5 = parede5.get_rect(topleft = (0, 540))
rectwater.topleft = (playerwaterloc[0], playerwaterloc[1])
rectfire.topleft = (playerfireloc[0], playerfireloc[1])
rectparede5.topleft = (0, 540)
ecratam = (1366, 768)
fundoimagem = pg.image.load("background.jpg")
fundo = pg.transform.scale(fundoimagem, (ecratam[0], ecratam[1]))
ecra = pg.display.set_mode((ecratam[0], ecratam[1]), pg.FULLSCREEN)
clock = pg.time.Clock()
saltarfire = False
saltarwater = False
saltonumfire = 10
saltonumwater = 10
while True:
clock.tick(60)
for evento in pg.event.get():
if evento.type == pg.QUIT:
pg.quit()
exit()
ecra.blit(fundo, (0, 0))
ecra.blit(playerwater, (playerwaterloc[0], playerwaterloc[1]))
ecra.blit(playerfire, (playerfireloc[0], playerfireloc[1]))
ecra.blit(parede1, (0, 738))
ecra.blit(parede2, (0, 0))
ecra.blit(parede3, (1336, 0))
ecra.blit(parede4, (0, 0))
ecra.blit(parede5, (0, 540))
teclas = pg.key.get_pressed()
if teclas[pg.K_LEFT]:
playerfireloc[0] -= 3
if teclas[pg.K_RIGHT]:
playerfireloc[0] += 3
if not(saltarfire):
if teclas[pg.K_UP]:
saltarfire = True
if teclas[pg.K_DOWN]:
playerfireloc[1] += 3
else:
if saltonumfire >= -10:
playerfireloc[1] -= (saltonumfire * abs(saltonumfire)) * 0.3
saltonumfire -= 0.5
else:
saltonumfire = 10
saltarfire = False
if teclas[pg.K_a]:
playerwaterloc[0] -= 3
if teclas[pg.K_d]:
playerwaterloc[0] += 3
if not(saltarwater):
if teclas[pg.K_w]:
saltarwater = True
if teclas[pg.K_s]:
playerwaterloc[1] += 3
else:
if saltonumwater >= -10:
playerwaterloc[1] -= (saltonumwater * abs(saltonumwater)) * 0.3
saltonumwater -= 0.5
else:
saltonumwater = 10
saltarwater = False
if playerfireloc[1] > ecratam[1] - playerfire.get_height() - parede1.get_height():
playerfireloc[1] = ecratam[1] - playerfire.get_height() - parede1.get_height()
if playerwaterloc[1] > ecratam[1] - playerwater.get_height() - parede1.get_height():
playerwaterloc[1] = ecratam[1] - playerwater.get_height() - parede1.get_height()
if playerfireloc[1] < parede4.get_height():
playerfireloc[1] = parede4.get_height()
if playerwaterloc[1] < parede4.get_height():
playerwaterloc[1] = parede4.get_height()
if playerfireloc[0] < parede2.get_width():
playerfireloc[0] = parede2.get_width()
if playerwaterloc[0] < parede2.get_width():
playerwaterloc[0] = parede2.get_width()
if playerfireloc[0] > ecratam[0] - playerfire.get_width() - parede3.get_width():
playerfireloc[0] = ecratam[0] - playerfire.get_width() - parede3.get_width()
if playerwaterloc[0] > ecratam[0] - playerwater.get_width() - parede3.get_width():
playerwaterloc[0] = ecratam[0] - playerwater.get_width() - parede3.get_width()
if rectwater.colliderect(rectparede5):
print("Collision")
pg.display.update()