eepp คือเกมข้ามแพลตฟอร์มแบบโอเพ่นซอร์สและเฟรมเวิร์กการพัฒนาแอปพลิเคชันที่เน้นหนักไปที่การพัฒนาอินเทอร์เฟซผู้ใช้แบบกราฟิกที่หลากหลาย
การสนับสนุนอย่างเป็นทางการสำหรับ Linux, Windows, macOS, Android และ iOS
ส่งออกเป็น HTML5 โดยใช้ emscripten โดยมีข้อจำกัดเล็กน้อย
ใช้ได้กับ BSD และ Haiku ด้วย
วิดเจ็ตพื้นฐานสำหรับจัดการออบเจ็กต์แอป/เกมเป็นโหนด พร้อมด้วยเหตุการณ์การโต้ตอบอินพุตพื้นฐานทั้งหมด (การคลิก การกดปุ่ม การวางเมาส์เหนือ โฟกัส ฯลฯ)
ระบบ UI ที่มีคุณลักษณะครบถ้วน รองรับภาพเคลื่อนไหว การปรับขนาด การหมุน การตัดภาพ กิจกรรม ข้อความ ฯลฯ
รองรับธีมและสกิน/ของตกแต่ง
การสนับสนุนความหนาแน่นของพิกเซล (การปรับขนาดองค์ประกอบ UI ที่กำหนดโดยความหนาแน่นของพิกเซลของหน้าจอ)
วิดเจ็ตพื้นฐานทั้งหมดถูกนำมาใช้ (ปุ่ม, กล่องข้อความ, กล่องคำสั่งผสม, กล่องอินพุต, เมนู, กล่องรายการ, แถบเลื่อน ฯลฯ )
วาดการสนับสนุนที่ไม่ถูกต้อง สามารถใช้เพื่อสร้างแอปจริงโดยใช้ทรัพยากรต่ำ (วาดใหม่เมื่อจำเป็นเท่านั้น)
ระบบเค้าโครงคล้ายกับเค้าโครงของ Android (LinearLayout, RelativeLayout, GridLayout)
คุณสมบัติขั้นสูง เช่น การเลือกข้อความ การคัดลอกและวาง และการผูกคีย์
โหลดและจัดรูปแบบเค้าโครงจาก XML
จัดแต่งทรงผมด้วย Cascading Style Sheets
ตัวเรนเดอร์สำหรับ OpenGL 2 (ไปป์ไลน์คงที่), OpenGL 3 (ไปป์ไลน์ที่ตั้งโปรแกรมได้), OpenGL ES 2, OpenGL ES 1 และ OpenGL Core Profile
Batch Renderer (การเรนเดอร์ทั้งหมดจะถูกแบทช์โดยอัตโนมัติโดยเอ็นจิ้น)
รองรับแบบอักษร (แบบอักษร TrueType, BMFont และ XNA)
รองรับเฟรมบัฟเฟอร์
รองรับ Shaders (พร้อมไปป์ไลน์อัตโนมัติคงที่ไปจนถึงคอนเวอร์เตอร์ที่ตั้งโปรแกรมได้)
รองรับวัตถุ Vertex Buffer
ระบบอนุภาค
คอนโซลแบบขยายได้
สไปรท์แบบเคลื่อนไหว
รองรับ Texture Atlas (การสร้างและอัปเดต Texture Atlas โดยอัตโนมัติ รวมไปถึงตัวแก้ไข)
มาสก์สำหรับตัด (ลายฉลุ กรรไกร เครื่องบิน)
รองรับบิตแมปที่ปรับขนาดได้ Nine Patch
สิ่งที่ถอนออกได้เบื้องต้น
รองรับรูปแบบภาพหลายรูปแบบ (รวม SVG แบบแรสเตอร์), รองรับพื้นผิวที่บีบอัด (อัปโหลดโดยตรงไปยัง GPU เมื่อเป็นไปได้)
โมดูลที่ใช้แบ็กเอนด์ ซึ่งหมายความว่าคุณสามารถสร้างแบ็กเอนด์สำหรับการจัดการหน้าต่าง/อินพุตได้อย่างง่ายดาย
ปัจจุบันรองรับ SDL 2 เป็นแบ็กเอนด์
การสนับสนุนคลิปบอร์ด
เคอร์เซอร์ฮาร์ดแวร์
ผู้จัดการฝ่ายแสดงผล
รองรับจอยสติ๊ก
จัดเตรียมสิ่งพื้นฐานทั้งหมดสำหรับการสนับสนุนแบบมัลติเธรดเต็มรูปแบบของไลบรารี รองรับรูปแบบไฟล์สำหรับการบรรจุ นาฬิกา ตัวจัดการทรัพยากร นักแปล และอื่นๆ อีกมากมาย
คลาส Virtual File System (ผู้ให้บริการสินทรัพย์นามธรรมให้เป็นระบบไฟล์เสมือนเดียว การแยกไฟล์ zip และระบบไฟล์ในเครื่องให้เป็นหนึ่งเดียวเพื่อการโหลดทรัพยากรที่โปร่งใส คล้ายกับ PhysicsFS)
ตัวจัดการหน่วยความจำที่ปรับแต่งได้ ใช้โดยค่าเริ่มต้นในโหมดแก้ไขข้อบกพร่องเพื่อติดตามการรั่วไหลของหน่วยความจำ
รองรับ UTF8, UTF-16, UTF-32, Ansi, Wide Char
คลาสสตริงที่ใช้อักขระ UTF-32 ภายใน
มาโครดีบัก
ฟังก์ชันและเทมเพลตวัตถุประสงค์ทั่วไป (เวกเตอร์, รูปสี่เหลี่ยม, รูปหลายเหลี่ยม ฯลฯ )
คลาสการแก้ไขด้วยความผ่อนคลาย
โปรแกรมอรรถประโยชน์ทางคณิตศาสตร์เล็กๆ น้อยๆ บางตัว ได้แก่ การใช้โปรแกรมสร้างตัวเลขสุ่มของ Mersenne Twister เสียงเพอร์ลิน และอื่นๆ อีกมากมาย
คำขอเว็บด้วยไคลเอนต์ HTTP พร้อม รองรับ TLS (จัดทำโดย mbedtls หรือ openssl)
คำขอ HTTP แบบอะซิงโครนัส
การถ่ายโอนไฟล์ด้วยไคลเอนต์ FTP และไคลเอนต์ FTPS (FTP พร้อม TLS ที่ชัดเจน)
ซ็อกเก็ต TCP และ UDP
รองรับการเข้ารหัสเนื้อหา HTTP และการเข้ารหัสการถ่ายโอน
การสนับสนุนพร็อกซี HTTP
รองรับการตอบสนองแบบบีบอัด HTTP
นอกจากนี้ยังรองรับ HTTP Resume/ดาวน์โหลดต่อและติดตามการเปลี่ยนเส้นทางอัตโนมัติ
ระบบที่ใช้โหนดเพื่อการจัดการฉากที่ง่ายดาย
ควบคุมเหตุการณ์โหนดได้อย่างสมบูรณ์ (การคลิก เมาส์เหนือ โฟกัส ฯลฯ)
ระบบเหตุการณ์
ระบบข้อความโหนด
การดำเนินการที่ตั้งโปรแกรมได้สำหรับโหนด (จางลง หมุน ย้าย ปรับขนาด ฯลฯ )
แผนที่แบบเรียงต่อกันพร้อมไฟไดนามิกของซอฟต์แวร์
เครื่องมือแก้ไขแผนที่ที่มีคุณสมบัติครบถ้วน
ตัวแก้ไข UI ที่ง่ายมาก โหลดเค้าโครงจากไฟล์ XML และดูการเปลี่ยนแปลงที่เกิดขึ้นแบบเรียลไทม์
ตัวแก้ไขพื้นผิว Atlas เครื่องมือง่ายๆ ที่ช่วยให้นักพัฒนาสามารถสร้างและแก้ไขแผนที่พื้นผิวได้
ตัวแก้ไขแผนที่: ตัวแก้ไขแผนที่ขั้นสูงแต่เรียบง่ายสำหรับเอ็นจิ้นเกม มันขาดคุณสมบัติหลายประการเนื่องจากฉันไม่มีเวลาทำงาน เครื่องมือเฉพาะนี้อาจจะตายเพราะการรองรับแผนที่ TMX ในอนาคตอันใกล้นี้ (แต่ฉันไม่ใช่แฟนของแผนที่ TMX ดังนั้นจึงไม่มีการตัดสินใจสำหรับ ขณะนี้)
เอกสารประกอบอยู่ที่นี่ ฉันกำลังดำเนินการปรับปรุงอยู่ ขณะนี้ประมาณ 50% ของโครงการได้รับการบันทึกไว้แล้ว ดังนั้นจึงยังต้องมีงานอีกมาก โปรดตรวจสอบตัวอย่างโค้ดที่อยู่ใน src/examples
และคุณยังสามารถตรวจสอบการทดสอบ ( src/test
) และเครื่องมือ ( src/tools
)
ฉันกำลังพยายามปรับปรุงเอกสารประกอบในโมดูล UI เนื่องจากปัจจุบันเป็นโมดูลที่สำคัญและซับซ้อนที่สุด แต่ยังขาดเอกสารที่เหมาะสม หากคุณมีคำถามใด ๆ คุณสามารถติดต่อฉันได้ตลอดเวลา
พื้นที่เก็บข้อมูลใช้โมดูลย่อย git ดังนั้นคุณจะต้องโคลนพื้นที่เก็บข้อมูลและโมดูลย่อย เพื่อให้บรรลุเป้าหมายนี้อย่างง่ายดาย คุณสามารถโคลนด้วย:
git clone --recurse-submodules https://github.com/SpartanJ/eepp.git
ecode คือโปรแกรมแก้ไขโค้ดที่ได้รับแรงบันดาลใจมาจากเวอร์ชัน Lite มันใช้ธีม CSS บริสุทธิ์ใหม่ล่าสุดโดยอิงตามธีมเริ่มต้นของ Plasma dark: Breeze Dark
เครื่องมือแก้ไขที่แสดงการเปลี่ยนแปลงในเค้าโครงและ CSS แบบเรียลไทม์ เพื่อช่วยเร่งการพัฒนาอินเทอร์เฟซผู้ใช้ ในภาพหน้าจอกำลังแสดงวิดเจ็ตเริ่มต้นบางส่วนที่มีอยู่ใน eepp
เครื่องมือขนาดเล็กที่ใช้ในการสร้างและแก้ไขแผนที่พื้นผิว
เครื่องมือแก้ไขแผนที่ 2 มิติโดยใช้ธีมสกินเริ่มต้น (ใช้แผนที่พื้นผิวเดี่ยวพร้อมรูปภาพ 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 );
การจัดสไตล์องค์ประกอบสามารถทำได้ด้วยการใช้ Cascading Style Sheets แบบกำหนดเอง กฎ CSS2 ทั่วไปส่วนใหญ่จะพร้อมใช้งาน รวมถึงกฎ CSS3 หลายข้อ (ตัวอย่างบางส่วน: ภาพเคลื่อนไหว การเปลี่ยนผ่าน คุณสมบัติที่กำหนดเอง การสืบค้นสื่อ @font-face ที่กฎ :องค์ประกอบรูท) . นี่เป็นตัวอย่างเล็กๆ น้อยๆ ว่า 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 ฉบับสมบูรณ์ได้ในเอกสาร: ที่นี่
คุณสามารถตรวจสอบได้ว่าธีม CSS ที่แท้จริงมีลักษณะอย่างไรใน eepp: ที่นี่
เนื่องจาก eepp รองรับ emscripten คุณจึงสามารถดูตัวอย่าง การสาธิต และเครื่องมือบางส่วนที่ไลบรารีให้บริการในปัจจุบันได้อย่างรวดเร็ว โปรดทราบว่าคุณจะพบความแตกต่างบางประการตามข้อจำกัดที่ emscripten มีในขณะนี้ (ไม่สามารถเข้าถึงระบบไฟล์ ไม่มีเคอร์เซอร์ที่กำหนดเอง ฯลฯ) และการสาธิตไม่ได้รับการปรับให้เหมาะสมกับขนาดและมีขนาดใหญ่กว่าที่ควรจะเป็น เป็น. หมายเหตุ: โปรดใช้เบราว์เซอร์รุ่นใหม่ที่รองรับ WebGL และ WASM ที่ดี (Chrome/ium 70+ หรือ Firefox 80+)
ecode - โปรแกรมแก้ไขโค้ด
ตัวแก้ไข UI
UI สวัสดีชาวโลก
ตัวแก้ไขพื้นผิว Atlas
เครื่องมือแก้ไขแผนที่
ตัวอย่างแบบอักษร
การสาธิตโมดูลฟิสิกส์
ตัวอย่างสไปรท์
การทดสอบแบบเต็ม
7GUI เป็นที่รู้จักในชื่อ "เกณฑ์มาตรฐานการเขียนโปรแกรม GUI" ซึ่งใช้เพื่อเปรียบเทียบไลบรารี GUI ต่างๆ และสำรวจแต่ละแนวทางในการเขียนโปรแกรม GUI งานทั้ง 7 งานที่เสนอใน 7GUI ได้รับการปรับใช้สำหรับ eepp แล้ว งานต่างๆ เป็นตัวแทนที่ดีมากของสิ่งที่สามารถทำได้ด้วย eepp GUI และยังมีประโยชน์มากในการสาธิตวิธีใช้งานต่างๆ กับไลบรารีอีกด้วย
7GUI ประกอบด้วยงานต่อไปนี้:
ตัวนับ: การสาธิตและการใช้โค้ด
ตัวแปลงอุณหภูมิ: การสาธิตและการใช้โค้ด
Flight Booker: การสาธิตและการใช้งานโค้ด
ตัวจับเวลา: การสาธิตและการนำโค้ดไปใช้
CRUD: การสาธิตและการนำโค้ดไปใช้
Circle Drawer: การสาธิตและการนำโค้ดไปใช้
เซลล์: การสาธิตและการนำโค้ดไปใช้
ไลบรารีมีการพึ่งพาภายนอกเพียงรายการเดียวเท่านั้น คุณจะต้องใช้ไลบรารี SDL2 ที่ติดตั้งส่วนหัวไว้เท่านั้น นอกจากนี้ จำเป็นต้องใช้ premake5 หรือ premake4 เพื่อสร้าง Makefiles หรือไฟล์โปรเจ็กต์เพื่อสร้างไลบรารี ฉันจะถือว่าคุณรู้ว่าคุณกำลังทำอะไรอยู่และข้ามพื้นฐานไป
หมายเหตุ: eepp ใช้ mojoAL เป็นค่าเริ่มต้นเป็นการแทนที่ OpenAL แบบดรอปอิน OpenAL มีให้เลือกใช้เป็นแบ็กเอนด์เสียง หากคุณต้องการใช้ คุณมีทางเลือกอื่นในการเปิดใช้งาน หากต้องการเปิดใช้งานและปิดการใช้งาน mojoAL drop-in replacemente คุณต้องเพิ่มพารามิเตอร์ --without-mojoal
ให้กับการโทร premake
ใดๆ ( เช่น 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 builds กำลังถูกผลิตและทดสอบด้วยการแจกจ่าย w64devkit ขณะนี้ MSYS ยังไม่ได้รับการสนับสนุนอย่างเป็นทางการ เนื่องจากมีปัญหาบางอย่างที่พบในกระบวนการสร้าง (แต่คุณสามารถสร้างได้ด้วยขั้นตอนเพิ่มเติมบางอย่าง)
หากคุณใช้ w64devkit คุณจะต้องดาวน์โหลดและแตกไฟล์ เราจะถือว่าแตกไฟล์ไว้ที่ C:w64devkit
ดำเนินการ C:w64devkitw64devkit.exe
ในฐานะผู้ดูแลระบบ ( right click
-> Run as administrator
)
จากนั้นไปที่ไดเร็กทอรีที่เก็บโคลน eepp
แล้วรัน:
premake5.exe --windows-mingw-build gmake2
--windows-mingw-build
จะดาวน์โหลดและเชื่อมโยงการอ้างอิงภายนอก (SDL2) โดยอัตโนมัติ
จากนั้นเพียงสร้างโปรเจ็กต์ที่อยู่ใน make/windows/
ด้วย mingw32-make.exe
หรือเทียบเท่า:
mingw32-make.exe -C make\windows config=release_x86_64
หากต้องการสร้างการดีบักบิลด์ให้รัน:
mingw32-make.exe -C make\windows config=debug_x86_64
จากนั้นตรวจสอบให้แน่ใจว่าได้คัดลอกไฟล์ SDL2.dll
ซึ่งอยู่ที่ src/thirdparty/SDL2-2.XX.X/x86_64-w64-mingw32/bin/SDL2.dll
ไปยัง bin
หากด้วยเหตุผลบางอย่าง eepp.dll
(หรือ eepp-debug.dll
) ไม่ได้ถูกคัดลอกโดยอัตโนมัติ คุณสามารถคัดลอกจาก libs/windows/x86_64/
ไปยัง bin
ได้
คุณจะต้องมีไบนารีที่สร้างไว้ล่วงหน้าและไลบรารีการพัฒนาของ SDL2 โดยมี OpenAL รวมอยู่ในระบบปฏิบัติการ ติดตั้งเฟรมเวิร์ก SDL2 และคุณควรจะสามารถสร้างโปรเจ็กต์ได้
คุณมีสองตัวเลือกในการสร้างโปรเจ็กต์: ด้วย XCode หรือด้วย Makefiles หากต้องการสร้างด้วยตัวเลือกทั้งสองอย่างก่อนอื่น คุณจะต้องสร้างไฟล์โปรเจ็กต์ด้วย premake4 หรือ premake5
สร้างโครงการ:
premake5 --use-frameworks gmake2
และสร้างมันขึ้นมา:
make -C make/macosx
คุณสามารถใช้สคริปต์ projects/osx/make.sh
ที่สร้าง Makefiles และสร้างโปรเจ็กต์
วิ่ง:
premake5 --use-frameworks xcode4
และเปิดโปรเจ็กต์ XCode ที่สร้างที่ make/macosx/
หรือเพียงแค่สร้างจากบรรทัดคำสั่งด้วย:
xcodebuild -project make/macosx/project-name.xcodeproj
มีโครงการ gradle ใน projects/android-project/
มันจะสร้างไลบรารี่พร้อมการขึ้นต่อกันทั้งหมด ใช้โปรเจ็กต์ตัวอย่างเป็นฐานสำหรับโปรเจ็กต์ของคุณ โปรดสังเกตว่ามีไฟล์โครงการ eepp.mk
ที่สร้างไลบรารี ไฟล์นั้นสามารถใช้ในโครงการของคุณได้
โปรเจ็กต์มีไฟล์สองไฟล์สำหรับสร้างไลบรารีและการสาธิต คุณสามารถใช้สิ่งเหล่านี้ได้ตามความต้องการของคุณ ไฟล์อยู่ใน projects/ios
:
สคริปต์นี้สามารถใช้เพื่อสร้างโปรเจ็กต์ xcode และโซลูชันของโปรเจ็กต์ทั้งหมดที่รวมอยู่ใน eepp (เดโม, เครื่องมือ, shared lib, static lib ฯลฯ) นอกจากนี้ยังจะดาวน์โหลดและสร้างไลบรารีสแตติกไขมัน SDL2 เพื่อให้สามารถอ้างอิงไลบรารีไปยังโปรเจ็กต์ได้ หลังจากสร้างโปรเจ็กต์แล้ว น่าเสียดายที่คุณจะต้องทำการเปลี่ยนแปลงเล็กน้อยกับโปรเจ็กต์ใดๆ/ทั้งหมดที่คุณไม่ต้องการสร้างหรือทดสอบ เนื่องจากโปรเจ็กต์ที่สร้างขึ้นไม่มีการกำหนดค่าเล็กๆ น้อยๆ บางอย่าง หลังจากที่คุณเรียกใช้สคริปต์นี้ คุณจะต้องเปิดโซลูชันที่อยู่ใน make/ios/eepp.xcworkspace
ในการสร้างไลบรารีแบบคงที่ คุณจะไม่พบปัญหาใด ๆ (ซึ่งจะแก้ไขได้ทันที) แต่เพื่อทดสอบตัวอย่างบางส่วน จำเป็นต้อง:
เลือก (คลิกที่ชื่อโครงการ) โครงการที่คุณต้องการทดสอบ เช่น eepp-empty-window
คุณจะเห็นแท็บ/ตัวเลือกหลายแท็บ ไปที่ Build Settings และค้นหาตัวเลือกไฟล์ Info.plist ดับเบิลคลิกเพื่อแก้ไขและเขียน: Info.plist
ซึ่งจะระบุว่าต้องอ่านไฟล์นั้นซึ่งอยู่ในไดเร็กทอรีเดียวกันกับโปรเจ็กต์ ไปที่แท็บ ทั่วไป และกรอก Bundle Identifier ด้วยชื่อตัวระบุของ App Bundle ที่จะถูกสร้างขึ้น สำหรับตัวอย่างนี้ คุณสามารถใช้สิ่งที่ต้องการ เช่น: eepp-empty-window
ที่จะช่วยให้คุณสามารถสร้างและดำเนินโครงการได้
การสาธิต eepp-empty-window
นี้ไม่ได้ใช้เนื้อหา/ทรัพยากรใดๆ แต่การสาธิตอื่นๆ จะต้องโหลดเนื้อหา และจำเป็นต้องเพิ่มเนื้อหานี้ลงในโปรเจ็กต์เพื่อให้พร้อมใช้งานใน App Bundle ตัวอย่างเช่น โปรเจ็กต์ eepp-ui-hello-world
จะต้องให้คุณเพิ่มโฟลเดอร์ assets
ลงในโปรเจ็กต์ สิ่งที่คุณต้องทำคือ: เลือกโปรเจ็กต์และไปที่แท็บ Build Phases ใน Copy Bundles Resources คลิกในไอคอนเครื่องหมายบวก (+) จากนั้นไปที่ Add Other... และค้นหาและเลือก bin/assets/
โฟลเดอร์และ เสร็จ . นั่นควรจะเพียงพอแล้ว
สคริปต์นี้สามารถใช้เพื่อสร้าง SDL2 และ eepp เป็นไลบรารีสแตติกไขมันสองตัวที่มีสถาปัตยกรรม arm64 และ x86_64 อยู่ในนั้น (arm64 สำหรับ iPhone/iPad และ x86_64 สำหรับเครื่องจำลอง) หากต้องการสร้าง release build pass config=release
เป็นพารามิเตอร์สำหรับสคริปต์ ( sh compile-all.sh config=release
) ไฟล์ที่สร้างขึ้นจะอยู่ใน libs/ios/
เช่น libSDL2.a
และ libeepp.a
(หรือ libeepp-debug.a
สำหรับ build debug) สองไฟล์นี้สามารถรวมเข้ากับโปรเจ็กต์ของคุณได้
คุณจะต้องดาวน์โหลดและติดตั้ง emscripten ก่อน จากนั้นก็มีสคริปต์สำหรับสร้างโครงการ emscripten ใน projects/emscripten/make.sh
ก่อนที่จะรันสคริปต์นี้ อย่าลืมตั้งค่าสภาพแวดล้อม emsdk ซึ่งควรมีลักษณะดังนี้: source /path/to/emsdk/emsdk_env.sh
นั่นควรจะเพียงพอใน GNU/Linux หรือ macOS (ทดสอบเฉพาะบน GNU/Linux เท่านั้น)
ไบนารีทั้งหมดจะอยู่ที่ไดเร็กทอรี bin
หลังจากสร้างแล้ว ไบนารีต้องใช้สองไฟล์: ไลบรารี eepp และไลบรารี SDL2 ไลบรารี eepp จะอยู่ใน libs/{OS}/
สคริปต์บิลด์จะพยายามเชื่อมโยงไลบรารี eepp เข้ากับ bin
หากล้มเหลว ควรคัดลอกหรือเชื่อมโยงด้วยตนเอง เนื่องจากไลบรารี SDL2 ไม่ได้จัดเตรียมไว้ให้ในพื้นที่เก็บข้อมูล ดังนั้นเพื่อที่จะรันการสาธิต คุณจะต้องดาวน์โหลดเวอร์ชันและสถาปัตยกรรมระบบปฏิบัติการไลบรารี SDL2 ที่ถูกต้อง
ห้องสมุดได้รับการพัฒนามาหลายปีแล้ว และมีการเปลี่ยนแปลงมากมายนับตั้งแต่เริ่มต้น ฉันกำลังทำการเปลี่ยนแปลงใดๆ ที่ฉันพบว่าจำเป็นในการปรับปรุง ดังนั้น API จึงยังไม่เสถียรโดยสิ้นเชิง (แต่ก็ใกล้เคียงแล้ว) มีการใช้ในหลายแอปพลิเคชันที่เน้นแคมเปญประชาสัมพันธ์ซึ่งส่วนใหญ่พัฒนาขึ้นสำหรับอุปกรณ์ Android และพีซี Windows
โดยส่วนตัวแล้วฉันไม่เคยมีเวลาในการพัฒนาเกมที่ซับซ้อนด้วยไลบรารี (โปรเจ็กต์ที่ผิดหวังหลายโครงการ) แต่ฉันสร้างเกมที่เน้น UI หลายเกมสำหรับลูกค้า
โฟกัสโครงการปัจจุบันอยู่ที่โมดูล UI และฉันจะทำงานต่อไปโดยให้ความสำคัญกับเรื่องนี้
แผนดังกล่าวคือการจัดเตรียมชุดเครื่องมือ UI ทางเลือกที่เร่งความเร็วด้วยฮาร์ดแวร์เต็มรูปแบบคล้ายกับชุดเครื่องมือ Android แต่ง่ายกว่า (ใช้งานง่าย) และยังเน้นไปที่แอปเดสก์ท็อปด้วย
โมดูลเสียงและเครือข่ายมีพื้นฐานมาจากโมดูลใน SFML โดยมีความแตกต่างที่สำคัญหลายประการที่กล่าวถึงข้างต้น
ฉันชอบที่จะใช้สิ่งที่ทำได้ดีและตรงกับความต้องการของฉัน แต่เนื่องจากฉันมีมุมมองส่วนตัวเกี่ยวกับวิธีการใช้งานบางอย่าง ฉันจึงชอบที่จะรับโค้ด เพื่อให้สามารถควบคุมมันได้อย่างเต็มที่
นอกจากนี้ยังมีแนวคิดมากมายที่นำมาจากโครงการอื่นๆ บางอย่างที่ฉันคิดได้: cocos2d-x , raylib , Android SDK , libGDX , Godot , XNA , LÖVE และโครงการอื่น ๆ อีกมากมาย
หากทั้งหมดนี้ฟังดูน่าสนใจสำหรับคุณด้วยเหตุผลบ้าบอบางอย่าง โปรดติดต่อฉันและแจ้งให้เราทราบหากฉันสามารถช่วยคุณเข้าห้องสมุดได้ และถ้าคุณต้องการ คุณสามารถมีส่วนร่วมได้ในอนาคต โครงการนี้ต้องการ ผู้ร่วมให้ข้อมูล มากกว่าสิ่งอื่นใด
สถานะของห้องสมุดในปัจจุบันอยู่ในเกณฑ์ดี ในแง่ของคุณสมบัติควรอยู่ในตำแหน่งที่คล้ายกันมากกว่าเอนจิ้นเกม 2D ที่ใช้กันมากที่สุด แต่ขาดการสนับสนุน+ชุมชนที่คุณจะได้รับจาก Godot หรือ cocos2d-x เพื่อพูดถึงสองสามอย่าง
แนวคิดหลักของไลบรารีนี้คือการมุ่งเน้นไปที่แนวทางทั่วไปที่ดีกว่าในการพัฒนาแอปและเกมที่ใช้ UI จำนวนมากมากกว่าตัวเลือกอื่นๆ ด้วยโค้ดและการนำไปใช้ที่สะอาดตายิ่งขึ้น
เหตุผลหลักที่ฉันพัฒนาห้องสมุดคือเพื่อ ความสนุกสนาน และ เรียนรู้ เทคโนโลยีใหม่ๆ ฉันชอบใช้เวลาทำงานในห้องสมุด แต่ฉันรู้ว่าไม่มีเหตุผลที่แท้จริงที่จะพัฒนาอะไรแบบนี้ด้วยทางเลือกที่คล้ายกันจำนวนมหาศาล
เกี่ยวกับคุณภาพของโค้ด: โปรเจ็กต์นี้เริ่มต้นเมื่อนานมาแล้วและมีการแก้ไขมากมายเมื่อเวลาผ่านไป โค้ดเบสที่ดีส่วนใหญ่ยังคงใช้วิธีปฏิบัติ C++ แบบเก่า (เช่น ตัวชี้แบบดิบ การใช้งานเธรดของตัวเอง mutex ฯลฯ ) สิ่งเหล่านี้บางอย่างสามารถ "ทำให้ทันสมัย" ได้ แต่บางอย่างไม่สมเหตุสมผลมากนัก หรือการยกเครื่องใหม่อาจใช้เวลานานเกินไปในการพิสูจน์ความพยายาม ฉันกำลังดำเนินการ "ปรับปรุง" โค้ดบางส่วนให้ทันสมัย และโค้ดใหม่มักจะดูทันสมัยมากขึ้น
ปรับปรุงระบบ UI ต่อไป เพิ่มวิดเจ็ตและเลย์เอาต์ใหม่ และปรับปรุงการรองรับ CSS
ลดความซับซ้อนและปรับปรุงการสนับสนุนสกิน/ธีมของวิดเจ็ต UI
ปรับปรุง/สร้างเอกสารสำหรับโมดูล UI
เพิ่มตัวอย่างและเครื่องมือเพิ่มเติม
เพิ่มการรองรับสคริปต์ แต่ก่อนอื่นฉันต้องการทำให้ไลบรารีมีเสถียรภาพ แต่ฉันไปถึงจุดนั้นแล้ว
เพิ่มการรองรับแอนิเมชั่นโครงกระดูก 2D (อาจเป็น Spine2D ไม่ควรใช้งานมากนัก)
อาจเลิกใช้โมดูล Maps เนื่องจากฉันจะเน้นไปที่ระบบ UI
Sean Barrett สำหรับ stb_image และไลบรารี stb ทั้งหมด
Sam Latinga สำหรับเลเยอร์ DirectMedia แบบธรรมดา
Jonathan Dummer สำหรับ Simple OpenGL Image Library
โลร็องต์ โกมิลา จาก SFML
ยูริ โคเบตส์ สำหรับ litehtml
ไมเคิล RP Ragazzon สำหรับ RmlUI
rxi สำหรับไลต์
Andreas Kling สำหรับ SerenityOS
Ryan C. Gordon สำหรับ mojoAL
เดวิด รีด สำหรับ dr_libs
Lion (Lieff) สำหรับ minimp3 และอีกมากมาย
ลูอิส ฟาน วิงเคิล สำหรับ PlusCallback
Dieter Baron และ Thomas Klausner สำหรับ libzip
Jean-loup Gailly และ Mark Adler จาก zlib
มิลาน อิคิตส์ และมาร์เซโล มากัลลอน จาก GLEW
Mikko Mononen สำหรับ nanosvg
สก็อตต์ เลมเบ็ค จาก Chipmunk2D
คริสตอฟ ริชซิโอ จาก GLM
Rich Geldreich สำหรับ imageresampler และ jpeg-compressor
Arseny Kapoulkine สำหรับ pugixml
เจสัน เพอร์กินส์ สำหรับพรีเมค
Martín Lucas Golini (ฉัน) และผู้มีส่วนร่วมหลายคนสำหรับ SOIL2 และ efsw
ชุมชนโอเพ่นซอร์ส Xiph สำหรับ libogg และ libvorbis
ชุมชน ARMmbed สำหรับ mbed TLS
kcat สำหรับ openal-soft
โครงการฟรีไทป์
และผู้คนอีก มากมาย !
ใบอนุญาตเอ็มไอที