import pygame from pythonosc import dispatcher, osc_server import threading #python test_touch_area.py SCREEN_WIDTH = 900 SCREEN_HEIGHT = 500 # Letzter Touchpunkt touch_pos = None def osc_touch(address, x, y): global touch_pos touch_pos = (int(x), int(y)) print("Touch empfangen:", touch_pos) def start_osc(): disp = dispatcher.Dispatcher() disp.map("/touch", osc_touch) server = osc_server.ThreadingOSCUDPServer(("127.0.0.1", 5005), disp) print("🔌 OSC Touch-Test läuft auf Port 5005") server.serve_forever() def draw_quadrants(screen): """Farbliche Quadranten zur Orientierung.""" colors = [(50, 50, 200), (200, 50, 50), (50, 180, 50), (200, 200, 50)] rects = [ pygame.Rect(0, 0, SCREEN_WIDTH//2, SCREEN_HEIGHT//2), pygame.Rect(SCREEN_WIDTH//2, 0, SCREEN_WIDTH//2, SCREEN_HEIGHT//2), pygame.Rect(0, SCREEN_HEIGHT//2, SCREEN_WIDTH//2, SCREEN_HEIGHT//2), pygame.Rect(SCREEN_WIDTH//2, SCREEN_HEIGHT//2, SCREEN_WIDTH//2, SCREEN_HEIGHT//2), ] for i, r in enumerate(rects): pygame.draw.rect(screen, colors[i], r) pygame.draw.rect(screen, (0,0,0), r, 2) def main(): pygame.init() screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("🧪 Touch-Testfläche") font = pygame.font.SysFont(None, 28) clock = pygame.time.Clock() # OSC starten threading.Thread(target=start_osc, daemon=True).start() global touch_pos while True: for event in pygame.event.get(): if event.type == pygame.QUIT: return screen.fill((30, 30, 30)) # Quadranten zeigen draw_quadrants(screen) # Touch anzeigen if touch_pos is not None: pygame.draw.circle(screen, (255, 255, 255), touch_pos, 12) pygame.draw.circle(screen, (0, 0, 0), touch_pos, 12, 2) txt = font.render(f"{touch_pos[0]}, {touch_pos[1]}", True, (255, 255, 255)) screen.blit(txt, (touch_pos[0] + 15, touch_pos[1] - 10)) pygame.display.flip() clock.tick(60) if __name__ == "__main__": main()