คำถามติดแท็ก c++

C ++ เป็นภาษาเขียนโปรแกรมแบบสแตติกแบบหลายกระบวนทัศน์รวบรวมภาษาโปรแกรมอเนกประสงค์

6
วัตถุในเกม 2D ควรแสดงตัวหรือไม่?
ฉันกำลังสร้างเกมแบบสตรีทไฟท์เตอร์ 2 มิติที่ไม่ได้มีการปูกระเบื้อง โดยทั่วไปแล้วคนมักแนะนำให้เอนทิตีถูกกำหนดให้กับตัวเรนเดอร์ที่แสดงพวกมันไม่ใช่ตัวเรนเดอร์ แต่ดูเหมือนว่าอินเวอร์สจะดีกว่า ทำไมคนหนึ่งถึงดีกว่าอีกคนหนึ่ง? ขอบคุณ
16 c++  rendering 

2
คำแนะนำเกี่ยวกับสถาปัตยกรรมเกม / รูปแบบการออกแบบ
ฉันได้ทำงานกับ RPG 2d มานานแล้วและฉันก็ตระหนักว่าฉันได้ตัดสินใจออกแบบที่ไม่ดี โดยเฉพาะอย่างยิ่งมีบางสิ่งที่ทำให้ฉันมีปัญหาดังนั้นฉันจึงสงสัยว่าคนอื่น ๆ ที่ใช้ในการเอาชนะพวกเขาหรือใช้ สำหรับพื้นหลังเล็กน้อยฉันเริ่มทำงานในเวลาว่างของฉันเมื่อฤดูร้อนปีที่แล้ว ตอนแรกฉันสร้างเกมใน C # แต่ประมาณ 3 เดือนที่แล้วตัดสินใจเปลี่ยนเป็น C ++ ฉันต้องการได้รับการจัดการที่ดีใน C ++ เพราะมันไม่นานมานี้เพราะฉันใช้มันอย่างหนักและคิดว่าโครงการที่น่าสนใจเช่นนี้จะเป็นแรงจูงใจที่ดี ฉันใช้ห้องสมุดเพิ่มอย่างกว้างขวางและใช้ SFML สำหรับกราฟิกและ FMOD สำหรับเสียง ฉันมีโค้ดที่ค่อนข้างเป็นธรรม แต่กำลังพิจารณาที่จะทิ้งมันและเริ่มต้นใหม่ นี่คือประเด็นสำคัญที่ฉันกังวลและต้องการรับความคิดเห็นเกี่ยวกับวิธีการที่เหมาะสมที่ผู้อื่นแก้ไขได้หรือจะแก้ปัญหา 1. การพึ่งพาตามวัฏจักร เมื่อฉันทำเกมใน C # ฉันไม่ต้องกังวลเกี่ยวกับสิ่งนี้เพราะมันไม่มีปัญหา การย้ายไปที่ C ++ นี้ได้กลายเป็นปัญหาใหญ่พอสมควรและทำให้ฉันคิดว่าฉันอาจออกแบบสิ่งต่าง ๆ ไม่ถูกต้อง ฉันไม่สามารถจินตนาการได้ว่าจะแยกชั้นเรียนของฉันอย่างไรและยังให้พวกเขาทำสิ่งที่ฉันต้องการ นี่คือตัวอย่างบางส่วนของห่วงโซ่การพึ่งพา: ฉันมีคลาสเอฟเฟ็กต์สถานะ ชั้นเรียนมีวิธีการมากมาย (ใช้ / นำไปใช้, ขีด, ฯลฯ ) …
16 c++  architecture  rpg 

2
การออกแบบเกมที่ใช้องค์ประกอบ
ฉันกำลังเขียนปืน (เช่น 1942, กราฟิก 2D แบบคลาสสิก) และฉันต้องการใช้การอนุมัติตามส่วนประกอบ จนถึงตอนนี้ฉันคิดถึงการออกแบบต่อไปนี้: องค์ประกอบแต่ละเกม (เรือเหาะขีปนาวุธเพิ่มพลังศัตรู) เป็นเอนทิตี แต่ละหน่วยงานคือชุดของส่วนประกอบที่สามารถเพิ่มหรือลบได้ในเวลาทำงาน ตัวอย่างเช่นตำแหน่ง, Sprite, Health, IA, Damage, BoundingBox เป็นต้น แนวคิดคือ Airship, Projectile, Enemy, Powerup ไม่ใช่คลาสเกม เอนทิตีถูกกำหนดโดยส่วนประกอบที่เป็นเจ้าของเท่านั้น (และสามารถเปลี่ยนแปลงได้ในช่วงเวลา) ดังนั้นผู้เล่นเรือเหาะเริ่มต้นด้วย Sprite, ตำแหน่ง, สุขภาพและส่วนประกอบอินพุต Powerup มี Sprite, Position, BoundingBox และอื่น ๆ หลักวนรอบจัดการเกม "ฟิสิกส์" นั่นคือส่วนประกอบต่าง ๆ มีปฏิสัมพันธ์กันอย่างไร: foreach(entity (let it be entity1) with a …

3
เครื่องสถานะ จำกัด ใน C ++
ดังนั้นฉันได้อ่านมากเกี่ยวกับการใช้ FSM เพื่อจัดการสถานะเกมสิ่งต่าง ๆ เช่น FSM คืออะไรและใช้สแต็กหรือชุดของรัฐเพื่อสร้างสิ่งหนึ่ง ฉันผ่านทุกสิ่งไปแล้ว แต่ฉันติดอยู่กับการเขียนการใช้งาน FSM ตามความเป็นจริงที่ออกแบบมาอย่างดีเพื่อจุดประสงค์นั้น โดยเฉพาะอย่างยิ่งหนึ่งจะแก้ไขปัญหาของการเปลี่ยนระหว่างรัฐได้อย่างหมดจด (อย่างไร) รัฐควรจะสามารถใช้ข้อมูลจากรัฐอื่น ๆ และอื่น ๆ ได้อย่างไร ใครบ้างมีเคล็ดลับในการออกแบบและเขียนการใช้งานใน C ++ หรือดีกว่าตัวอย่างรหัส?

2
เทคนิคการเพิ่มประสิทธิภาพการเรนเดอร์ทั่วไปสำหรับเรขาคณิตผ่านในเรนเดอร์แรเงาที่เลื่อนออกไปเป็นอย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันพัฒนาเครื่องมือเกมโดยใช้ OpenGL 3 และ C ++ (และ glfw สำหรับการจัดการหน้าต่าง) ฉันได้ก้าวหน้าไปแล้วทำสิ่งต่าง ๆ ให้เสร็จยกเว้นเสียงและการปรับให้เหมาะสมที่สุด เอ็นจิ้นใช้การแรเงาที่เลื่อนออกไปดังนั้นเนื่องจากการแรเงาที่เลื่อนออกไปนั้นเป็นกระบวนการที่น่าเบื่อสำหรับ GPU โดยเฉลี่ยฉันต้องการเพิ่มประสิทธิภาพของกระบวนการเรนเดอร์ให้มากที่สุด ระบบปัจจุบันประกอบด้วยฉากที่มี Renderer std::vectorsและโลกปัจจุบันและโลกถือหน่วยงานและหน่วยงานที่แยกออกจากแสง ดังนั้นโดยทั่วไปทุกครั้งที่ซีนถูกเรียกโดย->render()และมันเรียกว่า Renderer ผ่านโลกเป็นพารามิเตอร์และรับเอนทิตีซ้ำจากทั่วโลกดึงพวกมันไปยัง FBO จากนั้นผ่านหน่วยแสงสำหรับการผ่านครั้งที่สอง และฉันคิดว่ามันไม่เพียงพอ อัลกอริทึมปัจจุบันของฉันวนซ้ำทุกอย่างแม้ว่าเอนทิตีไม่ได้อยู่ในพื้นที่หน้าจอ ฉันกำลังคิดหาวิธีเพิ่มประสิทธิภาพอัลกอริธึมการแสดงผลปัจจุบันดังนั้นจึงเรียกเฉพาะฟังก์ชัน API เฉพาะสำหรับวัตถุที่มองเห็นดังนั้นเทคนิคทั่วไปในการปรับการแสดงผลให้เหมาะสมคืออะไร

1
* การเรียก * = (หรือ * = การโทร *) ช้ากว่าการเขียนฟังก์ชันแยก (สำหรับไลบรารีคณิตศาสตร์) หรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันมีคลาสเวกเตอร์บางส่วนที่ฟังก์ชันทางคณิตศาสตร์มีลักษณะดังนี้: template<typename T, typename U> auto operator*(const Vector3<T>& lhs, const Vector3<U>& rhs) { return Vector3<decltype(lhs.x*rhs.x)>( lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z ); } template<typename T, typename U> Vector3<T>& operator*=(Vector3<T>& lhs, const Vector3<U>& rhs) { lhs.x *= …

1
วิธีการได้รับประโยชน์จาก cpu แคชในเอ็นจิ้นเกมเอนทิตีคอมโพเนนต์ระบบ?
ฉันมักจะอ่านในเอกสารประกอบเครื่องมือเกมของ ECS ซึ่งเป็นสถาปัตยกรรมที่ดีสำหรับการใช้แคช cpu อย่างชาญฉลาด แต่ฉันไม่สามารถคิดได้ว่าเราจะได้ประโยชน์จาก cpu cache ได้อย่างไร หากส่วนประกอบถูกบันทึกในอาร์เรย์ (หรือพูล) ในหน่วยความจำต่อเนื่องเป็นวิธีที่ดีในการใช้ cpu cache แต่ถ้าเราอ่านส่วนประกอบตามลำดับ เมื่อเราใช้ระบบพวกเขาต้องการรายการเอนทิตีซึ่งเป็นรายการเอนทิตีที่มีส่วนประกอบที่มีประเภทเฉพาะ แต่รายการเหล่านี้ให้ส่วนประกอบในวิธีการสุ่มไม่ใช่ตามลำดับ ดังนั้นวิธีการออกแบบ ECS เพื่อเพิ่มการเข้าชมแคชสูงสุด? แก้ไข: ตัวอย่างเช่นระบบ Physic ต้องการรายการเอนทิตีสำหรับเอนทิตีที่มีส่วนประกอบ RigidBody และ Transform (มีพูลสำหรับ RigidBody และพูลสำหรับคอมโพเนนต์การแปลง) ดังนั้นลูปสำหรับการอัพเดตเอนทิตีจะเป็นดังนี้: for (Entity eid in entitiesList) { // Get rigid body component RigidBody *rigidBody = entityManager.getComponentFromEntity<RigidBody>(eid); // Get transform component …

1
เครื่องกำเนิดสนามดาวขั้นตอน
มีใครทราบรหัสใด ๆ ในการสร้างฟิลด์ดาวแบบเป็นขั้นตอนหรือไม่ โดยหลักการแล้วฉันอยากให้มันเป็นแบบฟิสิกส์เพื่อที่ฉันจะได้มีดาวเคราะห์และดวงจันทร์ที่เหมือนจริง ส่วนที่ดีที่สุดคือ C ++, โอเพ่นซอร์สและสามารถใช้งานได้กับ Ogre3d ฉันไม่กลัวการเขียนโค้ดบางอย่างจากรายงานของมหาวิทยาลัยหากไม่มีอะไรให้ใช้

4
การบันทึกไลบรารีสำหรับเกม (c ++) [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน12 เดือนที่ผ่านมา ฉันรู้ไลบรารีการบันทึกจำนวนมาก แต่ไม่ได้ทดสอบมากนัก (GoogleLog, Pantheios, บูสเตอร์ที่กำลังจะมาถึง :: log library ... ) ในเกมโดยเฉพาะในเกมมัลติเพลเยอร์ระยะไกลและเกมมัลติเธรดการบันทึกมีความสำคัญต่อการดีบั๊กแม้ว่าคุณจะลบบันทึกทั้งหมดในตอนท้าย สมมติว่าฉันกำลังสร้างเกมบนพีซี (ไม่ใช่คอนโซล) ที่ต้องการบันทึก (หลายคนและหลายเธรดและ / หรือมัลติโพรเซส) และฉันมีเหตุผลที่ดีในการค้นหาไลบรารีสำหรับการบันทึก (เช่นฉันไม่มีเวลาหรือ ไม่มั่นใจในความสามารถในการเขียนอย่างถูกต้องสำหรับกรณีของฉัน) สมมติว่าฉันต้องการ: ประสิทธิภาพ ใช้งานง่าย (อนุญาตให้สตรีมมิ่งหรือจัดรูปแบบหรืออะไรทำนองนั้น) ความน่าเชื่อถือ (ไม่รั่วไหลหรือผิดพลาด!) ข้ามแพลตฟอร์ม (อย่างน้อย Windows, MacOSX, Linux / Ubuntu) ห้องสมุดบันทึกข้อมูลใดที่คุณอยากจะแนะนำ? ขณะนี้ฉันคิดว่า boost :: log เป็นไฟล์ที่ยืดหยุ่นที่สุด …

1
ฉันจะบอกได้ว่าฉันใช้หน่วยความจำการ์ดหน่วยความจำเท่าใด
ฉันต้องการกำหนดโปรแกรมโดยทางรันไทม์ว่าโปรแกรมของฉันใช้หน่วยความจำการ์ดหน่วยความจำเท่าใด โดยเฉพาะฉันสงสัยเกี่ยวกับวิธีการทำบนเครื่อง Windows ที่ใช้ OpenGL แต่ฉันสนใจวิธีที่จะทำได้บนแพลตฟอร์มอื่นเช่นกัน ฉันรู้ว่ามียูทิลิตี้ออกมีที่จะแสดงให้ฉันใช้หน่วยความจำในขณะที่โปรแกรมของฉันทำงาน แต่ฉันต้องการที่จะสามารถค้นหาข้อมูลจากรหัสของฉัน
15 opengl  c++  windows  c 

5
ฉันจะกำจัดปัญหา“ DLL ที่หายไป” ได้อย่างไร
ฉันสร้างเกมด้วย Visual C ++ 2015 และ OpenGL เมื่อฉันวิ่งมันบนเครื่องของฉันก็ไม่มีปัญหา แต่เมื่อฉันวิ่งมันบนเครื่องอื่น ๆ มันแสดงให้เห็นว่า DLLs บางอย่างหายไป ฉันต้องการทราบวิธีการตรวจสอบให้แน่ใจว่าจะไม่เกิดขึ้นในครั้งต่อไปและฉันควรพิจารณาเรื่องใดบ้างเพื่อหลีกเลี่ยงปัญหาไฟล์หายไป

4
จะโหลดดาวเคราะห์ทรงกลมและภูมิภาคได้อย่างไร
ฉันกำลังออกแบบเกมที่ประกอบด้วยการสำรวจดาวเคราะห์บางส่วน ฉันต้องการใช้การสร้างแบบสุ่มหลอกสำหรับพวกเขาสร้างใหม่จากเมล็ดที่กำหนดไว้เมื่อฉันต้องโหลดพวกเขาแทนที่จะเก็บทุกรายละเอียดซึ่งจะหนักเกินไป ดังนั้นฉันจะเก็บไฟล์แบบสุ่มและการดัดแปลงที่ทำโดยผู้เล่นในไฟล์ถ้ามี ผู้เล่นจะต้องสามารถมองเห็นดาวเคราะห์จากวงโคจร (ด้วยรายละเอียดที่ต่ำมากจากนั้นก็ลงไปที่พื้นเพิ่มระดับของรายละเอียดของภูมิภาคที่เขา / เธอลงจอดอย่างช้า ๆ และขนลงด้านอื่น ๆ ของดาวเคราะห์ซึ่งอยู่นอกมุมมองของผู้เล่น ถ้าฉันต้องทำบนพื้นราบฉันจะทำอย่างง่ายดายด้วยระบบอันทรงสี่เหลี่ยม แต่ปัญหาตรงนี้ก็คือดาวเคราะห์เกือบจะเป็นทรงกลม ดังนั้นวิธีที่ดีที่สุดในการโหลดรายละเอียดภาคพื้นดิน (วัตถุการผ่อนปรนและวัตถุที่มีการลงดิน) รอบจุดที่แม่นยำคืออะไร ฉันว่าแล้วในสองวิธี แต่ทั้งสองมีจุดอ่อน: 1. การตัดทรงกลมเป็นชิ้นสี่เหลี่ยม เมื่อผู้เล่นอยู่ใกล้พื้นดินมากพอฉันต้องปรับปรุงรายละเอียดของสี่เหลี่ยมที่ใกล้เคียงที่สุดจากตำแหน่งของเขา / เธอ หากยังไม่พอฉันยังสามารถตัดสี่เหลี่ยมแต่ละช่องเป็นสี่เหลี่ยมย่อยเพื่อโหลดเมื่อผู้เล่นอยู่บนหรือใกล้พื้นดินจริงๆ แต่อย่างที่คุณเห็นในภาพมีปัญหาถ้าผู้เล่นพยายามที่จะลงจอดบนเสา: สแควร์สกลายเป็นรูปสี่เหลี่ยมผืนผ้าที่บางมากหรือแม้กระทั่งรูปสามเหลี่ยมสำหรับบรรทัดสุดท้ายและนอกจากนี้ความจริงที่ว่าพวกเขาจะโหลดจำนวนมาก รุ่นจะปรากฏบิดเบี้ยว 2. เริ่มต้นจาก icosahedron ที่นี่ฉันสามารถเพิ่มรูปสามเหลี่ยม tessellation รอบตำแหน่งของผู้เล่นเมื่อเขา / เธอเข้าใกล้ แต่ฉันไม่รู้วิธีหาสามเหลี่ยมใกล้ตำแหน่งของผู้เล่น ฉันได้ยินว่าพิกัดคาร์ทีเซียนอาจเป็นประโยชน์อย่างเต็มที่ในกรณีนั้น แต่ฉันไม่รู้วิธีใช้งาน ฉันใช้ C ++ / OpenGL สำหรับมันดังนั้นสิ่งสำคัญในการสร้างและโหลดที่นี่คือจุดยอดที่แสดงถึงการลดพื้นผิวและสี / พื้นผิว

3
เขียน Game Engine ตั้งแต่เริ่มต้นด้วย OpenGL [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันต้องการเริ่มเขียนโปรแกรมเกมของฉันตั้งแต่เริ่มต้นเพื่อการเรียนรู้สิ่งที่จำเป็นต้องมีและวิธีการทำสิ่งที่ภาษาการเขียนโปรแกรมและสิ่งที่คุณแนะนำฉัน? นอกจากนี้หากคุณมีบทความและหนังสือที่ดีว่ามันจะยอดเยี่ยม ขอบคุณล่วงหน้า! ภาษาและเครื่องมือในการเขียนโปรแกรมของฉันคือ: C / C ++ ดีไหมที่จะใช้ C เท่านั้น? หลาม OpenGL Git GDB สิ่งที่ฉันต้องการเรียนรู้จากมัน: Core Game Engine การแสดงผล / กราฟิก การเล่นเกม / กฎ อินพุต (แป้นพิมพ์ / เมาส์ / ตัวควบคุม ฯลฯ ) ในการแสดงผล / กราฟิก: 3D การแรเงา โคมไฟ …
15 c++  c 

1
อัลกอริทึม Simple Stupid Funnel ทำงานอย่างไร
การทำงานกับอัลกอริทึมช่องทางที่แสดงใน Digesting Duckฉันไม่แน่ใจว่าการตรวจจับของช่องทางทำงานอย่างไร บางคนสามารถอธิบายวิธีการให้ฉันอย่างชัดเจนหรือแนะนำวิธีการอื่นในการตรวจหาช่องทางและหากด้านข้างของช่องทางซ้อนทับกัน

1
การนำ skybox ไปใช้กับ GLSL เวอร์ชัน 330
ฉันกำลังพยายามให้สกายบ็อกซ์ทำงานกับ OpenGL 3.3 และ GLSL เวอร์ชัน 330 ฉันไม่สามารถค้นหาการสอน OGL skybox ที่ทันสมัยได้อย่างสมบูรณ์ที่ใดก็ได้บนเว็บดังนั้นฉันจึงทำให้รุ่นเก่า (ใช้glVertexAttribPointer()แทนgl_Vertexจุดยอดเป็นต้น) ส่วนใหญ่ใช้งานได้ แต่สำหรับ 2 รายละเอียดหลัก กล่องสกายนั้นเหมือนรูปสามเหลี่ยมบนท้องฟ้าและพื้นผิวนั้นบิดงอไม่ดีและยืดออก (มันควรจะเป็นทุ่งหญ้าดาวฉันได้รับขณะที่เส้นบนพื้นหลังสีดำ) ฉันแน่ใจ 99% ว่านี่เป็นเพราะฉันไม่ได้ทำการสอนแบบเก่าอย่างสมบูรณ์ นี่คือคลาส skybox ของฉัน: static ShaderProgram* cubeMapShader = nullptr; static const GLfloat vertices[] = { 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, …
14 c++  opengl  glsl  cubemap  skybox 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.