Python/Pygame中Tilemap的构建及鼠标位置的测试

2024-05-14 14:46:58 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,我很感激你能提供的任何帮助

我正在为一个可能的项目的测试创建一个平铺图。我找到了一个教程,它有效地制作了瓷砖地图。然后,我试图实现我自己的代码,让它循环通过每个X和Y坐标测试鼠标是否在块的位置。如果鼠标位于平铺的顶部,则会在其上绘制一个方框,以创建鼠标所在位置的视觉效果。我的问题是网格是这样设计的:

                                    ####
                                    ####
                                    ####
                                    ####

但鼠标检测仅在这些瓷砖上对角工作:

^{pr2}$

代码如下:

    from pygame.locals import *
import pygame, sys

green = (40,255,30)
brown = (40,60,90)
red = (155,20,30)
yellow = (0,155,155)

grass = 0
dirt = 1
lava = 2

colours = {
    grass: green,
    dirt: brown,
    lava: red,
    }

tilemap = [
        [grass,dirt,dirt,dirt, lava],
        [dirt,lava,dirt,dirt, dirt],
        [lava, grass,dirt,dirt, lava],
        [lava, grass,dirt,dirt, grass],
        [dirt,dirt,dirt,dirt,grass]

        ]

TILESIZE = 50
MAPWIDTH =  5
MAPHEIGHT = 5

pygame.init()
DISPLAYSURF = pygame.display.set_mode((MAPWIDTH*TILESIZE,MAPHEIGHT*TILESIZE))

while True:


    mouse_x = pygame.mouse.get_pos()[0]
    mouse_y = pygame.mouse.get_pos()[1]


    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit
        for row in range(MAPWIDTH):
            print
            for column in range(MAPHEIGHT):
                pygame.draw.rect(DISPLAYSURF, colours[tilemap[row][column]], (column*TILESIZE, row*TILESIZE, TILESIZE, TILESIZE))
                if mouse_x >= (row * TILESIZE) and mouse_x <= (row* TILESIZE) + TILESIZE:
                    if mouse_y >= (column * TILESIZE) and mouse_y <= (column* TILESIZE) + TILESIZE:
                        print (str(row) + " " + str(column))
                        pygame.draw.rect(DISPLAYSURF, yellow, (row * TILESIZE, column*TILESIZE, TILESIZE, TILESIZE))







    pygame.display.update()

Tags: eventforgetcolumn鼠标pygamerowgrass
1条回答
网友
1楼 · 发布于 2024-05-14 14:46:58

首先你不能清除屏幕。 下一步你的绘制代码是错误的(如果检查错误) 正确的是x代表列,y代表行。在

我希望这能帮助你!:)

from pygame.locals import *
import pygame, sys

green = (40,255,30)
brown = (40,60,90)
red =  (155,20,30)
yellow = (0,155,155)

grass = 0
dirt = 1
lava = 2

colours = {
    grass: green,
    dirt: brown,
    lava: red,
    }

tilemap = [
        [grass,dirt,dirt,dirt, lava],
        [dirt,lava,dirt,dirt, dirt],
        [lava, grass,dirt,dirt, lava],
        [lava, grass,dirt,dirt, grass],
        [dirt,dirt,dirt,dirt,grass]

        ]

TILESIZE = 50
MAPWIDTH =  5
MAPHEIGHT = 5

pygame.init()
DISPLAYSURF = pygame.display.set_mode((MAPWIDTH*TILESIZE,MAPHEIGHT*TILESIZE))

如果是真的:

^{pr2}$

相关问题 更多 >

    热门问题