Измените цвет в области экрана после щелчка мышью, и оставайтесь неизменными после выхода Pygame - PullRequest
0 голосов
/ 07 июня 2019

так что у меня есть фон для моей игры.Если происходит событие (щелчок), область фона меняет цвет.Когда я отпускаю щелчок мыши, экран обновляется и возвращается к исходному цвету, чего я не хочу.

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

class Game(object):
    def __init__(self):
        self.squares = []
        self.occupied = []
    for x in range(0,8,1):
        for y in range(0,8,1):
            if (x + y) % 2 !=0:
                pygame.draw.rect(screen, white, [x*100, y*100, 100, 100])
            elif(x + y) % 2 ==0:
                pygame.draw.rect(screen, aqua, [x*100, y*100, 100, 100])
            self.squares.append([x,y])
    if event.type == pygame.MOUSEBUTTONDOWN:
        mx, my = pygame.mouse.get_pos()
        mx = mx//100
        my = my//100
        pygame.draw.rect(screen, green, [mx*100, my*100, 100, 100])

while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        game = Game()
    pygame.display.update()
    clock.tick(30)

pygame.quit () quit ()

1 Ответ

1 голос
/ 07 июня 2019

Не создавайте новый экземпляр Game() каждой итерации.Создайте один экземпляр только перед основным циклом и добавьте метод в класс Game, чтобы обновить цвет квадрата.

Лучше перехватывать все события в основном цикле, а не в классах.Когда вы перехватываете событие, вызывайте метод коррелированного класса для выполнения намеченного действия.

Ниже рабочего кода:

import pygame

white = (255, 255, 255)
aqua = (0, 0, 100) #or whatever it really is, it's just a constant
green = (0, 255, 0)

class Game(object):
    def __init__(self):
        self.squares = []
        self.occupied = []
        for x in range(0,8,1):
            for y in range(0,8,1):
                if (x + y) % 2 !=0:
                    pygame.draw.rect(screen, white, [x*100, y*100, 100, 100])
                elif(x + y) % 2 ==0:
                    pygame.draw.rect(screen, aqua, [x*100, y*100, 100, 100])
                self.squares.append([x,y])

    def colorsquare(self):
        mx, my = pygame.mouse.get_pos()
        mx = mx//100
        my = my//100
        pygame.draw.rect(screen, green, [mx*100, my*100, 100, 100])

game_over = False
pygame.init()
screen = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()
game = Game()
while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        elif event.type == pygame.MOUSEBUTTONDOWN:
            game.colorsquare()

    pygame.display.update()
    clock.tick(30)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...