鼠标位置未与网格对齐



这是我第2/3次在pygame中制作阵列支持的网格,它可以在单击时更改单元格颜色。然而,尽管使用了以前的代码,我仍然无法弄清楚为什么我的当前代码不起作用。

我面临的问题是,当我点击网格上的一个单元格时,一个完全不同的单元格会被着色,我无法弄清楚为什么或与这些意外单元格有什么关系。(我认为着色单元格可能与网格坐标相匹配,但鼠标位置与正确的网格坐标不对齐(未确认((

作为参考,"pxl_size"是单元格的高度和宽度,"pxls_width"/"xls_height"是构成窗口宽度的单元格数量。

我的点击检测代码:

elif event.type == pygame.MOUSEBUTTONDOWN:
column = mouse_pos[0] // (self.pixel_size + pixel_margin)
row = mouse_pos[1] // (self.pixel_size + pixel_margin)
print(row, column)
if self.canvas.grid[row][column] != 1:
self.canvas.grid[row][column] = 1
colour = black

self.canvas.update_pixel(row, column, colour)

我的网格代码:

class Canvas():
def __init__(self, pixel_size, screen):
self.screen = screen
self.pxl_size = pixel_size
self.pxls_width = int(round(screen_width/self.pxl_size, 0))
self.pxls_height = int(round(screen_height/self.pxl_size, 0))
self.generate_canvas()
def generate_canvas(self):
#Logical grid
self.grid = []
for row in range(self.pxls_height):
self.grid.append([]) 
for column in range(self.pxls_width):
self.grid[row].append(0)
self.canvas_surface = pygame.Surface((screen_width, screen_height))
self.canvas_surface.fill(grey)
#Visual grid
for row in range (self.pxls_height):
for column in range (self.pxls_width):
self.update_pixel(row, column, white)

def update_pixel(self, row, column, colour):
pygame.draw.rect(self.canvas_surface, colour, [(pixel_margin + self.pxl_size) * column + pixel_margin, 
(pixel_margin + self.pxl_size) * row + pixel_margin,
self.pxl_size,
self.pxl_size])
self.screen.blit(self.canvas_surface, (0, 0))
pygame.display.update()

编辑(附加信息(:

def __init__(self):
global mouse_pos
mouse_pos = pygame.mouse.get_pos()
screen.fill(grey)
self.pixel_size = 12

self.canvas = Canvas(self.pixel_size, screen)

每次单击按钮时,必须确定鼠标位置。MOUSEBUTTONDOWN事件具有指定点击位置的属性pos

for event in event_list:
# [...]
elif event.type == pygame.MOUSEBUTTONDOWN:
column = event.pos[0] // (self.canvas.pxl_size + pixel_margin)
row =    event.pos[1] // (self.canvas.pxl_size + pixel_margin)
if self.canvas.grid[row][column] != 1:
self.canvas.grid[row][column] = 1
self.canvas.update_pixel(row, column, black)

最新更新