eepp 는 풍부한 그래픽 사용자 인터페이스 개발에 중점을 둔 오픈 소스 크로스 플랫폼 게임 및 애플리케이션 개발 프레임워크입니다.
Linux, Windows, macOS, Android 및 iOS를 공식 지원합니다.
몇 가지 사소한 제한 사항이 있지만 emscripten을 사용하여 HTML5로 내보냅니다.
BSD와 Haiku에서도 작동합니다.
모든 기본 입력 상호 작용 이벤트(클릭, 키 누르기, 마우스 오버, 포커스 등)를 사용하여 앱/게임 개체를 노드로 관리하는 기본 위젯입니다.
모든 기능을 갖춘 UI 시스템, 애니메이션 지원, 크기 조정, 회전, 클리핑, 이벤트, 메시지 등
테마 및 스킨/장식을 지원합니다.
픽셀 밀도 지원(화면의 픽셀 밀도에 따라 정의된 UI 요소 크기 조정)
모든 기본 위젯이 구현됩니다(버튼, 텍스트 상자, 콤보 상자, 입력 상자, 메뉴, 목록 상자, 스크롤 막대 등).
무효화 지원을 그립니다. 리소스 사용량이 적은 실제 앱을 만드는 데 사용할 수 있습니다(필요할 때만 다시 그리기).
Android 레이아웃( LinearLayout, RelativeLayout, GridLayout )과 유사한 레이아웃 시스템입니다.
텍스트 선택, 복사 및 붙여넣기, 키 바인딩과 같은 고급 기능.
XML에서 레이아웃 로드 및 스타일 지정
계단식 스타일 시트를 사용한 스타일 지정
OpenGL 2(고정 파이프라인), OpenGL 3(프로그래밍 가능 파이프라인), OpenGL ES 2, OpenGL ES 1 및 OpenGL Core Profile용 렌더러입니다.
배치 렌더러(모든 렌더링은 엔진에 의해 자동으로 배치됩니다).
글꼴 지원(TrueType, BMFont 및 XNA 글꼴)
프레임 버퍼 지원.
셰이더 지원(프로그래밍 가능한 변환기에 대한 자동 고정 파이프라인 셰이더 포함)
정점 버퍼 객체 지원.
입자 시스템.
확장 가능한 콘솔.
애니메이션 스프라이트.
텍스처 아틀라스 지원(텍스처 아틀라스 자동 생성 및 업데이트, 편집기 포함)
클리핑 마스크(스텐실, 가위, 비행기)
Nine Patch 크기 조정이 가능한 비트맵을 지원합니다.
프리미티브 드로어블.
다양한 이미지 형식 지원(래스터화된 SVG 포함), 압축 텍스처 지원(가능한 경우 GPU에 직접 업로드).
백엔드 기반 모듈은 창/입력 처리를 위한 백엔드를 쉽게 만들 수 있음을 의미합니다.
현재 백엔드로 SDL 2를 지원합니다.
클립보드 지원.
하드웨어 커서.
디스플레이 관리자
조이스틱 지원.
라이브러리의 전체 멀티스레딩 지원, 패킹을 위한 파일 형식 지원, 시계, 리소스 관리자, 번역기 등을 위한 모든 기본 사항을 제공합니다.
가상 파일 시스템 클래스( PhysicsFS 와 유사하게 자원의 투명한 로드를 위해 zip 파일과 로컬 파일 시스템을 하나로 추상화하여 단일 가상 파일 시스템으로 추상 자산 공급자).
사용자 정의 가능한 메모리 관리자. 기본적으로 디버그 모드에서 메모리 누수를 추적하는 데 사용됩니다.
UTF8, UTF-16, UTF-32, Ansi, Wide Char 지원.
내부적으로 UTF-32 문자를 사용하는 문자열 클래스입니다.
매크로 디버그
범용 기능 및 템플릿(벡터, 쿼드, 폴리곤 등)
완화를 사용한 보간 클래스.
일부 사소한 수학 유틸리티에는 Mersenne Twister 난수 생성기 구현, Perlin 노이즈 등이 포함됩니다.
TLS 지원 (mbedtls 또는 openssl에서 제공)이 포함된 HTTP 클라이언트를 사용한 웹 요청.
비동기 HTTP 요청.
FTP 클라이언트 및 FTPS 클라이언트를 사용한 파일 전송(명시적 TLS를 사용하는 FTP)
TCP 및 UDP 소켓.
HTTP 콘텐츠 인코딩 및 전송 인코딩을 지원합니다.
HTTP 프록시 지원.
HTTP 압축 응답 지원.
또한 HTTP 재개/계속 다운로드 지원 및 자동 팔로우 리디렉션이 있습니다.
장면을 쉽게 관리할 수 있는 노드 기반 시스템입니다.
노드 이벤트(클릭, 마우스 오버, 포커스 등)를 완전히 제어합니다.
이벤트 시스템.
노드 메시지 시스템.
노드에 대한 프로그래밍 가능한 작업(페이드, 회전, 이동, 크기 조정 등).
소프트웨어 동적 조명이 포함된 타일형 지도입니다.
모든 기능을 갖춘 지도 편집기.
매우 간단한 UI 편집기. XML 파일에서 레이아웃을 로드하고 실시간으로 변경 사항을 확인하세요.
텍스처 아틀라스 편집기. 개발자가 텍스처 아틀라스를 생성하고 편집할 수 있는 매우 간단한 도구입니다.
지도 편집기: 게임 엔진을 위한 고급이지만 간단한 지도 편집기입니다. 작업할 시간이 없었기 때문에 여러 기능이 부족합니다. 이 특정 도구는 가까운 시일 내에 TMX 맵 지원을 선호하여 사라질 것입니다(그러나 저는 TMX 맵의 팬이 아니므로 이에 대한 결정은 없습니다). 순간).
문서는 여기에 있습니다. 현재 이를 개선하기 위해 노력하고 있습니다. 현재 프로젝트의 약 50%가 문서화되었으므로 여전히 많은 작업이 필요합니다. src/examples
에 있는 코드 예제를 확인하고 테스트( src/test
) 및 도구( src/tools
)도 확인할 수 있습니다.
UI 모듈은 현재 가장 중요하고 복잡한 모듈이지만 적절한 문서가 부족하기 때문에 문서화를 개선하기 위해 노력하고 있습니다. 질문이 있으시면 언제든지 저에게 연락하실 수 있습니다.
저장소는 git 하위 모듈을 사용하므로 저장소와 해당 하위 모듈을 복제해야 합니다. 이를 쉽게 달성하려면 다음을 사용하여 간단히 복제할 수 있습니다.
git clone --recurse-submodules https://github.com/SpartanJ/eepp.git
ecode는 Lite에서 영감을 받은 코드 편집기입니다. 기본 Plasma 다크 테마인 Breeze Dark를 기반으로 한 최신 순수 CSS 테마를 사용하고 있습니다.
사용자 인터페이스 개발 속도를 높이기 위해 레이아웃 및 CSS의 변경 사항을 실시간으로 표시하는 편집기입니다. 스크린샷에는 eepp에서 사용할 수 있는 기본 위젯 중 일부가 표시되어 있습니다.
텍스처 아틀라스를 생성하고 편집하는 데 사용되는 작은 도구입니다.
기본 스킨 테마를 사용하는 2D 맵 편집기(9패치 이미지가 포함된 단일 텍스처 아틀라스 사용)
모든 Android 개발자에게는 매우 친숙해 보일 것입니다. 수직 선형 레이아웃 디스플레이 중 가장 기본적인 위젯이 포함된 창입니다.
< window layout_width = " 300dp " layout_height = " 300dp " window-flags = " default|maximize|shadow " >
< LinearLayout id = " testlayout " orientation = " vertical " layout_width = " match_parent " layout_height = " match_parent " layout_margin = " 8dp " >
< TextView text = " Hello World! " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " backgroundColor = " black " />
< PushButton text = " OK! " textSize = " 16dp " icon = " ok " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " />
< Image src = " thecircle " layout_width = " match_parent " layout_height = " 32dp " flags = " clip " />
< Sprite src = " gn " />
< TextInput text = " test " layout_width = " match_parent " layout_height = " wrap_content " />
< DropDownList layout_width = " match_parent " layout_height = " wrap_content " selectedIndex = " 0 " >
< item >Test Item</ item >
< item >@string/test_item</ item >
</ DropDownList >
< ListBox layout_width = " match_parent " layout_height = " match_parent " layout_weight = " 1 " >
< item >Hello!</ item >
< item >World!</ item >
</ ListBox >
</ LinearLayout >
</ window >
UI 소개는 여기에서 확인할 수 있습니다 .
실제 코드에서는 어떻게 보일까요?
UITextView::New ()->setText( " Text on test 1 " )
->setCharacterSize( 12 )
->setLayoutMargin( Rect ( 10 , 10 , 10 , 10 ) )
->setLayoutSizePolicy( SizePolicy::MatchParent, SizePolicy::WrapContent )
->setParent( layout );
CSS 스타일 시트의 사용자 정의 구현을 통해 요소 스타일을 지정할 수 있으며, 가장 일반적인 CSS2 규칙과 여러 CSS3 규칙을 사용할 수 있습니다(일부 예: 애니메이션, 전환, 사용자 정의 속성, 미디어 쿼리, 규칙의 @font-face, :root 요소). . 다음은 CSS의 모양에 대한 간단한 예입니다.
@font-face {
font-family : "OpenSans Regular" ;
src : url ( "https://raw.githubusercontent.com/SpartanJ/eepp/develop/bin/assets/fonts/OpenSans-Regular.ttf" );
}
@import url ( "assets/layouts/imported.css" ) screen and ( min-width : 800 px );
: root {
--font-color : black;
--background-input-color : rgba ( 255 , 255 , 255 , 0.7 );
--border-color : black;
--border-width : 1 dp ;
}
. screen TextView {
color : var ( --font-color );
}
. form {
background-image : @drawable /back;
background-repeat : no-repeat;
background-size : cover;
}
. form . form_inputs {
background-color : var ( --non-existent , var ( --background-input-color ));
margin-left : 100 dp ;
margin-right : 100 dp ;
padding-top : 72 dp ;
padding-left : 57 dp ;
padding-right : 57 dp ;
padding-bottom : 115 dp ;
}
. screen TextView . input ,
. screen TextInput . input {
font-family : AkzidenzGroteskBQ-Cnd;
layout-width : match_parent;
layout-height : 80 dp ;
border-color : var ( --border-color );
border-width : var ( --border-width );
color : var ( --font-color );
padding-left : 40 dp ;
padding-right : 40 dp ;
margin-bottom : 32 dp ;
skin : none;
hint-font-family : AkzidenzGroteskBQ-Cnd;
hint-font-size : 46 dp ;
hint-color : # 818285 ;
background-color : # FFFFFF00 ;
transition : all 0.125 s ;
}
. screen TextInput . input : focus {
background-color : # FFFFFF66 ;
border-color : # 796500 ;
}
. screen TextInput . input : hover {
background-color : # FFFFFF66 ;
}
@media screen and ( max-width : 1024 px ) {
. form . form_inputs {
background-color : red;
}
}
전체 CSS 사양은 여기 문서에서 찾을 수 있습니다.
eepp에서 순수한 CSS 테마가 어떻게 보이는지 확인할 수도 있습니다: 여기.
eepp는 emscripten을 지원하므로 라이브러리가 현재 제공하는 일부 예제, 데모 및 도구를 간략하게 살펴볼 수 있습니다. 현재 emscripten의 제한 사항(파일 시스템에 대한 액세스 권한 없음, 사용자 정의 커서 없음 등)에 따라 몇 가지 차이점을 발견할 수 있으며 데모는 크기에 최적화되어 있지 않으며 원래보다 더 크다는 점에 유의하십시오. BE. 참고: WebGL 및 WASM이 잘 지원되는 최신 브라우저(Chrome/ium 70+ 또는 Firefox 80+)를 사용하십시오.
에코코드 - 코드 편집기
UI 편집기
UI 헬로월드
텍스처 아틀라스 편집기
지도 편집기
글꼴 예
물리학 모듈 데모
스프라이트 예
전체 테스트
7GUIs는 다양한 GUI 라이브러리를 비교하고 GUI 프로그래밍에 대한 각 라이브러리 접근 방식을 탐색하는 데 사용되는 "GUI 프로그래밍 벤치마크"로 알려져 있습니다. 7GUI에서 제안된 7가지 작업이 모두 eepp에 구현되었습니다. 작업은 eepp GUI로 달성할 수 있는 작업을 매우 잘 나타내며 라이브러리를 사용하여 다양한 작업을 구현하는 방법을 보여 주는 데에도 매우 유용합니다.
7GUI는 다음 작업으로 구성됩니다.
카운터: 데모 및 코드 구현.
온도 변환기: 데모 및 코드 구현.
Flight Booker: 데모 및 코드 구현.
타이머: 데모 및 코드 구현.
CRUD: 데모 및 코드 구현.
Circle Drawer: 데모 및 코드 구현.
셀: 데모 및 코드 구현.
라이브러리에는 외부 종속성이 하나만 있습니다. 헤더가 설치된 SDL2 라이브러리만 필요합니다. 또한 라이브러리를 빌드하기 위해 Makefile 또는 프로젝트 파일을 생성하려면 premake5 또는 premake4가 필요합니다. 나는 당신이 무엇을 하고 있는지 알고 있다고 가정하고 기본 사항은 건너뜁니다.
참고: eepp는 기본적으로 OpenAL 드롭인 대체품으로 mojoAL을 사용합니다. OpenAL은 선택적으로 오디오 백엔드로 사용할 수 있습니다. 이 기능을 사용하고 싶다면 활성화할 수 있는 방법이 있습니다. 이를 활성화하고 mojoAL 드롭인 교체를 비활성화하려면 premake
호출에 --without-mojoal
매개변수를 추가해야 합니다(예: premake5 --without-mojoal gmake2
).
Ubuntu 시스템에서는 다음과 같습니다(또한 gcc가 필요하지만 어쨌든 설치됩니다).
sudo apt-get install premake5 libsdl2-2.0-0 libsdl2-dev libopenal1 libopenal-dev
저장소를 복제하고 저장소 루트 디렉터리에서 실행합니다.
premake5 gmake2
또는 premake4가 설치되어 있으면 다음을 실행할 수 있습니다.
premake4 gmake
그런 다음 라이브러리를 빌드하십시오.
make -C make/linux
그게 다야. 그러면 전체 프로젝트가 빌드됩니다.
Visual Studio를 사용하여 빌드하거나 MinGW를 사용하여 빌드하는 두 가지 옵션이 있습니다. 이러한 옵션을 사용하여 프로젝트를 빌드하려면 먼저 premake4 또는 premake5를 사용하여 프로젝트 파일을 생성해야 합니다. 그런 다음 PATH
에 정의된 실행 가능 경로에 바이너리 파일을 추가해야 합니다(또는 추가하거나 로컬 경로에서 사용). 필요에 따라 Visual Studio 또는 MinGW 파일을 다운로드하세요.
premake5를 사용하고 다음을 실행해야 합니다.
premake5.exe --windows-vc-build vs2022
그런 다음 프로젝트 파일은 make/windows/
에서 찾을 수 있습니다. 완전한 솔루션과 모든 프로젝트를 사용할 수 있습니다. 모든 항목을 설치하고 나면 다른 프로젝트와 마찬가지로 Visual Studio 솔루션을 빌드할 수 있습니다.
명령줄 인수 --windows-vc-build
사용하면 SDL2 종속성을 자동으로 다운로드하고 외부 종속성을 수동으로 다운로드할 필요 없이 링크할 빌드 프로세스에 경로를 추가합니다.
그런 다음 Visual Studio에서 솔루션을 빌드하거나 콘솔에서 MSBuild
수동으로 실행하세요.
"%MSBUILD_PATH%MSBuild.exe" .makewindowseepp.sln -m
여기서 %MSBUILD_PATH%
는 MSBuild.exe Visual Studio 경로입니다. 예를 들어 VS2022 Community Edition 의 경우 일반적으로 경로는 다음과 같습니다.
C:Program FilesMicrosoft Visual Studio2022CommunityMSBuildCurrentBin
Windows MinGW 빌드는 w64devkit 배포판을 사용하여 생성 및 테스트되고 있습니다. MSYS는 빌드 프로세스에서 발견된 몇 가지 문제로 인해 현재 공식적으로 지원되지 않습니다(그러나 몇 가지 추가 단계를 거쳐 빌드하는 것은 가능합니다).
w64devkit을 사용하는 경우 다운로드하여 압축을 풀어야 하며 C:w64devkit
에서 추출된 것으로 가정합니다.
관리자 권한으로 C:w64devkitw64devkit.exe
실행합니다( right click
-> Run as administrator
).
그런 다음 eepp
복제된 저장소 디렉터리로 이동하여 다음을 실행합니다.
premake5.exe --windows-mingw-build gmake2
--windows-mingw-build
외부 종속성(SDL2)을 자동으로 다운로드하고 연결합니다.
그런 다음 mingw32-make.exe
또는 이에 상응하는 항목을 사용하여 make/windows/
에 있는 프로젝트를 빌드하십시오.
mingw32-make.exe -C make\windows config=release_x86_64
디버그 빌드 실행을 빌드하려면 다음 안내를 따르세요.
mingw32-make.exe -C make\windows config=debug_x86_64
그런 다음 src/thirdparty/SDL2-2.XX.X/x86_64-w64-mingw32/bin/SDL2.dll
에 있는 SDL2.dll
파일을 bin
에 복사해야 합니다. 어떤 이유로 eepp.dll
(또는 eepp-debug.dll
)이 자동으로 복사되지 않으면 libs/windows/x86_64/
에서 bin
으로 복사할 수 있습니다.
SDL2의 사전 빌드 바이너리와 개발 라이브러리가 필요하며 OpenAL은 OS에 포함되어 있습니다. SDL2 프레임워크를 설치하면 프로젝트를 빌드할 수 있습니다.
프로젝트를 빌드하는 데는 XCode 또는 Makefiles 라는 두 가지 옵션이 있습니다. 먼저 두 옵션 중 하나로 빌드하려면 premake4 또는 premake5를 사용하여 프로젝트 파일을 빌드해야 합니다.
프로젝트를 생성합니다.
premake5 --use-frameworks gmake2
그리고 빌드하세요:
make -C make/macosx
Makefile 을 생성하고 프로젝트를 빌드하는 projects/osx/make.sh
스크립트를 사용할 수 있습니다.
달리다:
premake5 --use-frameworks xcode4
그리고 make/macosx/
에서 생성된 XCode 프로젝트를 열거나 다음을 사용하여 명령줄에서 간단히 빌드하세요.
xcodebuild -project make/macosx/project-name.xcodeproj
projects/android-project/
에 Gradle 프로젝트가 있습니다. 모든 종속성을 포함하여 라이브러리를 빌드합니다. 예제 프로젝트를 프로젝트의 기반으로 사용하세요. 라이브러리를 빌드하는 eepp.mk
프로젝트 파일이 있습니다. 해당 파일은 프로젝트에서 사용할 수 있습니다.
이 프로젝트는 라이브러리와 데모를 빌드하기 위한 두 개의 파일을 제공합니다. 필요에 따라 이들 중 하나를 사용할 수 있습니다. 파일은 projects/ios
에 있습니다.
이 스크립트는 eepp에 포함된 모든 프로젝트(데모, 도구, 공유 lib, 정적 lib 등)의 xcode 프로젝트 및 솔루션을 생성하는 데 사용할 수 있습니다. 또한 프로젝트에서 라이브러리를 참조할 수 있도록 SDL2 fat 정적 라이브러리를 다운로드하고 빌드합니다. 슬프게도 프로젝트를 빌드한 후에는 생성된 프로젝트에 일부 사소한 구성이 부족하기 때문에 빌드하거나 테스트하고 싶지 않은 모든 프로젝트에 대해 약간의 변경을 해야 합니다. 이 스크립트를 실행한 후 make/ios/eepp.xcworkspace
에 있는 솔루션을 열어야 합니다. 정적 라이브러리를 빌드하는 데에는 어떤 문제도 발견되지 않습니다(즉시 해결됩니다). 그러나 일부 예제를 테스트하려면 다음이 필요합니다.
테스트하려는 프로젝트(예: eepp-empty-window
를 선택(프로젝트 이름 클릭)하세요. 여러 탭/옵션을 설정하고 Build Settings 로 이동하여 옵션 Info.plist 파일을 찾은 다음 Info.plist
편집하고 작성하려면 두 번 클릭합니다. 이는 프로젝트와 동일한 디렉터리에 있는 해당 파일을 읽음을 나타냅니다. 일반 탭으로 이동하여 생성될 앱 번들의 식별자 이름으로 번들 식별자를 완성합니다. 이 예에서는 eepp-empty-window
와 같은 것을 사용할 수 있습니다. 그러면 프로젝트를 빌드하고 실행할 수 있습니다.
이 eepp-empty-window
데모는 자산/리소스를 사용하지 않지만 다른 데모에서는 자산을 로드해야 하며 이 자산을 앱 번들에서 사용할 수 있으려면 프로젝트에 추가해야 합니다. 예를 들어 eepp-ui-hello-world
프로젝트에서는 assets
폴더를 프로젝트에 추가해야 합니다. 해야 할 일은 프로젝트를 선택하고 Build Phases 탭으로 이동한 다음 Copy Bundles Resources 에서 더하기 아이콘(+)을 클릭한 다음 Add Other... 로 이동하여 bin/assets/
폴더를 찾아서 선택하는 것입니다. 마치다 . 그 정도면 충분합니다.
이 스크립트는 arm64 및 x86_64 아키텍처(iPhone/iPad의 경우 arm64, 시뮬레이터의 경우 x86_64)가 포함된 두 개의 강력한 정적 라이브러리로 SDL2 및 eepp를 구축하는 데 사용할 수 있습니다. 릴리스 빌드를 생성하려면 config=release
스크립트의 매개변수로 전달합니다( sh compile-all.sh config=release
). 빌드된 파일은 libSDL2.a
및 libeepp.a
(또는 디버그 빌드의 경우 libeepp-debug.a
)로 libs/ios/
에 위치합니다. 이 두 파일은 프로젝트에 통합될 수 있습니다.
먼저 emscripten을 다운로드하고 설치해야 합니다. 그런 다음 projects/emscripten/make.sh
에 emscripten 프로젝트를 빌드하기 위한 스크립트가 있습니다. 이 스크립트를 실행하기 전에 emsdk 환경을 설정해야 합니다. source /path/to/emsdk/emsdk_env.sh
와 같아야 합니다. GNU/Linux 또는 macOS 에서는 충분합니다(GNU/Linux에서만 테스트했습니다).
모든 바이너리는 빌드된 후 bin
디렉터리에 위치합니다. 바이너리에는 eepp 라이브러리와 SDL2 라이브러리라는 두 개의 파일이 필요합니다. eepp 라이브러리는 libs/{OS}/
에 있습니다. 빌드 스크립트는 eepp 라이브러리를 bin
으로 심볼릭 링크하려고 시도합니다. 실패할 경우 수동으로 복사하거나 심볼릭 링크해야 합니다. SDL2 라이브러리는 저장소에 제공되지 않으므로 데모를 실행하려면 올바른 SDL2 라이브러리 OS 버전과 아키텍처를 다운로드해야 합니다.
라이브러리는 수년 동안 개발되어 왔으며 처음부터 많은 변화를 겪었습니다. 개선하기 위해 필요하다고 생각되는 모든 변경 작업을 수행하고 있으므로 API는 여전히 완전히 안정적이지는 않습니다(그러나 거의 안정적입니다). 주로 Android 장치 및 Windows PC용으로 개발된 홍보 캠페인을 지향하는 여러 애플리케이션에서 사용되고 있습니다.
저는 개인적으로 라이브러리를 사용하여 복잡한 게임을 개발하는 데 이를 사용할 시간이 없었지만(몇 가지 실망스러운 프로젝트) 클라이언트를 위해 여러 UI 지향 게임을 만들었습니다.
현재 프로젝트의 초점은 UI 모듈에 있습니다. 그리고 저는 이것에 초점을 맞춰 계속 노력할 것입니다.
계획은 Android 툴킷과 유사하지만 더 간단하고(사용하기 쉬움) 데스크톱 앱을 지향하는 완전히 하드웨어 가속된 대체 UI 툴킷을 제공하는 것입니다.
오디오 및 네트워크 모듈은 위에서 언급한 몇 가지 중요한 차이점을 제외하고 SFML의 모듈을 기반으로 했습니다.
나는 잘 수행되고 내 필요에 맞는 것을 사용하는 것을 좋아하지만 일부 기능을 구현하는 방법에 대한 개인적인 견해가 있기 때문에 코드를 사용하여 코드를 완전히 제어하는 것을 선호합니다.
또한 많은 아이디어가 다른 프로젝트에서 취해졌습니다. 내가 생각할 수 있는 몇 가지 프로젝트는 cocos2d-x , raylib , Android SDK , libGDX , Godot , XNA , LÖVE 및 기타 여러 프로젝트입니다.
어떤 말도 안되는 이유로 이 모든 것이 당신에게 흥미로울 경우, 저에게 연락하여 당신이 도서관에 들어갈 수 있도록 도와줄 수 있는지 알려주십시오. 원하시면 나중에 기여하실 수도 있습니다. 이 프로젝트에는 무엇보다 기여자가 필요합니다.
현재 도서관 상태는 양호합니다. 기능 측면에서 가장 많이 사용되는 2D 게임 엔진과 비슷한 위치에 있어야 합니다. 하지만 Godot 이나 cocos2d-x 에서 얻을 수 있는 지원+커뮤니티가 부족합니다.
이 라이브러리의 주요 아이디어는 더 깔끔한 코드와 구현을 사용하여 다른 옵션보다 UI 기반 앱과 게임을 개발하기 위한 더 나은 일반적인 접근 방식에 초점을 맞추는 것입니다.
제가 라이브러리를 개발한 가장 큰 이유는 재미 와 새로운 기술을 배우기 위해서입니다. 나는 도서관에서 일하면서 시간을 보내는 것을 좋아하지만, 엄청나게 많은 유사한 대안을 가지고 이와 같은 것을 개발할 실제 이유가 없을 것이라는 것을 알고 있습니다.
코드 품질과 관련하여: 이 프로젝트는 아주 오래 전에 시작되었으며 시간이 지남에 따라 많은 수정을 겪었습니다. 코드 베이스의 상당 부분은 여전히 오래된 C++ 방식(예: 원시 포인터, 자체 스레드 구현, 뮤텍스 등)을 사용합니다. 이러한 것 중 일부는 "현대화"될 수 있지만 다른 것들은 그다지 의미가 없거나 이를 정밀 검사하는 데 노력을 정당화하는 데 너무 많은 시간이 걸립니다. 저는 코드의 일부 부분을 "현대화"하는 작업을 하고 있는데, 새 코드는 일반적으로 더 현대적으로 보이는 경향이 있습니다.
UI 시스템을 계속 개선하고, 새로운 위젯과 레이아웃을 추가하고, CSS 지원을 개선하세요.
UI 위젯 스키닝/테마 지원을 단순화하고 개선합니다.
UI 모듈에 대한 문서를 개선/작성합니다.
더 많은 예제와 몇 가지 도구를 추가하세요.
스크립팅 지원을 추가합니다. 하지만 먼저 라이브러리를 안정화하고 싶지만 거기에 도달하고 있습니다.
2D 골격 애니메이션 지원을 추가합니다(아마도 Spine2D를 구현하는 데 많은 작업이 필요하지 않을 것입니다).
아마도 지도 모듈은 더 이상 사용되지 않을 것입니다. 왜냐하면 저는 UI 시스템에 집중할 것이기 때문입니다.
stb_image 및 모든 stb 라이브러리의 Sean Barrett입니다.
Simple DirectMedia Layer의 Sam Latinga입니다.
Simple OpenGL 이미지 라이브러리의 Jonathan Dummer입니다.
SFML의 로랑 고밀라
Litehtml용 Yuri Kobets
RmlUI용 Michael RP Ragazzon
라이트용 rxi
SerenityOS용 안드레아스 클링
mojoAL의 Ryan C. Gordon
dr_libs의 David Reid
minimp3 등을 위한 Lion(Lieff)
PlusCallback용 루이스 반 윙클(Lewis Van Winkle)
libzip을 위한 Dieter Baron과 Thomas Klausner
zlib의 Jean-loup Gailly와 Mark Adler
GLEW를 위한 Milan Ikits와 Marcelo Magallon
nanosvg를 위한 Mikko Mononen
Chipmunk2D의 Scott Lembcke
GLM의 크리스토프 리치오
이미지 리샘플러 및 JPEG 압축기를 위한 Rich Geldreich
pugixml용 Arseny Kapoulkine
프리메이크를 위한 제이슨 퍼킨스
Martín Lucas Golini(나) 및 SOIL2 및 efsw의 모든 기여자
libogg 및 libvorbis를 위한 Xiph 오픈 소스 커뮤니티
mbed TLS를 위한 ARMmbed 커뮤니티
오픈소프트용 kcat
프리타입 프로젝트
그리고 훨씬 더 많은 사람들!
MIT 라이센스