몇 년 전 MFC, QT, Forms, SWING 및 몇 가지 웹 GUI 프레임 워크와 같은 많은 "보존 된"GUI 시스템 (내가 의미하는 바에 대한 자세한 내용)을 사용하여 응용 프로그램 개발을 진행하고 있습니다. 나는 항상 대부분의 GUI 시스템의 개념이 지나치게 복잡하고 어색하다는 것을 알았습니다. 콜백 이벤트, 리스너, 데이터 사본, 문자열에서 무언가로의 변환-변환 등은 항상 응용 프로그램의 다른 부분과 비교할 때 실수와 두통의 원인이었습니다. (데이터 바인딩 / 모델을 "적절하게"사용하는 경우에도).
지금 나는 컴퓨터 게임을 쓰고 있습니다 :). 나는 지금까지 하나의 GUI로 작업했습니다 : Miyagi (잘 알려진 것은 아니지만 기본적으로 다른 모든 시스템과 동일한 아이디어).
끔직했다.
게임과 같은 실시간 렌더링 환경에서는 "보존 된"GUI 시스템이 훨씬 더 오래되었다는 느낌을받습니다. 사용자 인터페이스는 일반적으로 자동 레이아웃되거나 크기 조정 가능한 창을 즉시 가질 필요가 없습니다. 대신 항상 변화하는 데이터 (세계의 3D 모델 위치)와 매우 효율적으로 상호 작용해야합니다.
몇 년 전, 나는 기본적으로 즉시 그래픽 모드와 비슷하지만 사용자 인터페이스를위한 "IMGUI"를 우연히 발견했습니다. 나는 여전히 응용 프로그램 개발에 있었고 IMGUI 장면 자체가 실제로 광범위하거나 성공적이지 않은 것처럼 보였으므로 너무주의를 기울이지 않았습니다. 여전히 그들이 접근하는 방식은 너무 섹시하고 우아해 보입니다. 그래서이 UI 방식을 사용하여 다음 프로젝트를 위해 무언가 를 쓰고 싶었습니다 (직장에서 누군가를 설득하지 못했습니다 : (...)
"보유"와 "즉시"의 의미를 요약하겠습니다.
유지되는 GUI : 별도의 초기화 단계에서 레이블, 단추, 텍스트 상자 등과 같은 "GUI 컨트롤"을 만들고 어떤 것이 렌더링되기 전에 화면에 배치하는 설명 적 (또는 프로그래밍 방식) 방법을 사용합니다. 컨트롤은 X, Y 위치, 크기, 테두리, 자식 컨트롤, 레이블 텍스트, 이미지 등과 같은 대부분의 상태를 메모리에 저장합니다. 콜백 및 리스너를 추가하여 이벤트에 대한 정보를 얻고 GUI 제어에서 데이터를 업데이트 할 수 있습니다.
즉각적인 GUI : GUI 라이브러리는 원샷 "RenderButton", "RenderLabel", "RenderTextBox"... 함수로 구성됩니다 (편집 : Render에 의해 혼동하지 마십시오)접두사. 이 함수는 또한 사용자 입력 폴링, 문자 삽입, 사용자가 키를 눌렀을 때 문자 반복 속도 처리 등과 같은 제어 뒤의 논리를 수행하여 컨트롤을 "즉시"렌더링하도록 할 수 있습니다. t는 GPU에 즉시 기록되어야하며, 일반적으로 현재 프레임을 기억하고 나중에 적절한 배치로 분류됩니다. 라이브러리는 이에 대한 "상태"를 보유하지 않습니다. 버튼을 숨기려면 RenderButton 함수를 호출하지 마십시오. 버튼 또는 확인란과 같은 사용자 상호 작용이있는 모든 RenderXXX 함수에는 사용자가 버튼을 클릭했는지 여부를 나타내는 반환 값이 있습니다. "RenderGUI" 함수는 게임 상태에 따라 RenderXXX 함수를 호출하거나 호출하지 않는 큰 if / else 함수처럼 보이며 모든 데이터 업데이트 논리 (버튼을 누를 때)가 흐름에 얽혀 있습니다. 모든 데이터 스토리지는 GUI 외부에 있으며 필요에 따라 렌더링 기능으로 전달됩니다. (물론, 큰 함수를 여러 함수로 나누거나 GUI의 일부를 그룹화하기 위해 클래스 추상화를 사용합니다. 우리는 1980 년과 같은 코드를 더 이상 작성하지 않습니다.;)
이제 Unity3D는 실제로 내장 GUI 시스템에 대해 동일한 기본 접근 방식을 사용한다는 것을 알았습니다. 아마도이 접근법을 가진 GUI가 몇 개 있습니까?
아직도 .. 둘러 볼 때, 유지되는 GUI 시스템에 대한 강한 편견이있는 것 같습니까? 적어도 Unity3D를 제외 하고는이 접근법을 찾지 못했으며 원래 IMGUI 커뮤니티는 오히려 .... .. 조용한 것으로 보입니다.
누구든지 두 가지 아이디어로 일하고 강한 의견이 있습니까?
편집 : 나는 실제 경험에서 비롯된 의견에 가장 관심이 있습니다. IMGUI 포럼에는 즉각적인 GUI 접근 방식의 "이론적 약점"에 대해 많은 논의가 있지만 실제 세계의 약점에 대해 아는 것이 항상 더 밝습니다 .