Возникла проблема с созданием физики и коллизии персонажа и объектов. Не могу сделать так, что бы персонаж не прыгал сквозь блоки и стоял на них свободно, и мог вообще взаимодействовать с другими объектами. Есть предположение, что все блоки надо вставлять в 1 класс, и дальше как то взаимодействовать с персонажем, но не знаю как сделать. Помогите пожалуйста, так как выбрал создание игры как тема проекта(10 класс), но не осознал своих сил, начал писать движок сам.
import pygame
pygame.init()
win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Sulzhenko Project")
walkRight = pygame.image.load('right.png')
walkLeft = pygame.image.load('left.png')
bg = pygame.image.load('pygame_bg.jpg')
playerStand = pygame.image.load('stay.png')
block = pygame.image.load('Block.png')
cherry = pygame.image.load('cherry4.png')
clock = pygame.time.Clock()
x = 50
y = 445
width = 50
height = 50
speed = 5
isJump = False
jumpCount = 10
left = False
right = False
animCount = 0
def drawWindow():
global animCount
global animTrigger
win.blit(bg, (0, 0))
win.blit(block, (150, 350))
win.blit(block, (175, 350))
win.blit(block, (200, 350))
win.blit(block, (225, 350))
win.blit(block, (250, 350))
win.blit(block, (375, 350))
win.blit(block, (275, 350))
win.blit(block, (300, 350))
win.blit(block, (325, 350))
win.blit(block, (350, 350))
win.blit(block, (125, 350))
win.blit(block, (100, 350))
win.blit(block, (75, 350))
win.blit(block, (50, 350))
win.blit(block, (25, 350))
win.blit(block, (0, 350))
win.blit(block, (375, 350))
win.blit(block, (400, 350))
win.blit(block, (150, 200))
win.blit(block, (175, 200))
win.blit(block, (200, 200))
win.blit(block, (225, 200))
win.blit(block, (250, 200))
win.blit(block, (375, 200))
win.blit(block, (275, 200))
win.blit(block, (300, 200))
win.blit(block, (325, 200))
win.blit(block, (350, 200))
win.blit(block, (125, 200))
win.blit(block, (100, 200))
win.blit(block, (75, 200))
win.blit(block, (475, 200))
win.blit(block, (450, 200))
win.blit(block, (425, 200))
win.blit(block, (375, 200))
win.blit(block, (400, 200))
win.blit(cherry, (450, 150))
if left:
win.blit(walkLeft, (x, y))
elif right:
win.blit(walkRight, (x, y))
else:
win.blit(playerStand, (x, y))
pygame.display.update()
run = True
while run:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and (x > 5):
x -= speed
left = True
right = False
elif keys[pygame.K_RIGHT] and x < 500 - width - 5:
x += speed
left = False
right = True
else:
left = False
right = False
animCount = 0
if not (isJump):
if keys[pygame.K_SPACE]:
isJump = True
else:
if jumpCount >= -10:
if jumpCount < 0:
y += (jumpCount ** 2) / 2.5
else:
y -= (jumpCount ** 2) / 2.5
jumpCount -= 1
else:
isJump = False
jumpCount = 10
drawWindow()
pygame.quit()