Même projet que hier, mais nouveau problème. Vu que je n'ai pas utilisé "pygame.Rect()" pour créer mes "sprites" alors je ne peux pas utiliser le systeme de Hitbox de Pygame. Alors j'ai fait des tests avec les positions x et y des joueurs par rapport à chaque pique. Et dans ce test, j'inclus une Bool pour savoir si le joueur est toujours sur la pique ou non ( ".hit"). Je l'utilise donc dans mon test pour eviter de spammer l'action du touché ( ce qui serait dérangeant ).
Mais le problème arrive quand - même !
Voici mon code :
#imports
import pygame
import random
#pygame
pygame.init()
win = pygame.display.set_mode((1920, 1080), pygame.FULLSCREEN)
pygame.display.set_caption("Da Shit By Shawrex")
#Classes
class Players :
def __init__(self, x, y) :
self.x = x
self.y = y
self.hit = False
def draw(self) :
pygame.draw.rect(win, (255, 255, 255), (self.x, self.y, 40, 40))
class Spike :
def __init__(self, x, y) :
self.x = x
self.y = y
def draw(self) :
pygame.draw.rect(win, (0, 0, 0), (self.x, self.y, 40, 40))
#Vars
run = True
#Create objects
p1 = Players(480, 540)
p2 = Players(1440, 540)
spikes = []
for x in range(10) :
x = random.randint(120, 1800)
y = random.randint(40, 960)
if x % 40 != 0 :
x -= (x % 40)
if y % 40 != 0 :
y -= (y % 40)
y += 20
spikes.append(Spike(x, y))
#main loop
while run :
#Framerate
pygame.time.delay(80)
#Quit
for event in pygame.event.get() :
if event.type == pygame.QUIT :
run = False
#Moves
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] :
if p1.x > 0 :
p1.x -= 40
p2.y -= 40
if keys[pygame.K_RIGHT] :
if p1.x < 920 :
p1.x += 40
p2.y += 40
if keys[pygame.K_UP] :
if p1.y > 60 :
p1.y -= 40
p2.x -= 40
if keys[pygame.K_DOWN] :
if p1.y < 980 :
p1.y += 40
p2.x += 40
#Drawings
win.fill((255, 255, 255))
pygame.draw.rect(win, (51, 255, 51), (960, 60, 960, 960))
pygame.draw.rect(win, (51, 51, 255), (0, 60, 960, 960))
p1.draw()
p2.draw()
for x in spikes :
x.draw()
#Test for collisions
if p1.x > x.x - 20 and p1.x < x.x + 20 and p1.y > x.y - 20 and p1.y < x.y + 20 and p1.hit == Falsea :
print("Hit 1")
p1.hit = True
else :
p1.hit = False
if p2.x > x.x - 20 and p2.x < x.x + 20 and p2.y > x.y - 20 and p2.y < x.y + 20 :
if not(p2.hit) :
print("Hit 2")
p2.hit = True
else :
p2.hit = False
pygame.display.update()
pygame.quit()
Comme vous pouvez le voir, j'ai essayer plusieurs manières de faire le test. Mais cela ne change rien. J'espere que vous pouvez en tirer quelque chose. Merci du temps que vous passerez à m'aider.
Merci !
Si j'entends pas les rageux, c'est car les morts ne parlent pas. - 2019
[Pygame] : Problème avec des booleans et des if
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Si j'entends pas les rageux, c'est car les morts ne parlent pas. - 2019