ส่วนหัว C/C++ ข้ามแพลตฟอร์มไฟล์เดียวต่างๆ ที่ใช้ไลบรารี่ที่มีในตัวเอง
ห้องสมุด | คำอธิบาย | เวอร์ชันล่าสุด | ภาษา |
---|---|---|---|
น่ารัก_c2 | กิจวัตรการตรวจจับการชนกันของ 2D บนพื้นฐาน ผลลัพธ์บูลีนและ/หรือการสร้างท่อร่วม การทดสอบการหล่อ/กวาดรูปร่าง เรย์แคสต์ | 1.10 | ซี/ซี++ |
cute_net | ไลบรารีระบบเครือข่ายสำหรับเกมที่ต้องการเลเยอร์ความน่าเชื่อถือเสริมบน UDP พร้อมแผนการรักษาความปลอดภัยแบบอบ | 1.03 | ซี/ซี++ |
น่ารัก_ปูกระเบื้อง | ตัวโหลดที่มีประสิทธิภาพมากสำหรับแผนที่แบบเรียงต่อกันที่ส่งออกเป็นรูปแบบ JSON | 1.07 | ซี/ซี++ |
cute_aseprite | แยกวิเคราะห์ไฟล์ .ase/.aseprite ลงในคอลเลกชันโครงสร้างที่กะทัดรัดและสะดวกสบาย | 1.04 | ซี/ซี++ |
น่ารัก_เสียง | โหลด/เล่น/วนซ้ำ (พร้อมปลั๊กอิน)/แพน WAV + OGG (stb_vorbis wrapper สำหรับ OGG) ในแบบโมโน/สเตอริโอ มิกเซอร์แบบกำหนดเองประสิทธิภาพสูง เพลง + รองรับ crossfade | 2.08 | ซี/ซี++ |
น่ารัก_คณิต | คณิตศาสตร์เวกเตอร์ 3 มิติระดับมืออาชีพผ่านอินทรินซิก SSE | 1.02 | ซี++ |
น่ารัก_png | โหลด/บันทึก PNG, คอมไพเลอร์ Atlas พื้นผิว, ตัวขยายการบีบอัดที่สอดคล้องกับ DEFLATE | 1.05 | ซี/ซี++ |
cute_spritebatch | รันไทม์ 2d sprite batcher สร้าง Atlases ในหน่วยความจำได้ทันที มีประโยชน์ในการใช้ Sprite Batcher เพื่อวัตถุประสงค์ใดๆ (เช่น เกม 2D) เพื่อการเรนเดอร์ประสิทธิภาพสูง โดยไม่จำเป็นต้องคอมไพล์ Texture Atlases บนดิสก์ล่วงหน้า | 1.06 | ซี/ซี++ |
cute_sync | การรวบรวมพื้นฐานการซิงโครไนซ์ที่ใช้งานได้จริง รวมถึงการล็อคการอ่าน/เขียน และเธรดพูล/ระบบงาน | 1.01 | ซี/ซี++ |
cute_tls | สร้างการเชื่อมต่อ TLS ไปยังเว็บไซต์ผ่าน TCP ซึ่งมีประโยชน์สำหรับคำขอ HTTPS | 1.01 | C/C++/Obj-C |
โดยทั่วไปส่วนหัวเหล่านี้ไม่มีการขึ้นต่อกันและมีวัตถุประสงค์เพื่อรวมไว้ในแหล่งที่มาของคุณโดยตรง (ตรวจสอบแต่ละส่วนหัวเพื่อดูเอกสารเฉพาะที่ด้านบนของไฟล์) แต่ละส่วนหัวมีสัญลักษณ์ LIBNAME_IMPLEMENTATION เพิ่มสิ่งนี้ลงในหน่วยการแปลเดียวในโค้ดของคุณและรวมส่วนหัวไว้หลังจากนั้นเพื่อกำหนดสัญลักษณ์ไลบรารี เพียงรวมส่วนหัวตามปกติเป็นอย่างอื่น
ส่วนหัวบางส่วนมีโค้ดตัวอย่างหรือการสาธิตด้วย ใน repo นี้ เพียงมองหาตัวอย่างที่เกี่ยวข้องหรือโฟลเดอร์ทดสอบ โฟลเดอร์ตัวอย่างมีประโยชน์อย่างยิ่งในการหาวิธีใช้ส่วนหัวเฉพาะ
นี่คือลิงค์แชท discord สำหรับ cute_headers อย่าลังเลที่จะเข้ามาถามคำถาม ให้คำแนะนำ หรืออภิปราย หากใครเคยใช้ cute_headers คงจะดีไม่น้อยหากได้ยินประสบการณ์ของคุณ! https://discord.gg/2DFHRmX
อีกวิธีง่ายๆ ในการดึงดูดฉันคือใช้ Twitter @randypgaul
- จุดประสงค์ของการสร้างไฟล์เดียวคืออะไร? เหตุใดจึงมีการใช้งานและฟังก์ชันคงที่ในส่วนหัว
การรวมส่วนหัวเหล่านี้ก็เหมือนกับการรวมส่วนหัวปกติ อย่างไรก็ตาม เพื่อกำหนดการใช้งาน แต่ละส่วนหัวจะมีลักษณะดังนี้:
// Do this ONCE in a .c/.cpp file
#define LIBNAME_IMPLEMENTATION
#include "libname.h"
// Everywhere else, just include like a typical header
#include "libname.h"
การดำเนินการนี้จะเปลี่ยนไฟล์เป็นคำสั่งผสมไฟล์ header + c หนึ่งครั้ง ประเด็นคือ: ก) การจัดการส่วนหัวหรือส่งให้ผู้อื่นเป็นเรื่องง่าย ไม่มีไฟล์ zip หรืออะไรก็ตามเพียงแค่คัดลอกและวางไฟล์เดียว; B) สคริปต์บิลด์เป็นเรื่องที่ยุ่งยาก และ libs ไฟล์เดียวเหล่านี้สามารถรวมเข้ากับโปรเจ็กต์ใดก็ได้โดยไม่ต้องแก้ไขสคริปต์บิลด์ตัวเดียว
- การเขียนโค้ดทั้งหมดในส่วนหัวทำลายเวลาการคอมไพล์ใช่ไหม
ความอัปยศที่การใช้ส่วนหัวใช้เวลาในการคอมไพล์ช้านั้นมาจากโค้ดอินไลน์และเทมเพลตสแปม ไม่ว่าในกรณีใด หน่วยการแปลทุกหน่วยจะต้องปั่นผ่านส่วนหัวและวางฟังก์ชันเวอร์ชันอินไลน์ หรือสำหรับเทมเพลตที่สร้างฟังก์ชันเฉพาะประเภทต่างๆ จะแย่ลงเมื่อตัวเชื่อมโยงเริ่มทำงานและจำเป็นต้องรวมหน่วยการแปลเข้าด้วยกัน โดยลบสัญลักษณ์ที่ซ้ำกัน บ่อยครั้งที่ตัวเชื่อมโยงเป็นงานแบบเธรดเดียวและสามารถสร้างปัญหาคอขวดได้จริงๆ
ส่วนหัวไฟล์เดียวที่สร้างขึ้นอย่างดีจะไม่ใช้เทมเพลตใดๆ และใช้อินไลน์เท่าที่จำเป็น นอกจากนี้ ส่วนหัวของไฟล์เดียวที่สร้างขึ้นอย่างดียังใช้ #define เพื่อวางการใช้งาน (คำจำกัดความของฟังก์ชันและสัญลักษณ์) ลงในหน่วยการแปล เดียว ด้วยวิธีนี้ส่วนหัวของไฟล์เดี่ยวที่ได้รับการออกแบบมาอย่างดีจึงเป็นสิ่งที่ดีที่สุดที่คอมไพเลอร์ C สามารถพบได้ เท่าที่เวลาในการสร้างผ่านไป โดยเฉพาะอย่างยิ่งเมื่อส่วนหัวสามารถเลือก #define คุณสมบัติที่ไม่จำเป็นได้
- ส่วนหัวเหล่านี้เป็นเพียงห้องสมุดไม่ใช่แฟชั่นใหม่ใช่ไหม
โดยส่วนตัวแล้วฉันไม่รู้จริงๆ ว่ามันเป็นแฟชั่นหรือไม่ แต่ไฟล์เหล่านี้ไม่ได้เป็นเพียงส่วนหัวเท่านั้น เป็นส่วนหัวที่มีส่วนไฟล์ .C (การนำไปใช้งาน) แนบท้าย เป็นไฟล์สองไฟล์ที่แตกต่างกันติดอยู่พร้อมกับตัวประมวลผลล่วงหน้าของ C แต่ส่วนการใช้งานจะไม่แสดงขึ้น เว้นแต่ผู้ใช้จะ #define LIB_IMPLEMENTATION ขั้นตอนการกำหนดนี้เป็นขั้นตอนการรวมขั้นตอนเดียวที่จำเป็นในการใช้ส่วนหัวเหล่านี้
น่าเสียดายที่การเขียนไลบรารีส่วนหัวที่ดีนั้นค่อนข้างยาก ดังนั้นเพียงแค่ส่วนหัว lib แบบสุ่มที่มีอยู่ทั่วไปก็อาจไม่ใช่ไลบรารีที่ดี STB และ RJM เป็น lib ส่วนหัวที่ค่อนข้างดี และเป็นข้อมูลอ้างอิงที่ดีในการทำความเข้าใจว่า lib ส่วนหัวที่ดีมีหน้าตาเป็นอย่างไร Mattias Gustavsson มีคอลเลกชันส่วนหัวที่ฉันชื่นชอบ
- ใบอนุญาตคืออะไร?
แต่ละ lib มีข้อมูลใบอนุญาตอยู่ที่ส่วนท้ายของไฟล์ มีตัวเลือกระหว่างสาธารณสมบัติและ zlib
- ฉันกำลังมองหาส่วนหัวที่ฉันเคยเห็นมาก่อน แต่มันหายไป มันไปไหน?
ส่วนหัวที่ไม่เป็นที่นิยมหรือไม่มีประโยชน์บางส่วนเลิกใช้แล้ว และใช้งานอยู่ที่นี่แล้ว
- *คุณมีห้องสมุดระดับสูงกว่านี้หรือไม่? สิ่งเหล่านี้ดูต่ำเกินไปเล็กน้อย
ส่วนหัวที่น่ารักนั้นค่อนข้างจะอยู่ในระดับต่ำจริงๆ พวกเขาแก้ไขปัญหาเฉพาะ หากคุณกำลังมองหาเฟรมเวิร์กการสร้างเกมในระดับที่สูงกว่า ฉันขอแนะนำให้ลองใช้ Cute Framework ซึ่งเป็นเฟรมเวิร์กการสร้างเกม 2D ที่สร้างขึ้นโดยส่วนใหญ่เพิ่มเติมจากส่วนหัวน่ารักระดับต่ำต่างๆ ที่เห็นที่นี่