Проблема заключается в том, что вы проверяете пиксели после очистки поверхности screen
и перед рисованием белых линий / пикселей.Область рисования в данный момент все еще черная.Быстрое решение проблемы - позвонить GetPixelDataOfDrawScreen
ниже кода, который рисует рифы:
# draw the rects
for r in rects:
pygame.draw.rect(screen, (255, 255, 255), (r[0], r[1], r[2], r[3]))
if(mouseX >= bButtonX and mouseX <= bButtonX + 50): # check if pressed
if(mouseY >= bButtonY and mouseY <= bButtonY + 20):
pygame.draw.rect(screen, (0, 0, 180), (bButtonX, bButtonY, 50, 20))
if(pygame.mouse.get_pressed()[0]):
GetPixelDataOfDrawScreen()
pygame.display.flip()
clock.tick(60)
Кроме того, программу можно упростить.Возможно, вы могли бы просто сериализовать список rects
с модулями json
или pickle
или создать отдельную поверхность для области рисования, а затем просто сохранить ее с помощью pygame.image.save
.
Вот пример, в котором я рисую на другой поверхности вместо экрана.Вы можете сохранить его с помощью pygame.image.save
и загрузить его с помощью pygame.image.load
(нажмите S и O ).Я также рекомендую создавать pygame.Rect
объекты для коробки и кнопок, потому что они имеют полезные методы обнаружения столкновений, такие как collidepoint
:
import sys
import pygame
pygame.init()
screen = pygame.display.set_mode((200, 200))
clock = pygame.time.Clock()
box_surface = pygame.Surface((100, 100))
box = box_surface.get_rect(topleft=(50, 50))
blue_button = pygame.Rect(100, 150, 50, 20)
red_button = pygame.Rect(50, 150, 50, 20)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_s: # Press s to save the image.
pygame.image.save(box_surface, 'box.png')
elif event.key == pygame.K_o: # Press o to load the image.
box_surface = pygame.image.load('box.png').convert()
mouse_pos = pygame.mouse.get_pos()
if pygame.mouse.get_pressed()[0]:
# Adjust the mouse positions because the box is positioned at (100, 100).
mouse_x, mouse_y = mouse_pos[0]-box.x, mouse_pos[1]-box.y
pygame.draw.rect(box_surface, (255, 255, 255), [mouse_x, mouse_y, 2, 2])
# Draw everything.
screen.fill((255, 255, 255))
screen.blit(box_surface, box)
pygame.draw.rect(screen, (0, 0, 255), blue_button)
pygame.draw.rect(screen, (255, 0, 0), red_button)
if red_button.collidepoint(mouse_pos):
pygame.draw.rect(screen, (180, 0, 0), red_button)
if blue_button.collidepoint(mouse_pos):
pygame.draw.rect(screen, (0, 0, 180), blue_button)
pygame.display.flip()
clock.tick(60)