나는 모두 본 적이 이러한 게시물 , 여전히 마우스 오버 탐지 작업 없어요. 친구를 위해 작업중인 게임의 간단한 시작 메뉴를 개발 중입니다. 두 개의 텍스트가 있으며 마우스를 가져 가면 파란색으로 바뀌어야합니다.
그러나 마우스를 왼쪽 상단 모서리로 가져 가면 파란색으로 만 변합니다. 코드가 왼쪽 상단 모서리에있는 원래 (블릿 및 위치가 지정되지 않은) 표면을 감지하고 이를 직사각형으로 변환 한다고 가정 합니다. .collidepoint (pygame.mouse.get_pos ()) 확인.
이미 블리 팅되고 배치 된 텍스트를 감지하려면 어떻게해야합니까?
다음은 내 코드 (또는 적어도 문제를 일으키는 부분)입니다.
font = pygame.font.Font(os.path.join('.', 'bin', 'NOVEMBER.TTF'), 26)
playText = font.render("Play", True, lightGray)
settingsText = font.render("Options", True, lightGray)
setDisplay.fill(darkGray)
playText_rect = playText.get_rect()
settingsText_rect = settingsText.get_rect()
그런 다음 나중에 메인 루프에서 :
if settingsText_rect.collidepoint(pygame.mouse.get_pos()):
settingsText = font.render("Options", True, grayBlue)
setDisplay.blit(settingsText, (rightBorder / 2 - settingsText.get_width() / 2 + 200, bottomBorder / 2 - settingsText.get_height() / 2 + 120))
elif playText_rect.collidepoint(pygame.mouse.get_pos()):
playText = font.render("Play", True, grayBlue)
setDisplay.blit(playText, (rightBorder / 2 - playText.get_width() / 2 - 200, bottomBorder / 2 - playText.get_height() / 2 + 120))
else:
playText = font.render("Play", True, lightGray)
settingsText = font.render("Options", True, lightGray)
아, 그리고 차이가 있다면 우분투에 있습니다.
당신은 단순히 호출 할 때 .get_rect()
A의 Surface
, 결과는 Rect
참의가 x
와 y
에 위치 설정을 0
.
이를 수정하는 쉬운 방법 은 메인 루프에서 위치를 계산하는 대신 사용 playText_rect
하고 settingsText_rect
블리 팅하는 것입니다.
# calculate the position once and but the rect at that position
playText_rect = playText.get_rect(topleft=(rightBorder / 2 - playText.get_width() / 2 - 200, bottomBorder / 2 - playText.get_height() / 2 + 120))
settingsText_rect = settingsText.get_rect(topleft=(rightBorder / 2 - settingsText.get_width() / 2 + 200, bottomBorder / 2 - settingsText.get_height() / 2 + 120))
...
# use the rect as position argument for blit
setDisplay.blit(settingsText, settingsText_rect)
...
setDisplay.blit(playText, playText_rect)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다