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

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

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

1
ฉันจะจัดเก็บการสะกด & รายการโดยใช้ std :: vector implementation ได้อย่างไร
ฉันกำลังติดตามพร้อมกับหนังสือจาก GameInstitute ในขณะนี้และขอให้ฉัน: อนุญาตให้ผู้เล่นซื้อและพกยารักษาและยาลูกไฟ คุณสามารถเพิ่มอาร์เรย์ไอเท็ม (หลังจากที่คุณกำหนดคลาสไอเท็ม) ไปยังคลาสเพลเยอร์สำหรับการจัดเก็บหรือใช้ std :: vector เพื่อเก็บมัน ฉันคิดว่าฉันต้องการใช้std::vectorการนำไปใช้เนื่องจากดูเหมือนว่าจะทำให้ฉันสับสนน้อยกว่าการสร้างคลาสไอเท็ม แต่ฉันไม่แน่ใจว่าจะทำอย่างไร ฉันได้ยินมาจากหลาย ๆ คนว่าเวกเตอร์เป็นวิธีที่ดีในการเก็บค่าแบบไดนามิก (เช่นรายการอาวุธ ฯลฯ ) แต่ฉันไม่เคยเห็นมันมาใช้
10 c++  text-based 

1
กระสุนฟิสิกส์ - หล่อเรย์ลงมาจากร่างแข็ง (กล้องคนแรก)
ฉันติดตั้งกล้องคนแรกด้วยกระสุนปืน - มันเป็นกล้องที่มีรูปร่างเหมือนแคปซูล ฉันใช้ Bullet เพียงไม่กี่วันและเครื่องมือฟิสิกส์ใหม่สำหรับฉัน ฉันใช้btRigidBody::setLinearVelocity()เพื่อเคลื่อนย้ายมันและชนกับโลกได้อย่างสมบูรณ์แบบ ปัญหาเดียวคือค่า Y เคลื่อนที่อย่างอิสระซึ่งฉันแก้ไขได้ชั่วคราวด้วยการตั้งค่า Y ของเวกเตอร์การแปลเป็นศูนย์ก่อนที่ร่างกายจะถูกย้าย ใช้ได้กับทุกกรณียกเว้นเมื่อตกลงมาจากที่สูง เมื่อร่างกายหลุดวัตถุที่สูงคุณยังสามารถร่อนไปรอบ ๆ ได้เนื่องจากค่า Y ของเวกเตอร์การแปลถูกตั้งค่าเป็นศูนย์จนกว่าคุณจะหยุดเคลื่อนที่และตกลงไปที่พื้น (ความเร็วจะถูกตั้งค่าเมื่อเคลื่อนที่เท่านั้น) ดังนั้นเพื่อแก้ปัญหานี้ฉันต้องการที่จะลองโยนรังสีลงจากร่างกายเพื่อกำหนดค่า Y ของโลกและตรวจสอบความแตกต่างระหว่างค่านั้นกับค่า Y ของตัวกล้องและปิดหรือลดการเคลื่อนไหวหาก ความแตกต่างมีขนาดใหญ่พอ ฉันติดอยู่กับการคัดเลือกเรย์และกำหนดค่า Y ของโลกที่มันกระทบ ฉันได้ดำเนินการติดต่อกลับนี้: struct AllRayResultCallback : public btCollisionWorld::RayResultCallback{ AllRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld) : m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld), m_closestHitFraction(1.0){} btVector3 m_rayFromWorld; btVector3 m_rayToWorld; btVector3 m_hitNormalWorld; …

3
คุณบรรจุทรัพยากรในเกมอย่างไรเมื่อคุณมีทรัพยากรมากเกินไป
ฉันเพิ่งสร้าง Space Invaders พื้นฐานใน C ++ โดยใช้ Allegro 5 framework หลังจากฉันเสร็จฉันก็รู้ว่าฉันมีสไปรต์ประมาณ 10 อันและค่า DLLs 13MB ผู้เล่นบางคนไม่มีแม้แต่ mingW DLLs ซึ่งทำให้เกมสับสนมาก ฉันจะแพ็คทรัพยากรทั้งหมดของฉันในวิธีที่ฉันสามารถเพิ่มและลบข้อมูลในเกมของฉันได้อย่างง่ายดายและเพื่อลดขนาดของทรัพยากรที่ใช้โดยทั่วไปแล้ววางไว้ในที่เดียว ฉันใช้ codeblocks
10 c++  assets 

1
ความแม่นยำจุดลอยตัว (fp: แม่นยำกับ fp: เร็ว)
ใน C หรือ C ++ ตัวเลือกคอมไพเลอร์ของความแม่นยำจุดลอยตัวสร้างความแตกต่างในเกมในโลกแห่งความเป็นจริง (เล็ก / อินดี้) หรือไม่? จากการสังเกตของฉันการตั้งค่า fp: เร็วเร็วกว่า fp: แม่นยำหลายเท่าและจากสิ่งที่ฉันเข้าใจที่นี่ ( /programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-เผชิญหน้า ) ความแตกต่างที่แม่นยำระหว่างตัวเลือกคอมไพเลอร์สองตัวจะเปลี่ยนจากตัวเลขหลักที่ 16 ของตัวเลขทศนิยมเท่านั้น มีใครพบตัวอย่างเมื่อใช้ fp: ผิดอย่างรวดเร็วสำหรับเกม 2D หรือ 3D หรือไม่? แก้ไข: เพื่อความกระจ่างแจ้งฉันไม่ได้ถามเกี่ยวกับความแม่นยำของค่าจุดลอยตัวด้วยตนเอง (เช่น float vs double และทศนิยม) ความแม่นยำเกี่ยวกับตัวเลือกคอมไพเลอร์เท่านั้น
10 c++  c  floating-point 

4
การตอบสนองรูปสี่เหลี่ยมผืนผ้าชนกัน
ฉันมีปัญหาในการรับสี่เหลี่ยมที่เคลื่อนย้ายได้เพื่อชนกับสี่เหลี่ยมมากกว่าหนึ่ง ฉันกำลังใช้SFMLและมันมีฟังก์ชั่นintersectsที่ใช้งานง่ายที่เรียกว่าซึ่งใช้เวลา 2 สี่เหลี่ยมและส่งกลับจุดตัด ฉันมีเวกเตอร์ที่เต็มไปด้วยรูปสี่เหลี่ยมผืนผ้าซึ่งฉันต้องการให้สี่เหลี่ยมที่เคลื่อนย้ายได้ของฉันชนกัน ฉันวนลูปผ่านสิ่งนี้โดยใช้รหัสต่อไปนี้ (p คือสี่เหลี่ยมที่เคลื่อนที่ได้) IsCollidingWithส่งกลับค่าบูล แต่ยังใช้ SFML intersectsเพื่อหาจุดแยก while(unsigned i = 0; i!= testRects.size(); i++){ if(p.IsCollidingWith(testRects[i]){ p.Collide(testRects[i]); } } และCollide()รหัสจริง: void gameObj::collide( gameObj collidingObject ){ printf("%f %f\n", this->colliderResult.width, this->colliderResult.height); if (this->colliderResult.width < this->colliderResult.height) { // collided on X if (this->getCollider().left < collidingObject.getCollider().left ) { this->move( -this->colliderResult.width …

3
วิธีที่เหมาะสมในการจัดการกับการทำลายของเอนทิตีเกม
ลองนึกภาพโลกของเกมที่มีการโหลดและโหลดเอนทิตีแบบไดนามิกตลอดเวลาฉันจะแสดงว่าเป็นรายการของเอนทิตี แต่สิ่งที่เกี่ยวกับการลบออก? ในขณะที่เมื่อเพิ่มฉันอาจจะผลักดันเอนทิตีใหม่ฉันอาจต้องการลบที่ใดก็ได้ในคอนเทนเนอร์ เพื่อหลีกเลี่ยงการค้นหาองค์ประกอบเพื่อค้นหาตำแหน่งสำหรับการลบฉันมีทางเลือกอะไรบ้าง ฉันคิดว่าฉันสามารถเก็บรหัสเอนทิตีว่าเป็นตำแหน่งในคอนเทนเนอร์สร้างเส้นทางสำหรับการนำออกโดยตรง แต่จะไม่สร้างความผิดปกติของการพึ่งพาซึ่งกันและกันบางประเภทหรือไม่ ฉันรู้วิธีที่ถูกต้องจะเป็นรายการเช่น List.RemoveAt (whereToRemove); แต่จะเกิดอะไรขึ้นถ้ามีเพียงนิติบุคคลเท่านั้นที่รู้ว่าควรตายเมื่อใด หรือฉันเพิ่งจะหายไปบางสิ่งบางอย่างและ list container จะรู้เมื่อวัตถุถูกทำลายและลดขนาดตัวมันเอง?

3
ระบบเอนทิตีส่วนประกอบ - อัปเดตและคำสั่งโทร
เพื่อให้ส่วนประกอบสามารถอัปเดตทุกเฟรม (และปล่อยให้ฟังก์ชันนี้ออกจากส่วนประกอบที่ไม่จำเป็นต้องใช้) ฉันมีแนวคิดที่จะสร้างคอมโพเนนต์ UpdateComponent ส่วนประกอบอื่น ๆ เช่นMovableComponent(ซึ่งมีความเร็ว) จะสืบทอดมาจากIUpdatableคลาสนามธรรม กองกำลังนี้MovableComponentจะใช้Update(gametime dt)วิธีการและอื่น ๆRegisterWithUpdater()ที่จะช่วยให้ชี้ไปUpdateComponent MovableComponentส่วนประกอบจำนวนมากสามารถทำสิ่งนี้ได้และUpdateComponentสามารถเรียกใช้Update(gametime dt)วิธีการทั้งหมดได้โดยไม่ต้องสนใจว่าเขาเป็นใครหรืออะไร คำถามของฉันคือ: สิ่งนี้ดูเหมือนจะเป็นสิ่งที่ปกติหรือเคยถูกใช้โดยทุกคนหรือไม่ ฉันไม่พบสิ่งใดในหัวข้อ ฉันจะรักษาคำสั่งซื้อส่วนประกอบเช่นฟิสิกส์แล้วเปลี่ยนตำแหน่งได้อย่างไร มันจำเป็นหรือไม่ มีวิธีอื่นใดในการประกันว่าส่วนประกอบที่ควรประมวลผลทุกเฟรมกำลังดำเนินการในความเป็นจริง แก้ไข ฉันคิดว่าฉันจะให้ความสำคัญกับรายการประเภทที่สามารถอัปเดตได้ จากนั้นองค์ประกอบทั้งหมดของประเภทนั้นสามารถอัปเดตได้มากกว่าการจัดการมันต่อเอนทิตี (ซึ่งเป็นเพียงดัชนีในระบบของฉัน) ยังคง คำถามของฉันยังคงใช้ได้สำหรับฉัน ฉันไม่รู้ว่านี่เป็นเหตุผล / ปกติหรือสิ่งที่คนอื่นมักจะทำ นอกจากนี้ผู้คนที่อินซอมเนียก็ยอดเยี่ยมมาก! / แก้ไข ตัวอย่างโค้ดก่อนหน้านี้: class IUpdatable { public: virtual void Update(float dt) = 0; protected: virtual void RegisterAsUpdatable() = 0; }; class …

1
คอนโซลหรือคอมไพเลอร์มือถือในปัจจุบันรองรับ C ++ 11 หรือไม่?
ฉันไม่ได้ขอการสนับสนุนอย่างเต็มที่ แต่มีการสนับสนุน Gen ปัจจุบันในปัจจุบัน C ++ 11 หรือไม่? ฉันรู้ว่า VS C ++ รองรับแลมบ์ดาและคำหลักอัตโนมัติและฉันเชื่อว่า gcc รองรับทั้งสองเช่นกัน เครื่องเล่นคอนโซลมือถือรุ่นปัจจุบันหรือ 3ds, sony vita รองรับหรือไม่?
10 c++ 

5
วิธีจัดการกับ netcode
ฉันสนใจที่จะประเมินวิธีต่างๆที่ netcode สามารถ "เชื่อมต่อ" เอ็นจิ้นเกม ตอนนี้ฉันกำลังออกแบบเกมที่มีผู้เล่นหลายคนและจนถึงตอนนี้ฉันได้ตัดสินใจแล้วว่าฉันต้องการ (อย่างน้อยที่สุด) ที่มีเธรดแยกต่างหากเพื่อจัดการซ็อกเก็ตเครือข่ายซึ่งแตกต่างจากส่วนอื่น ๆ ของเครื่องยนต์ที่จัดการห่วงกราฟิกและสคริปต์ ฉันมีวิธีที่เป็นไปได้วิธีหนึ่งในการสร้างเกมเครือข่ายแบบเธรดเดียวทั้งหมดซึ่งต้องตรวจสอบเครือข่ายหลังจากแสดงแต่ละเฟรมโดยใช้ซ็อกเก็ตที่ไม่ปิดกั้น อย่างไรก็ตามสิ่งนี้ไม่เหมาะสมอย่างชัดเจนเพราะเวลาที่ใช้ในการเรนเดอร์เฟรมจะถูกเพิ่มเข้ากับความล่าช้าของเครือข่าย: ข้อความที่มาถึงผ่านเครือข่ายจะต้องรอจนกว่าการเรนเดอร์เฟรมปัจจุบัน แต่อย่างน้อยวิธีการเล่นเกมนี้จะยังคงราบรื่นไม่มากก็น้อย การมีเธรดแยกต่างหากสำหรับการเชื่อมต่อเครือข่ายช่วยให้เกมสามารถตอบสนองต่อเครือข่ายได้อย่างสมบูรณ์ตัวอย่างเช่นมันสามารถส่งแพ็กเก็ต ACK กลับทันทีเมื่อได้รับการอัพเดตสถานะจากเซิร์ฟเวอร์ แต่ฉันสับสนเล็กน้อยเกี่ยวกับวิธีที่ดีที่สุดในการสื่อสารระหว่างรหัสเกมและรหัสเครือข่าย เธรดเครือข่ายจะผลักแพ็คเก็ตที่ได้รับไปยังคิวและเธรดเกมจะอ่านจากคิวในเวลาที่เหมาะสมระหว่างการวนรอบของมันดังนั้นเราจึงไม่ได้กำจัดความล่าช้าแบบ up-to-one-frame นี้ นอกจากนี้ดูเหมือนว่าฉันต้องการให้เธรดที่จัดการการส่งแพ็กเก็ตแยกจากที่กำลังตรวจสอบแพ็กเก็ตที่ลงมาในท่อเพราะมันจะไม่สามารถส่งออกได้ในขณะที่มันอยู่ตรงกลาง ตรวจสอบว่ามีข้อความเข้ามาหรือไม่ ฉันกำลังคิดเกี่ยวกับการทำงานของselectหรือคล้ายกัน ฉันเดาคำถามของฉันคืออะไรวิธีที่ดีที่สุดในการออกแบบเกมสำหรับการตอบสนองเครือข่ายที่ดีที่สุด? เห็นได้ชัดว่าลูกค้าควรส่งข้อมูลผู้ใช้โดยเร็วที่สุดเท่าที่จะทำได้ไปยังเซิร์ฟเวอร์ดังนั้นฉันจึงอาจมีรหัสส่งสุทธิมาทันทีหลังจากวนรอบการประมวลผลเหตุการณ์ทั้งภายในวงเกม สิ่งนี้สมเหตุสมผลหรือไม่?

3
เคล็ดลับในการสร้าง AI สำหรับเกมแข่งรถ 2 มิติ
ฉันมีโครงการโรงเรียนเพื่อสร้าง AI สำหรับเกมแข่งรถ 2 มิติซึ่งมันจะแข่งขันกับ AIs อื่น ๆ ( ไม่มีการชน ) เราได้รับภาพบิตแมปสีดำและสีขาวของลู่แข่งเราได้รับอนุญาตให้เลือกสถิติพื้นฐานสำหรับรถของเรา (การจัดการการเร่งความเร็วความเร็วสูงสุดและเบรก) หลังจากที่เราได้รับแผนที่ AI จะเชื่อมต่อกับเซิร์ฟเวอร์ของเกมและมอบให้เป็นตัวเลขที่สองสำหรับการเร่งความเร็วและการควบคุมปัจจุบัน ภาษาที่ฉันเลือกคือ C ++ คำถามคือ: กลยุทธ์หรืออัลกอริทึมที่ดีที่สุดคืออะไร (ตั้งแต่ฉันต้องการลองและชนะ) ขณะนี้ฉันมีความคิดบางอย่างที่พบในอินเทอร์เน็ตและหนึ่งหรือสองของฉันเอง แต่ฉันต้องการก่อนที่ฉันจะเริ่มเขียนโค้ดว่ามุมมองของฉันเป็นหนึ่งในสิ่งที่ดีที่สุด มีหนังสือดีเล่มใดบ้างในเรื่องนี้? ฉันควรอ้างอิงถึงไซต์ใด
10 2d  c++  ai  racing 

2
มันคุ้มค่าไหมถ้าใช้ Bullet สำหรับฟิสิกส์ 2D แทนที่จะเป็น Box2D เพื่อการเรียนรู้ Bullet?
ไม่มีคำถามอีกมาก ฉันไม่ได้กังวลเกี่ยวกับค่าใช้จ่ายเนื่องจากฉันแน่ใจว่าพวกเขาทั้งคู่ดีสำหรับวัตถุประสงค์ของฉัน โดยพื้นฐานแล้วฉันคุ้นเคยกับแนวคิด Box2D เนื่องจาก Farseer Physics Engine แต่ฉันต้องการใช้ Bullet เมื่อฉันข้ามไปยังเนื้อหา 3 มิติ Bullet อาจมีค่าการศึกษาสำหรับฉันแม้แต่ในขอบเขต 2D หรือไม่? คำถามรุ่นทั่วไปคือฉันควรใช้เครื่องมือฟิสิกส์ 3 มิติสำหรับเกม 2 มิติถ้าฉันวางแผนที่จะใช้เครื่องมือฟิสิกส์ 3 มิติในอนาคต หรือเป็นการเสียเวลาซึ่งจะไม่ให้ค่าการศึกษา?

2
ควรใช้ C ++ และพิมพ์เขียวเมื่อใด
ฉันพยายามเรียนรู้วิธีใช้ Unreal Engine ฉันมีความรู้พื้นฐานของ C ++ เมื่อเร็ว ๆ นี้ฉันเริ่มสร้างเกมสยองขวัญเอาชีวิตรอดเป็นโครงการที่ฉันเพิ่งทำเพื่อประสบการณ์การเรียนรู้ ถึงแม้ว่าฉันจะใช้งานทุกคุณสมบัติผ่านระบบพิมพ์เขียว ดังนั้นคำถามของฉันคืออะไรฉันจะใช้รหัสในการปรับปรุง / สร้างเกมใน Unreal Engine เมื่อใดและเมื่อใด
10 c++  unreal-4 

3
คำแนะนำเกี่ยวกับการเชื่อมโยงระหว่างระบบคอมโพเนนต์ของเอ็นติตี้ใน C ++
หลังจากอ่านเอกสารเกี่ยวกับระบบส่วนประกอบของเอนทิตีฉันตัดสินใจใช้ของฉัน จนถึงตอนนี้ฉันมีระดับโลกซึ่งมีเอนทิตีและผู้จัดการระบบ (ระบบ), คลาสเอนทิตีซึ่งมีส่วนประกอบเป็น std :: map และระบบไม่กี่ระบบ ฉันถือเอนทิตีเป็น std :: vector ในโลก ไม่มีปัญหาจนถึงตอนนี้ สิ่งที่ทำให้ฉันสับสนคือการวนซ้ำของเอนทิตีฉันไม่สามารถมีความคิดที่ชัดเจนดังนั้นฉันยังไม่สามารถใช้ส่วนนั้นได้ ทุกระบบควรมีรายการขององค์กรที่พวกเขาสนใจหรือไม่? หรือฉันควรทำซ้ำผ่านเอนทิตีในระดับโลกและสร้างการวนซ้ำแบบวนซ้ำเพื่อทำซ้ำผ่านระบบและตรวจสอบว่าเอนทิตีมีส่วนประกอบที่ระบบสนใจหรือไม่ ฉันหมายถึง : for (entity x : listofentities) { for (system y : listofsystems) { if ((x.componentBitmask & y.bitmask) == y.bitmask) y.update(x, deltatime) } } แต่ฉันคิดว่าระบบ bitmask จะปิดกั้นความยืดหยุ่นในกรณีที่ฝังภาษาสคริปต์ หรือมีรายการท้องถิ่นสำหรับแต่ละระบบจะเพิ่มการใช้หน่วยความจำสำหรับคลาส ฉันสับสนมาก

2
วิธีการใช้ปฏิสัมพันธ์ระหว่างชิ้นส่วนเครื่องยนต์?
ฉันต้องการถามคำถามเกี่ยวกับวิธีการแลกเปลี่ยนข้อมูลระหว่างชิ้นส่วนกลไกเกม เครื่องยนต์ถูกแยกออกเป็นสี่ส่วน: ลอจิก, ข้อมูล, UI, กราฟิก ในตอนแรกฉันทำการแลกเปลี่ยนนี้ผ่านธง ตัวอย่างเช่นถ้าวัตถุใหม่จะถูกเพิ่มในข้อมูลธงในชั้นเรียนของวัตถุจะถูกกำหนดให้เป็นisNew trueและหลังจากนั้นส่วนกราฟิกของเครื่องยนต์จะตรวจสอบธงนี้และจะเพิ่มวัตถุลงในโลกของเกม แม้ว่าด้วยวิธีนี้ฉันต้องเขียนโค้ดมากเพื่อประมวลผลค่าสถานะของวัตถุแต่ละชนิด ฉันคิดว่าจะใช้ระบบเหตุการณ์บางอย่าง แต่ฉันไม่มีประสบการณ์เพียงพอที่จะรู้ว่านี่จะเป็นทางออกที่ถูกต้องหรือไม่ ระบบเหตุการณ์เป็นแนวทางที่เหมาะสมหรือฉันควรใช้อย่างอื่นหรือไม่ ฉันใช้ Ogre เป็นเอ็นจิ้นกราฟิคถ้ามันสำคัญ
10 c++  architecture 

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