Вы должны понимать, что когда вы создаете игру с прокруткой / камерой / движущейся картой, вы имеете дело с двумя различными типами координат:
мировые координаты ( логические координаты, например, (0, 0)
всегда (0, 0)
, независимо от того, движется ли прокрутка / камера или карта
координаты экрана (которые вы используете для определения фактического положения чего-либо на текущем экране, например, itemPos = (4,8)
в мировых координатах, и get переводится в координаты экрана путем умножения на 32: (itemPos[0] * 32,itemPos[1] * 32)
.
Итак, когда вы читаете положение мыши, вы получаете экранные координаты. Затем вы должны либо перевести их в мировые координаты, либо сравнить их с экранными координатами вашего item
.
Вы уже к этому здесь:
if mouse[0] > itemPos_rel[0] * 32 and mouse[0] < (itemPos_rel[0] * 32) + 32:
но вы не смотрите на прокрутку / движение вашей карты.
Так что либо переведите положение мыши:
...
mouse = pygame.mouse.get_pos()
mouse = mouse[0] - x, mouse[1] - y
...
или лучше (обратите внимание, что я больше не меняю поверхность фона):
...
clock = pygame.time.Clock()
i=0
def world2screen(pos, scrolling):
return pos[0] * 32 + scrolling[0], pos[1] * 32 + scrolling[1]
while True:
...
screen.blit(world, (x,y))
item_pos_screen = world2screen(itemPos, (x, y))
pygame.draw.rect(screen, (0,255,0), (*item_pos_screen,20,20))
mouse = pygame.mouse.get_pos()
if mouse[0] > item_pos_screen[0] and mouse[0] < item_pos_screen[0] + 32:
if mouse[1] > item_pos_screen[1] and mouse[1] < item_pos_screen[1] + 32:
i+=1
print("Mouse is over item" + str(i))
pygame.display.update()
clock.tick(60)
или событие лучше:
...
clock = pygame.time.Clock()
i=0
def world2screen(pos, scrolling):
return pos[0] * 32 + scrolling[0], pos[1] * 32 + scrolling[1]
def screen2world(pos, scrolling):
return int((pos[0] - scrolling[0]) / 32), int((pos[1] - scrolling[1]) / 32 )
while True:
...
screen.blit(world, (x,y))
item_pos_screen = world2screen(itemPos, (x, y))
pygame.draw.rect(screen, (0,255,0), (*item_pos_screen,20,20))
mouse = pygame.mouse.get_pos()
mouse_pos_world = screen2world(mouse, (x, y))
if mouse_pos_world == itemPos:
i+=1
print("Mouse is over item" + str(i))
pygame.display.update()
clock.tick(60)