gpt4 book ai didi

python-3.x - pygame 显示器上的 Blit 表面取决于鼠标位置

转载 作者:行者123 更新时间:2023-12-01 01:40:54 26 4
gpt4 key购买 nike

在这个程序中,我有一个表面,上面有一个网格。我正在尝试制作一个程序来检测鼠标在表面上的位置,如果我的鼠标在其中一个方块中,方块会变成绿色。问题是我只设法让 1 平方工作。我希望所有的方块都像左上角的方块一样工作。任何人都可以帮忙吗?

import pygame
pygame.init()

WIDTH = 540
TILESIZE = 60
RED = (255, 0, 0)
BLACK = (0, 0, 0)
GREY = (211, 211, 211)
GREEN = (0, 255, 0)


win = pygame.display.set_mode((WIDTH+1, WIDTH+1))
win.fill(GREY)
surface = pygame.Surface((TILESIZE-1, TILESIZE-1))
surface.fill(RED)

def mouse_pos():
surface_place = (1, 1)
for x in range(0, 9, TILESIZE):
for y in range(x):
surface_place = list(surface_place)
surface_place[0] += TILESIZE
surface_place[1] += TILESIZE
surface_place = tuple(surface_place)
win.blit(surface, surface_place)

if surface.get_rect().collidepoint(pygame.mouse.get_pos()):
win.blit(surface, surface_place)
surface.fill(GREEN)
else:
win.blit(surface, surface_place)
surface.fill(RED)

def draw_grid():
for x in range(0, WIDTH+1, TILESIZE):
pygame.draw.line(win, BLACK, (x, 0), (x, WIDTH))
for y in range(0, WIDTH+1, TILESIZE):
pygame.draw.line(win, BLACK, (0, y), (WIDTH, y))

clicked = False
while not clicked:
draw_grid()
mouse_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
clicked = True

pygame.display.update()

最佳答案

当然,对此有多种解决方案。

一种是对 WIDTH 进行范围/循环,就像你画网格一样,并使用一些 Rect -magic 将瓷砖绘制为绿色或红色,如下所示:

def mouse_pos():
for x in range(1, WIDTH+1, TILESIZE):
for y in range(1, WIDTH+1, TILESIZE):
rect = pygame.Rect(x, y, TILESIZE, TILESIZE).inflate(-1, -1)
win.fill(GREEN if rect.collidepoint(pygame.mouse.get_pos()) else RED, rect)

这里我们从 1 开始循环而不是 0并通过 1 缩小矩形像素,使用 inflate ,所以我们不会在网格线上绘画。

但是哪种解决方案适合您取决于您​​最终要实现的目标。例如,您的代码中是否需要网格的逻辑表示?您需要使用 Surfaces 而不是只填充纯色?

关于python-3.x - pygame 显示器上的 Blit 表面取决于鼠标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57654755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com