Paintball 토너먼트에 대한 맞춤형 Scoreboard System 만들기
Table of Contents
왜 주문을 받아서 만들어진 득점판 매트
paintball에서 경기는 빠르고 결정은 초에서 일어납니다. ‐ shelf 득점판은 보통 농구 또는 축구 같이 전통적인 스포츠를 위해 디자인되고 paintball의 유일한 게임 형태를 위해 필요로 하는 융통성이 부족합니다. 주문 체계 제안:
- 실시간 점수 업데이트 즉, flag Capture 또는 point-based 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 객관적인 의실을 반영합니다.
- 여러 형식의 지원—3 ‐맨 팀에서 큰 시나리오 게임—엄밀한 템플릿을 강제로.
- 향상된 spectator 참여 동적 그래픽, 라이브 타이머 및 팀별 통계를 통해.
- 인간의 오류 감소 태블릿 또는 referees의 장치를 통해 데이터 입력을 자동화함으로써.
- 회사 소개 스폰서 로고, 이벤트 이름 및 사용자 정의 색상 계획을 표시하는.
사용자 정의 솔루션으로 데이터를 소유합니다. 나중에 자신의 이야기를 분석 할 수 있습니다, 플레이어 성능, 및 토너먼트 동향—무제한 종이 시트 또는 폐쇄 독점 시스템과 불가능. 다이렉트와 같은 현대 헤드리스 CMS는이 불가능하지만 이벤트를 통해 반복 할 수 있습니다.
Scoreboard Backend를 위한 Directus를 활용
Directus는 득점판 신청을 위한 강력한 백엔드 역할을 하는 오픈 소스 헤드리스 CMS입니다. 그것은 팀, 경기를 관리하고, 코드의 단일 라인을 작성하지 않고 점수를 관리하기 위해 관리자를 위한 청결한, 사용자 친절한 공용영역을 제공합니다. 그것의 REST와 GraphQL APIs는, 순간 WebSocket 지원과 결합해, 살아있는 득점판 체계를 위한 이상적인 선택입니다.
Directus Project 설정
직접 서버를 실행할 수 있습니다 (self-hosted) 또는 관리 된 경험을위한 Directus Cloud 서비스를 사용할 수 있습니다. 토너먼트 설정의 경우 로컬 네트워크에 자체 호스팅은 대기 시간을 피하기 위해 선호 될 수 있습니다. 이 단계를 따르십시오.
- Docker 또는 직접 Node.js 배포를 통해 Directus를 설치하십시오. 공식 Quickstart 가이드 몇 분 안에 프로세스를 개요.
- 데이터베이스 구성 (PostgreSQL, MySQL, SQLite-SQLite는 오프라인 사용에 이상적입니다).
- 관리자 사용자를 설정하고 토너먼트에 특별히 프로젝트를 만듭니다.
- 즉시 점수 업데이트를 위해 WebSockets를 사용하려는 경우 "Realtime"모듈을 활성화하십시오.
Data Model 설계
당신의 득점판의 자료 스키마는 당신의 대회의 구조를 반영해야 합니다. 수집을 창조하십시오 (테이블) Directus를 위해:
- 팀 소개—name, 로고 (이미지 URL), 로스터 (플레이어에 대한 관계), 기본 색상.
- 팟캐스트—이름, 번호, 팀 (관계), 옵션 통계 (제거, 사망, 조회).
- 팟캐스트-round, 필드, 시작 시간, 상태 (오름, 라이브, 완료, 과시), 기간.
- 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의—match (relation), 팀 (relation), 점수 값, 타임스탬프 (특히 라이브 득점에 유용합니다), 득점 이벤트 유형 (제거, 깃발 붙잡음, 등).
- 의약- 선택적, 플레이어와 일치 관계와 함께 (최소, 주요, 정체)를 추적.
- 경기일정—모든 중요한 사건의 로그 (스코어 변경, 처벌, 시간) 재생 및 감사.
Directus의 내장 관계 필드 (many‐to‐one, many‐to‐many)을 사용하여이 컬렉션을 연결하십시오. 예를 들어, 일치는 두 팀이 있습니다 (또는 멀티 팀 형식에 대한 더 많은) 다른 시간에 기록 된 여러 점수 항목을. 추가 고려 의정부 같은 Directus 인스턴스에서 여러 이벤트를 실행할 계획이라면, 각 토너먼트는 자체 일정과 규칙을 가질 수 있습니다.
공인 된 참조만 점수를 쓸 수 있으므로 권한 설정, 공개 득점판 프론트엔드만 가장 최근의 데이터에 대한 액세스를 읽을 필요가 있습니다. 또한 제한된 쓰기 액세스를 사용하여 "scorekeeper" 역할을 설정하고 점수 만 일치 할 수 있습니다.
Real‐Time 업데이트와 Directus Realtime
Paintball 토너먼트가 빠르게 움직이고 점수 디스플레이의 지연은 혼란을 만듭니다. Directus' 실시간 모듈 모든 컬렉션에서 변경할 수 있습니다. 추천 점수나 일치 상태 변경을 업데이트할 때, frontend는 WebSocket을 통해 즉시 업데이트됩니다.
그것을 사용하려면:
- 을 프런트엔 프로젝트에 설치합니다.
- Directus 인스턴스에 WebSocket 연결을 만듭니다.
- 실시간 이벤트에 대한 “scores” 또는 “matches” 컬렉션에 가입하십시오.
- , , ] 이벤트를 듣고 UI를 수정합니다.
이 접근법은 투표를 위한 필요를 삭제하고 득점판을 보는 모든 장치가 동기화된 것을 보증합니다. 많은 동시 경기를 가진 큰 대회를 위해, 특정한 경기 ID에 대역폭을 감소시키기 위하여 WebSocket 수로를 사용하여 고려하십시오.
딥 다이브: WebSocket 연결 관리
강력한 득점판을 구축 할 때 연결이 완전히 떨어졌다. 과 ] 웹소켓 클라이언트의 이벤트에 가입하십시오. 단선에서, exponential backoff reconnection을 실행하여 1초 지연과 최대 30초의 두 배로 늘립니다. Directus’ Realtime Module은 30초마다 기본으로 보냅니다. 3개의 심박수를 놓으면 연결이 손실되는 것이 안전합니다. "REST"는 웹소켓에 남아있는 것처럼 보일 수 있습니다. 따라서, 웹소켓을 다시 한번 검사하는 것은 약간의 검사를 할 수 있습니다.
프론트엔드 디스플레이 구축
프론트엔드는 플레이어, 추천, 그리고 spectators가 실제로 볼 수 있는 것입니다. 웹 애플리케이션, 전용 태블릿 인터페이스 또는 대형 스크린 대시보드로 빌드할 수 있습니다.
프레임을 선택
모든 현대 JavaScript 프레임 워크 (React, Vue, Svelte, 또는 vanilla JS)가 작동 할 것입니다. 토너먼트 직원이 비 기술이면 작은 스크립트가 가장 eas일 수 있는 간단한 HTML + CSS 페이지가 될 수 있습니다. 더 진보 된 상호 작용을 위해, Directus SDK와 React는 견고한 선택입니다. Vue 3은 구성 API를 사용하여 실시간 데이터와 잘 결합합니다 또는 사용자 정의 반응성.
경량 솔루션을 선호하는 팀에 대해, 고려 알파인.js— 빌드 단계없이 정적 HTML에 민감하는 동작을 추가 할 수 있습니다. 이것은 비행에 득점판을 편집 할 수있는 작은 토너먼트에 이상적입니다.
Directus SDK와 통합
Directus는 REST 클라이언트와 실시간 클라이언트를 모두 제공합니다. 득점판을 위해, 당신은 일반적으로 있을 것입니다:
- REST API를 사용하여 초기 일치 데이터 및 팀 정보로드합니다.
- 웹소켓 구독으로 전환하여 라이브 업데이트에 대한.
- 플리커링 없이 점수를 업데이트하는 UI를 설계 (CSS 전환 도움).
통합 흐름 예:
- 프론트엔드(필요한 경우)를 인증하거나 공개 읽는 API 토큰을 사용합니다.
- 다이렉트에서 현재 일치 목록을 읽으십시오.
- 각 활동 경기를 위해, 2개의 팀 및 그들의 현재 점수를 표시하십시오.
- “scores” 컬렉션에 변경하고 점수 표시를 렌더링합니다.
UI 스냅피를 유지하려면 일괄 점수 업데이트: 여러 점수 이벤트가 몇 밀리 초 이내에 온 경우, 디버깅 상태 업데이트 (예를 들어, requestAnimationFrame 또는 100ms debounce)를 사용하여 단일 렌더링으로 그룹화하십시오.
사용자 인터페이스 설계
Clarity는 기적이다. 좋은 득점판 배치는 다음을 포함합니다:
- 팀 이름 (대, 대조 색깔).
- 점수 번호 (매우 큰, 거리에서 읽는 쉬운 - 최소 80px 글꼴 1 차 점수).
- 일치 타이머 (countdown 또는 탈출 시간).
- “status” 지표 (예: “Playing”, “Break”, “Final”).
- 선택 사항: 제거 카운터 또는 kill-death 비율을 위한 개별 통계.
높은 대조 색상 (예 : 어두운 배경에 흰색 텍스트)을 사용하여 화면을 깎아냅니다. 책임감있는 디자인은 50 인치 TV와 레지 태블릿 모두에서 득점판이 잘 보입니다. TV 디스플레이를 위해 단일 일치보기가있는 16 : 9 종횡비를 고려하십시오. 모바일 레지 스크린의 경우 여러 경기에 대한 탭이있는 더 컴팩트 한 레이아웃을 사용하십시오.
표시 점수, 타이머, 일치 상태
데이터 흐름은 다음과 같습니다.
- 참고문헌은 모바일 형태로 점수(또는 제거 이벤트)를 입력합니다. POST 요청은 Directus API로 이동합니다.
- Directus는 WebSocket을 통해 "create" 이벤트를 기록 및 방송합니다.
- 프론트엔드는 이벤트를 받고, 로컬 상태를 업데이트하고, 점수를 다시 렌더링합니다.
- 타이머는 시작/끝 시간 동안 Directus 필드와 함께 클라이언트 측(국적 시계 사용) 또는 서버 측을 처리할 수 있습니다. 정확도를 위해 서버 측 접근 방식을 사용하십시오. 경기가 시작될 때, 참조는 필드를 설정하고, 프론트엔드는 그 시간 동안 남은 시간을 계산합니다. 서버는 Directus Flow 또는 작은 사용자 정의 엔드포인트를 통해 각 초마다 필드를 업데이트할 수 있습니다.
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.
Custom Scoreboard System의 주요 특징
기본을 넘어,이 고급 기능을 고려하여 토너먼트가 눈에 띄는:
- 여러 경기 전망— 토너먼트가 동시 필드를 실행하면, 득점판은 모든 활성 경기를 표시하거나 필드 사이 전환 할 수 있습니다. 멀티 필드 디스플레이에 대한 2x2 또는 3x2 패널과 그리드 레이아웃을 사용합니다.
- 재플레이 또는 느린 모션—not for the scoreboard itself, but the data layer can support “undo” action (storing history) so you can correct 실수. 타임스탬프와 모든 점수 변경의 로그를 구현; 제어판은 가장 최근 이벤트를 반전하는 "undo last"버튼을 포함 할 수 있습니다.
- Sponsor 통합— rotate 스폰서 로고는 사이드바 또는 경기 사이입니다. 이미지 필드와 정렬 순서로 "스폰서"에 대한 Directus 컬렉션을 사용합니다. 프론트엔드는 임의 스폰서를 30 초마다 표시하거나 ticker에서 표시합니다.
- 스트리밍을위한 Public API— 토너먼트 온라인을 방송하면 iframe 또는 custom RTMP로 득점판 오버레이를 포함. OBS와 같은 많은 스트리밍 도구는 브라우저 창을 캡처 할 수 있습니다; 투명 배경으로 득점판을 디자인하여 게임 피드를 오버레이합니다.
- 종이 백업 모드— 디지털 시스템에서 항상 인쇄 된 scorecard와 펜 준비. 또한, 네트워크가 반환 할 때 로컬 저장소와 동기화에 점수를 저장하는 간단한 오프라인 캡처 가능한 fallback 페이지를 만들.
고급: Livestreams에 대 한 득점판 오버레이
토너먼트를 라이브 스트림 할 계획이라면 OBS 오버레이에 최적화된 별도의 HTML 페이지를 만들 수 있습니다. 모든 배경을 제거하고 절대 위치 설정 및 팀 색상과 점수에 CSS 변수를 노출하므로 스트리밍 팀은 쉽게 조정할 수 있습니다. ]를 로 사용하여 투명 를 사용하십시오. OBS의 브라우저 소스로이 페이지를 삽입하고 점수 변경으로 실시간 업데이트됩니다.
단계별
이 구조화 과정을 따라 스크래치에서 스크래치로 여러분의 득점판을 구축하십시오.
단계 1: 대회 규칙과 득점을 정의
이 규칙은 진정한 의미를 가진 것입니다. 이 규칙은 진정한 의미를 가진 것입니다. 이 규칙은 진정한 의미를 가진 것입니다. 이 규칙은 진정한 의미를 가진 것입니다. 이 규칙은 진정한 의미를 가진 것입니다. 이 규칙은 진정한 의미를 가진 진정한 의미를 가진 것입니다.
2단계: Directus 컬렉션 설정
다이렉트로그는 직접 프로젝트를 진행하고 이전에 컬렉션을 만들 수 있습니다. 예를 들어, 점수는 비결점 정수가 있어야 합니다. “referee” 역할에 대한 권한 구성은 점수와 일치 상태에 대한 액세스를 쓸 수 있도록 허용하지만, “public” 역할(프론트엔드에 의해 사용)은 읽을 수 있는 ‐만 액세스가 있습니다. 일부 필드가 있는 경우 다이렉트로그의 필드 레벨 권한 사용(플레이어와 같은)은 숨겨져야 합니다.
3 단계 : API 엔드포인트를 구축하거나 Directus SDK를 사용
Directus의 생성된 REST 엔드포인트를 프런트엔드에서 직접 사용하거나, 추가 비즈니스 논리(예를 들어, 여러 이벤트에서 총을 계산하기 위해)를 필요로 하는 경우 사용자 정의 API 엔드포인트를 구축할 수 있습니다. 대부분의 토너먼트에서는, 내장 REST 및 WebSocket 엔드포인트가 충분합니다. 사용 SDK 소개 인증 및 실시간 구독을 단순화하기 위해. 서버 측 타이머 동기화가 필요한 경우, ]를 업데이트하는 다이렉트 사용자 정의 엔드포인트를 생성하면 cron job 또는 Flow를 통해 두 번째로.
4단계: Frontend 부품 개발
spectators 및 Refer 패널에 대한 디스플레이 페이지를 만듭니다. spectator view read‐only 및 focus on large, clear elements. 제어판은 버튼과 형태가 더 컴팩트 할 수 있습니다. 점수 변경 (예 : 점수 증가시 간단한 플래시) CSS 애니메이션을 사용하십시오. 제어판을 위해 장갑을 착용하면서 쉽게 탭 할 수있는 대형 버튼이있는 모바일 ‐First 디자인을 사용하여 고려하십시오.
5 단계 : 실제 일치 테스트
웹소프트는 웹소프트의 모든 기능을 사용하여 웹소프트를 사용하여 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하고, 웹소프트를 생성하는 것을 생성한다.
6 단계 : 배포 및 기차 직원
로컬 서버 또는 클라우드 호스트에 프론트 엔드를 배포합니다. 오프라인 이벤트를 위해, Directus를 실행하고 WiFi 핫스팟과 로컬 노트북에 프론트 엔드를 실행하십시오. Docker Compose를 사용하여 묶음 Directus 및 경량 웹 서버 (Nginx 또는 Caddy와 같은)을 프론트 엔드에 사용합니다. 제어판을 사용하는 방법에 대한 기차 참조는 가능한 한 간단합니다. 한 탭을 사용하여 팀의 점수를 증가시키고, 한 버튼이 시작 / 정지 시간. 빠른 백업 시스템의 경우, 전체 시스템의 관리자는 시스템의 전체 시스템의 관리자의 관리자의 관리자의 관리자의 관리자의 관리자의 관리자의 관리자의 관리자의 관리자의 관리자의 관리자를 설정할 수 있습니다.
Directus의 보안 및 권한
득점판은 여러 역할에 의해 접근되는 살아있는 체계이기 때문에, 안전은 중요합니다. 3개의 방향 역할 창조에 의해 시작하십시오:
- 관련 기사—모든 컬렉션과 설정에 대한 전체 액세스 ( 토너먼트 주최자에 사용).
- 의정부- 점수, 일치 상태, 처벌 및 경기 이벤트에 대한 액세스를 씁니다. 팀, 플레이어 및 토너먼트에 대한 액세스를 읽으십시오.
- 의 의—듣기만 하면 점수, 경기 (상태 “live” 또는 “finished”), 팀, 플레이어와 일치합니다. 액세스는 쓰지 않습니다.
Directus의 권한 시스템을 사용하여 수집 수준에서 이러한 시행합니다. 추가 보안을 위해 제어 패널이 특정 태블릿에서만 사용되는 IP 주소로 참조 액세스를 제한합니다. Directus 인스턴스에서 HTTPS를 사용하려면 특히 스트리밍 오버레이에 인터넷에 노출하면됩니다.
Live Scoreboards에 대한 성능 최적화
토너먼트는 동시에 일어나는 수십 개의 경기가있을 수 있습니다. WebSocket 피드를 응답하려면:
- 종종 변경되는 컬렉션에만 가입하십시오 (예 : 및 ]]). 이벤트 중 업데이트하지 않는 ]와 같은 정적 컬렉션에 대해 설명하지 마십시오.
- Directus의 필터 매개 변수를 사용하여 관련 레코드에만 가입하십시오. 예를 들어, 필터 ]를 사용하여 ]를 사용하여 소음을 줄일 수 있습니다.
- 프론트엔드에서, UI 업데이트를 debounce. 여러 점수 이벤트가 동일한 애니메이션 프레임 내에서 도착하면 단일 DOM 업데이트로 배치됩니다.
- 브라우저의 로컬 저장소에 로컬로 Cache 팀 이름과 로고를 통해 연결되는 모든 연결에 대해 알아볼 필요가 없습니다.
- 매우 큰 토너먼트 ( 선수의 훈 드), 선수 통계를 파고 수요에로드.
성공적인 구현을위한 팁
- 네트워크가 간단하게 유지됩니다. 적절한 대역폭을 가진 단일 WiFi 네트워크를 사용하십시오. 공공 장치를 연결하지 마십시오. 추천을 위한 전용 태블릿을 사용하십시오. 5 GHz 네트워크를 더 낮은 방해를 고려하십시오.
- 초기 데이터 캐시. 모든 팀 이름, 경기 일정 및 로고를 시작으로 프론트엔드에로드하여 WebSocket 아웃리지가 즉시 디스플레이를 깨지 않습니다.
- 가을을 사용하십시오. 마지막 리조트로 수동 입력 필드를 가진 정적 HTML 페이지를 가지고 나중에 업로드 할 수있는 로컬 JSON 파일에 동기화.
- 타이머 정확도를 시험하십시오. 서버 측 타이머를 사용하는 경우 WebSocket 메시지가 장치간에 드리프트를 피하기 위해 정확한 서버 시간을 포함합니다. 또는, 사용 ] ]] ]] ]] ]] ]] ] ]] ]] ]] ] ]] ]] ]] ]] ]] ]]] ]]] ]]]] ]]]] 더 정확한 간격을 위한 클라이언트에 방법.
- 접근성을 고려하십시오. 시각적 장애를 가진 시청자들을 위한 큰 글꼴과 높은 대조를 사용합니다. 일치 시작/끝과 같은 중요한 사건을 위한 오디오 피드백 (버거)를 제공합니다. 지역을 사용하여 스크린 독자 사용자를 위한 점수 변화를 발표하십시오.
- 힘을위한 계획. 모든 장치는 완전히 충전되어야하며 배터리 및 파워 스트립에 대한 백업이 있습니다. 가능한 경우 UPS의 득점판 노트북을 실행하십시오.
- 데이터 모델 문서. 수집 및 관계의 다이어그램을 유지하십시오. 미래 토너먼트 주최자는 쉽게 시스템을 수정할 수 있습니다.
의약
Directus에 내장 된 사용자 정의 득점판 시스템은 원시 매뉴얼 점수에서 전문적이고 매력적인 경험으로 페인트 볼 토너먼트를 변환합니다. 데이터 모델을 소유하고 실시간 업데이트를 활용하면 플레이어와 스펙트럼을 유지하면서 모든 규칙 세트에 적응할 수있는 전체 유연성을 얻습니다. 여기서 단계는 데이터 모델링부터 배포까지 - 토너먼트 당일에 의존하고 필드에 모든 것을 감수 할 수있는 득점판을 만들 수 있습니다.
더 읽기를 위해, 탐구 Directus 웹사이트, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , APPA 토너먼트 규칙, 실제 웹 개발 자습서 구축 실시간 대시보드 의 Vue.js 또는 퀵메뉴. 다음 paintball 토너먼트는 결코 동일하지 않을 것입니다.