Задать вопрос
Этот вопрос закрыт для ответов, так как повторяет вопрос Создание движка на пайгейм, как реализовать коллизию между объектами?
@MeHox
Programmer

Как реализовать коллизию в pygame?

Мне нужно сделать коллизию зеленому квадрату, чтобы центр игрока не мог проходить сквозь его стенки.
Просто if-ами сделать это нельзя, потому что объект потом будет перемещаться или вообще удаляться.

import sys, pygame

pygame.init()

FPS = 60
SCREEN = (640, 480)
screen = pygame.display.set_mode(SCREEN)
rect = pygame.Rect(100, 100, 200, 200) # объект для хранения прямоугольных координат
player = pygame.Rect(20, 20, 40, 40)

x_player = 50
y_player = 50
speed = 1

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: # выход
            pygame.quit()
            sys.exit()
    # передвижение персонажа ↓
    keys = pygame.key.get_pressed()
    if keys[pygame.K_d] and x_player < SCREEN[0]:
        x_player += speed
    if keys[pygame.K_a] and x_player > 0:
        x_player -= speed
    if keys[pygame.K_s] and y_player < SCREEN[1]:
        y_player += speed
    if keys[pygame.K_w] and y_player > 0:
        y_player -= speed
    if keys[pygame.K_LSHIFT] and speed < 2:
        speed += 1
    if not keys[pygame.K_LSHIFT] and speed > 1:
        speed -= 1
    # передвижение персонажа ↑

    # правильная коллизия ↓
    if x_player <= -1:
        x_player = 0
    if y_player <= -1:
        y_player = 0
    if x_player >= SCREEN[0]:
        x_player = SCREEN[0]
    if y_player >= SCREEN[1]:
        y_player = SCREEN[1]


    # коллизия на объекты просто так не работает, нужно сделать отдельные 8 префабов для коллизии
    if rect.collidepoint(x_player, y_player):
        y_player -= speed
        print("collision")

    # правильная коллизия ↑


    # print(x_player, y_player)

    screen.fill((0,0,0))
    pygame.draw.circle(screen, "YELLOW", (x_player, y_player), 10)
    pygame.draw.rect(screen, "GREEN", (100, 100, 200, 200))
    pygame.display.update()
    pygame.time.Clock().tick(FPS)
  • Вопрос задан
  • 2183 просмотра
Подписаться 1 Простой
Решения вопроса 1
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Вам надо воспользоваться поиском на сайте с запросом
Pygame коллизия
и проработать полученные результаты. Это частый вопрос и ответов полно. Если вам не достаточно того, что уже отвечали, сомневаюсь в успехе в случае вашего вопроса.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы