왜 주문을 받아서 만들어진 득점판 매트

페인트볼에서 경기는 빠르고 결정은 초에서 발생합니다. ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐

  • Real‐time score update 의 eliminations, flag Captures, 또는 point‐based goals를 즉시 반영합니다.
  • 여러 형식 지원-3-man 팀에서 엄밀한 템플릿을 강제하지 않고 큰 시나리오 게임.
  • 엔진 분광기 참여] 동적 그래픽, 라이브 타이머 및 팀별 통계를 통해.
  • Human error를 자동화하여 정제 또는 참조’ 장치를 통해 데이터 입력을 자동화합니다.
  • Branding opportunity 스폰서 로고, 이벤트 이름 및 사용자 정의 색상 구성 표시.

사용자 정의 솔루션으로 데이터도 소유합니다. 나중에 자신의 이야기, 플레이어 성능 및 토너먼트 동향과 일치하여 일회용 용지 또는 폐쇄 된 독점 시스템과 불가능합니다. 다이렉트와 같은 현대 헤드리스 CMS는이 불가능하지만 이벤트 전반에 걸쳐 반복 할 수 있습니다.

Scoreboard Backend를 위한 Directus를 활용

Directus는 득점판 신청을 위한 강력한 백엔드 역할을 하는 오픈 소스 헤드리스 CMS입니다. 그것은 팀, 경기를 관리하고, 코드의 단일 라인을 작성하지 않고 점수를 관리하기 위해 관리자를 위한 청결한, 사용자 친절한 공용영역을 제공합니다. 그것의 REST와 GraphQL APIs는, 실시간 WebSocket 지원과 결합해, 살아있는 득점판 체계를 위한 이상적인 선택입니다.

Directus Project 설정

직접 서버를 실행할 수 있습니다 (self-hosted) 또는 관리 된 경험을위한 Directus Cloud 서비스를 사용할 수 있습니다. 토너먼트 설정에 대한 자체 호스팅 로컬 네트워크는 대기 시간을 피하기 위해 선호 될 수 있습니다. 이 단계를 따르십시오.

  1. Docker 또는 직접 Node.js 배포를 통해 Directus를 설치하십시오. official Quickstart guide]는 몇 분 안에 프로세스를 개요합니다.
  2. 데이터베이스 구성 (PostgreSQL, MySQL, SQLite-SQLite는 오프라인 사용에 이상적입니다).
  3. 관리자 사용자를 설정하고 토너먼트에 특별히 프로젝트를 만듭니다.
  4. 즉시 점수 업데이트를 위해 WebSockets를 사용하려는 경우 "Realtime"모듈을 활성화하십시오.

Data Model 설계

당신의 득점판의 자료 스키마는 당신의 대회의 구조를 반영해야 합니다. 수집을 창조하십시오 (테이블) Directus를 위해:

  • Teams-name, 로고(이미지 URL), 로스터(레칭), 초색.
  • Players-name, number, team (relation), 옵션 통계(eliminations, Deaths, hits).
  • Matches-round, field, start time, status (pending, live, 완성, overtime), 기간.
  • Scores-match (relation), 팀 (relation), 점수 값, 타임스탬프 (특히 라이브 득점에 유용합니다), 득점 이벤트 유형 (제거, 플래그 캡처 등).
  • Penalties-선택, 플레이어와 일치 관계와 함께 infractions (minor, major, disqualification)를 추적하기 위해.
  • Match Events-Replay and Auditing을 위한 모든 중요한 사건 (score changes, penalties, timeouts)의 로그.

Directus의 내장 관계 필드 (many‐to‐one, many‐to‐many)이 컬렉션을 연결하기 위해. 예를 들어, 일치는 두 팀이 있습니다 (또는 멀티 팀 형식에 대한 더 많은) 다른 시간에 기록 된 여러 점수 항목. Tournament 수집을 추가 고려하면 동일한 Directus 인스턴스에서 여러 이벤트를 실행할 수 있습니다-각 토너먼트는 자체 일정과 규칙을 가질 수 있습니다.

인증된 추천자는 점수를 쓸 수 있으므로, 공개 득점판은 가장 최근의 데이터에 대한 액세스를 읽을 필요가 있습니다. 또한, “scorekeeper” 역할을 설정하여 상태와 점수에 제한적으로 쓰기 액세스를 할 수 있습니다.

Real‐Time 업데이트와 Directus Realtime

Paintball 토너먼트는 점수 표시에서 빠르게 연기가 혼동을 만듭니다. Directus ']Realtime module]는 수집에서 변경할 수 있습니다. 추천 점수 또는 일치 상태 변경을 업데이트하면, frontend는 WebSocket을 통해 즉시 업데이트가 표시됩니다.

그것을 사용하려면:

  • ] 을 프런트엔 프로젝트에 설치합니다.
  • Directus 인스턴스에 WebSocket 연결을 만듭니다.
  • 실시간 이벤트에 대한 “scores” 또는 “matches” 컬렉션에 가입하십시오.
  • , , ] 이벤트를 듣고 UI를 수정합니다.

이 접근법은 투표를 위한 필요를 삭제하고 득점판을 보는 모든 장치가 동기화된다는 것을 보증합니다. 많은 동시 경기를 가진 큰 대회를 위해, 특정한 경기 ID에 대역폭을 감소시키기 위하여 WebSocket 수로를 사용하여 고려하십시오.

딥 다이브: WebSocket 연결 관리

강력한 득점판을 구축 할 때 연결이 완전히 떨어지는 것을 처리하십시오. 와 ] 웹소켓 클라이언트에서 이벤트를 구독하십시오. 단선에서, exponential backoff reconnection을 실행하십시오. 1 초 지연과 30 초까지 두 배로 늘립니다. Directus의 Realtime 모듈은 30 초마다 심베를 전송합니다. 3 개의 심베를 놓으면 연결이 손실됩니다. "REST"는 웹소켓에 남아있는 것처럼 보일 수 있습니다. 따라서 웹소켓을 다시 체크 아웃 할 수 있습니다.

Frontend 디스플레이 구축

프론트엔드는 플레이어, 추천, 그리고 spectators가 실제로 볼 수 있는 것입니다. 웹 애플리케이션, 전용 태블릿 인터페이스 또는 대형 스크린 대시보드로 빌드할 수 있습니다.

프레임을 선택

모든 현대 JavaScript 프레임 워크 (React, Vue, Svelte, 또는 vanilla JS)는 작동 할 것입니다. 토너먼트 직원이 비 기술이 아닌 경우, 작은 스크립트가있는 간단한 HTML + CSS 페이지가 가장 eas. 더 고급 상호 작용을 위해, Directus SDK와 React는 견고한 선택입니다. Vue 3은 구성 API와 함께 또는 사용자 정의 반응성 를 사용하여 실시간 데이터와 잘 쌍합니다.

경량 솔루션을 선호하는 팀의 경우 Alpine.js]를 사용하여 빌드 단계없이 정적 HTML에 민감하는 동작을 추가 할 수 있습니다. 이것은 비행에 득점판을 편집 할 수있는 작은 토너먼트에 이상적입니다.

Directus SDK와 통합

Directus는 REST 클라이언트와 실시간 클라이언트를 모두 제공합니다. 득점판을 위해, 당신은 일반적으로 있을 것입니다:

  • REST API를 사용하여 초기 일치 데이터 및 팀 정보로드합니다.
  • 웹소켓 구독을 라이브 업데이트합니다.
  • 플리커링 없이 점수를 업데이트하는 UI를 설계 (CSS 전환 도움).

예 통합 흐름:

  1. 프론트엔드(필요한 경우)를 인증하거나 공개 read‐only API 토큰을 사용합니다.
  2. 다이렉트에서 현재 일치 목록을 읽으십시오.
  3. 각 활성 경기를 위해 두 팀과 현재의 점수를 표시합니다.
  4. “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 또는 작은 사용자 정의 엔드포인트를 통해 필드를 매 초마다 업데이트할 수 있습니다.

일치 상태를 위해, 참조는 Directus (예 : "설정"에서 "완료"로 "플레이"로 "완료"로 . 일반적인 패턴은 버튼과 참조를 위한 "제어판"보기가 있으며 타이머, 증가 점수 및 통화 처벌을 시작합니다. 인증이 필요한 별도의 페이지를 구축하십시오. Directus의 내장 역할 기반 권한을 보호하는 데 사용됩니다.

Custom Scoreboard System의 주요 특징

기본을 넘어,이 고급 기능을 고려하여 토너먼트가 눈에 띄는:

  • 다중 매치 뷰-당신의 토너먼트가 동시 필드를 실행하는 경우, 득점판은 모든 활성 경기를 표시하거나 필드 사이에 전환 할 수 있습니다. 멀티 필드 디스플레이에 대한 2x2 또는 3x2 패널과 그리드 레이아웃을 사용합니다.
  • Replay or slow‐motion- scoreboard 자체에 대한 하지, 하지만 데이터 레이어는 "undo"작동을 지원할 수 있습니다 (역사를 습득) 그래서 실수를 수정할 수 있습니다. 타임스탬프와 모든 점수 변경의 로그를 구현; 제어 패널은 가장 최근 이벤트를 역임 하는 "undo last"버튼을 포함할 수 있습니다.
  • Sponsor integration-rotate 스폰서 로고는 사이드바 또는 일치합니다. 이미지 필드와 정렬 순서로 “스폰서”에 대한 Directus 컬렉션을 사용합니다. frontend는 30 초마다 무작위 스폰서를 표시하거나 ticker에서 표시할 수 있습니다.
  • ]공유 API 스트리밍-당신이 온라인 토너먼트를 방송하면, iframe 또는 custom RTMP로 득점판 오버레이를 포함. OBS 같은 많은 스트리밍 도구는 브라우저 창을 캡처 할 수 있습니다; 투명 배경으로 득점판을 디자인하여 게임 피드를 오버레이합니다.
  • Paper 백업 모드- 디지털 시스템에서, 항상 인쇄된 scorecard와 펜을 준비. 또한, 네트워크가 반환될 때 로컬저장 및 동기화에 점수를 저장하는 간단한 오프라인 리스블 익스플로러 백 페이지를 만들 수 있습니다.

고급: Livestreams에 대 한 득점판 오버레이

토너먼트를 라이브 스트리밍 할 계획이라면 OBS 오버레이에 최적화된 별도의 HTML 페이지를 만들 수 있습니다. 모든 배경을 제거하고, 절대 위치 설정을 사용하여 팀 색상과 점수에 CSS 변수를 노출하므로 스트리밍 팀은 쉽게 조정할 수 있습니다. 를 로 투명 를 사용하십시오. OBS의 브라우저 소스로이 페이지를 삽입하고, 점수 변경으로 실시간 업데이트됩니다.

단계별

이 구조화 과정을 따라 스크래치에서 스크래치로 여러분의 득점판을 구축하십시오.

단계 1: 대회 규칙과 득점을 정의

모든 코드를 작성하기 전에, 문서는 정확히 어떻게 작업. 포인트가 플래그를 만지고? 자비 규칙이 있습니까? 과시 관계가 해결 된 방법? 이 규칙은 데이터 모델을 인용합니다. 예를 들어, 삭제 포인트 수를 제거하면 제거 이벤트에 대한 별도의 컬렉션이 필요합니다. 또한 시간 제한, 벌금 포인트 감소 및 갑작스런 죽음과 같은 특별한 시나리오를 정의합니다.

2단계: Directus 컬렉션 설정

다이렉트로그 프로젝트로 로그인하고 이전 컬렉션을 만들 수 있습니다. 예를 들어, 점수는 비결합성 정수이어야 합니다. “referee” 역할에 대한 권한 구성은 점수와 일치 상태에 대한 액세스를 쓸 수 있도록 허용하지만, “public” 역할 (프론트엔드에 의해 사용)은 읽을 수 있습니다. 일부 필드 (플레이어 연락처 정보와 같은)가 숨겨져야 할 경우 다이렉트로그의 필드 레벨 권한을 사용하십시오.

3 단계 : API 엔드포인트를 구축하거나 Directus SDK를 사용

Directus의 생성된 REST 엔드포인트를 프런트엔드에서 직접 사용하거나, 추가 비즈니스 로직(예:, 여러 이벤트에서 총을 계산하기 위해)을 필요로 하는 경우 사용자 정의 API 엔드포인트를 구축할 수 있습니다. 대부분의 토너먼트에서는, 내장 REST 및 WebSocket 엔드포인트가 충분합니다. Directus SDK를 사용하여 인증 및 실시간 구독을 단순화합니다. 서버 ‐사이드 타임 스톰이 필요한 경우, Directus SDK]를 사용하여 커넥티드 커넥티드를 통해 커넥티드를 생성하거나, 커넥티드를 통해 커넥티드할 수 있습니다.

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개의 방향 역할 창조에 의해 시작하십시오:

  • Administrator-모든 컬렉션 및 설정에 대한 전체 액세스 ( 토너먼트 주최자에 의해 사용).
  • Referee - 점수, 일치 상태, 처벌 및 경기 이벤트에 대한 액세스를 씁니다. 팀, 선수 및 토너먼트에 대한 액세스를 읽으십시오.
  • Public - 점수에 대한 읽기 전용 액세스, 경기 (상태 “라이브” 또는 “완료”), 팀, 선수. 번호 쓰기 액세스.

Directus의 권한 시스템을 사용하여 수집 수준에서 이러한 작업을 수행하십시오. 추가 보안을 위해 제어 패널이 특정 태블릿에서만 사용되는 IP 주소로 참조 액세스 제한을 제한하십시오. Directus 인스턴스에서 HTTPS를 사용하려면 특히 스트리밍 오버레이에 인터넷에 노출하면됩니다.

Live Scoreboards에 대한 성능 최적화

토너먼트는 동시에 일어나는 수십 개의 경기가있을 수 있습니다. WebSocket 피드를 계속하려면 응답:

  • 종종 변경되는 컬렉션에만 가입하십시오 (예 : 및 ]]). 이벤트 중 업데이트하지 않는 ]와 같은 정적 컬렉션에 대해 설명하지 마십시오.
  • Directus의 필터 매개 변수를 사용하여 관련 레코드에만 가입하십시오. 예를 들어, 필터 ]를 사용하여 ]를 사용하여 소음을 줄일 수 있습니다.
  • 프론트엔드에서, debounce UI 업데이트. 여러 점수 이벤트가 동일한 애니메이션 프레임 내에서 도착하면 단일 DOM 업데이트로 배치됩니다.
  • 브라우저의 로컬 저장소에서 로컬로 Cache 팀 이름과 로고를 통해 연결될 필요가 없습니다.
  • 매우 큰 대회 ( 선수의 훈제), 선수 통계를 파고 수요에로드.

성공적인 구현을위한 팁

  • 네트워크를 간단히 연결하십시오.]는 적절한 대역폭을 가진 단일 Wi-Fi 네트워크를 사용합니다. 공공 장치를 연결하지 마십시오; 추천 전용 정제를 사용하십시오. 낮은 방해를 위해 5 GHz 네트워크를 고려하십시오.
  • 초기 데이터를 캐시합니다.] 모든 팀 이름, 경기 일정 및 로고를 시작으로 WebSocket 아웃리지가 즉시 표시되지 않도록 설정합니다.
  • fallback을 사용합니다.] 은 마지막 리조트로 수동 입력 필드를 가진 정적 HTML 페이지를 가지고 있으며 나중에 업로드 할 수있는 로컬 JSON 파일과 동기화됩니다.
  • 타이머 정확도를 테스트합니다.] 서버 측 타이머를 사용하는 경우 WebSocket 메시지가 장치간에 무해한 것을 방지하기 위해 정확한 서버 시간을 포함합니다. 또는 ]]]]더 정확한 간격을 위해 클라이언트에 대한 메소드를 사용하십시오.
  • Consider accessibility. 시각적 임의로 뷰어에 대 한 큰 글꼴과 높은 대조를 사용 합니다. 오디오 피드백 제공 (버거) 중요한 이벤트 일치 시작/끝. 사용 ] 스크린 리더 사용자에 대 한 점수 변경을 발표 하는 지구.
  • ]전원플랜. 모든 기기는 완전 충전되어야 하며, 배터리 및 파워 스트립에 대한 백업이 있습니다. UPS에서 득점판 노트북을 실행하면 가능합니다.
  • 데이터모델을 문서화합니다.]는 수집과 관계의 다이어그램을 유지하므로 향후 토너먼트 주최자는 쉽게 시스템을 수정할 수 있습니다.

관련 기사

Directus에 내장 된 맞춤형 득점판 시스템은 원시 매뉴얼 점수에서 전문적이고 매력적인 경험으로 페인트 볼 토너먼트를 변환합니다. 데이터 모델과 실제 시간 업데이트를 활용하면 플레이어와 스펙트럼을 유지하면서 규칙 세트에 맞게 총 유연성을 얻을 수 있습니다. 이 단계에서는 배치에 따라 배치 할 수 있습니다. 토너먼트 당일에 의존하고 필드에 모든 것을 감탄 할 수있는 득점판을 만들 수 있습니다.

더 읽기를 위해 Directus 웹 사이트, APPA 토너먼트 규칙, ]]Vue.js 또는 React]를 구축하는 실제 웹 개발 튜토리얼을 살펴보십시오. 다음 paintball 토너먼트는 결코 동일하지 않을 것입니다.