Как работает точка столкновения в Pygame? - PullRequest
1 голос
/ 05 ноября 2019

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

1 Ответ

1 голос
/ 06 ноября 2019

Точка столкновения задокументирована в классе PyGame Rect .

По сути, вы передаете координату pygame.Rect.collidepoint(), и она вернет True, если эта точкав пределах прямоугольника.

import pygame

# Window size
WINDOW_WIDTH=400
WINDOW_HEIGHT=400

pygame.init()
window = pygame.display.set_mode( ( WINDOW_WIDTH, WINDOW_HEIGHT ) )
pygame.display.set_caption("Point Collision")

BLACK = (  50,  50,  50 )
GREEN = (  34, 139,  34 )
BLUE  = ( 161, 255, 254 )

# The rectangle to click-in
# It is window-centred, and 33% the window size
click_rect  = pygame.Rect( WINDOW_WIDTH//3, WINDOW_HEIGHT//3, WINDOW_WIDTH//3, WINDOW_HEIGHT//3 )
rect_colour = BLACK

### Main Loop
clock = pygame.time.Clock()
done = False
while not done:

    # Handle all the events
    for event in pygame.event.get():
        if ( event.type == pygame.QUIT ):
            done = True

        elif ( event.type == pygame.MOUSEBUTTONUP ):
            mouse_position = pygame.mouse.get_pos()             # Location of the mouse-click
            if ( click_rect.collidepoint( mouse_position ) ):   # Was that click inside our rectangle 
                print( "hit" )
                # Flip the colour of the rect
                if ( rect_colour == BLACK ):
                    rect_colour = GREEN
                else:
                    rect_colour = BLACK
            else:
                print( "click-outside!" )

    # update the screen
    window.fill( BLUE )
    pygame.draw.rect( window, rect_colour, click_rect)  # DRAW OUR RECTANGLE
    pygame.display.flip()

    # Clamp the FPS to an upper-limit
    clock.tick_busy_loop( 60 )


pygame.quit()

Обратите внимание на использование collidepoint() в нижней половине кода:

if ( click_rect.collidepoint( mouse_position ) ):  

Здесь код проверяет, что кодордината, недавно обнаруженная с помощью события ввода мышью, находится в пределах click_rect (pygame.Rect, объявленный перед основным циклом). Если координаты находятся внутри прямоугольника, он рисуется другим цветом.

Основная часть кода здесь состоит в том, чтобы просто открыть окно и запустить основной цикл ввода / обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...