2017-10-25 8 views
2

터치 스크린 디스플레이가있는 라즈베리 파이에 파이 게임을 사용하는 앱을 작성했습니다. 그것은 창 모드에서 완전히 잘 작동하지만 전체 화면 모드로 전환하자마자 완전히 이상하게 작동합니다. 터치 (클릭)는 합리적인 x와 y를 반환하지 않으며 두 번 클릭 한 후 대개 799와 479 (화면의 오른쪽 구석)로 반환됩니다. 문제를 해결하려면 어떻게해야합니까?전체 화면에서 이상한 파이 게임 좌표

내 화면의 전체 화면 해상도는 800x480입니다. 데스크톱 컴퓨터에서 작업하는 동안이 문제가 발생하지 않는다는 것을 언급해야합니다.이 문제는 터치 스크린 입력을 사용할 때만 발생합니다.

import pygame, time, math, os 
from pygame.locals import * 
from sys import exit 

pygame.init()   
pygame.mouse.set_visible(0) 
pygame.mouse.set_pos(0, 0) 
screen = pygame.display.set_mode((800, 480)) 

그것은이와 잘 작동하지만 전체 화면으로 전환 할 때 :

screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) 

가 화면의 끝 픽셀의 모든 클릭을 감지 여기에 코드의 관련 부분이다. 이상한 점은 기본 화면에 객체 (예 : 버튼)를 배치하면 올바른 좌표에 제대로 배치되지만 터치 스크린 입력에서 반환 된 좌표가 올바르지 않기 때문에 클릭 할 수 없다는 것입니다.

+1

파이 게임 창을 만들기위한 초기화 코드를 보여줄 수 있습니까? 'pygame.display.set_mode'에 크기 (800, 500)를 넘기고 있습니까? 화면의 해상도는 무엇입니까? – CodeSurgeon

+0

답장을 보내 주셔서 감사합니다. 질문을 업데이트했습니다. –

답변

0

정말 흥미로운 문제입니다! 나는이 코드 중 일부를 내 Windows 랩톱에서 터치 스크린을 사용하여 테스트했습니다 (한 번만!). 그러면 이상한 문제가 발생하여 혼자가 아닙니다! 적어도 pygame.mouse.set_visible(False) 플래그를 pygame.FULLSCREEN 플래그와 함께 사용하면 마우스 커서를 숨길 때마다 pygame.MOUSEBUTTONDOWN 이벤트가 발생하여 잘못된 마우스 위치를 반환하는 문제가 발생합니다. 커서를 시각적으로 보이게 만들면 터치 스크린에서는 당황 스럽습니다. 필자가 생각해 낸 솔루션 (실제로 해킹)은 화면의 왼쪽 상단 모서리에 위치하여 전체 화면 모드를 시뮬레이트하는 경계없는 창을 사용하는 것입니다. 다음은 코드입니다. 당신을 위해 작동하는지 알려주세요 : 말했다되고

import pygame, time, math, sys, os 

os.environ['SDL_VIDEO_WINDOW_POS'] = "{0},{1}".format(0, 0) 
pygame.init()   
screen = pygame.display.set_mode((0, 0), pygame.NOFRAME) 
pygame.mouse.set_visible(False) 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == pygame.MOUSEBUTTONDOWN: 
      print(event.pos) 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_ESCAPE: 
       pygame.quit() 
       sys.exit() 

그건, 내가이는 pygame.FULLSCREEN 플래그와 함께 작동하지 않는 이유 을 알고 궁금합니다. 누구나 파이 게임이나 SDL1.2에 대한 통찰력을 제공 할 수 있다면, 그 점이 큰 도움이 될 것입니다 ...

+0

고마워, 나는 이것이 내가 올바른 좌표와 함께 필요한 사용자 경험을 제공하고 있다고 생각한다. –