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

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

2
ตัวเลขสุ่มบน C ++
เมื่อเร็ว ๆ นี้ฉันคุ้นเคยกับภาษาสมัยใหม่ซึ่งรวมถึงตัวสร้างแบบสุ่มที่ดีซึ่งมักจะเป็น Mersenne Twister; ตอนนี้ฉันกลับไปที่ C ++ ฉันต้องตัดสินใจว่าจะใช้อะไร ฉันค้นหาการใช้งานของ Mersenne Twister และฉันสังเกตเห็นว่ามีอยู่มากมาย: มีสิ่งหนึ่งที่ใช้กันอย่างแพร่หลายและแพร่หลายกว่าหรือฉันควรจะเลือกอย่างใดอย่างหนึ่งโดยสมมติว่าพวกเขาทั้งหมดดีพอ ๆ กัน?
12 c++  random 

4
OpenGL เชิงวัตถุ
ฉันใช้ OpenGL มาระยะหนึ่งแล้วและได้อ่านบทช่วยสอนจำนวนมาก นอกเหนือจากข้อเท็จจริงที่ว่าพวกเขาส่วนใหญ่ยังคงใช้ไพพ์ไลน์คงที่พวกเขามักจะโยนการกำหนดค่าเริ่มต้นทั้งหมดการเปลี่ยนแปลงสถานะและการวาดในไฟล์ต้นฉบับหนึ่งไฟล์ นี่เป็นสิ่งที่ดีสำหรับขอบเขตการสอนที่ จำกัด แต่ฉันมีเวลาลำบากในการหาวิธีปรับขนาดให้เป็นเกมเต็ม คุณแยกการใช้งาน OpenGL ในไฟล์ต่างๆอย่างไร? แนวคิดฉันสามารถเห็นประโยชน์ของการมีพูดคลาสการเรนเดอร์ที่แสดงสิ่งต่าง ๆ อย่างหมดจดไปยังหน้าจอ แต่สิ่งต่าง ๆ เช่น shaders และไฟทำงานอย่างไร ฉันควรจะมีชั้นเรียนแยกต่างหากสำหรับสิ่งต่าง ๆ เช่นไฟและเฉดสีหรือไม่?

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

1
การเขียนโปรแกรมระบบการปีนเขาเช่น Tomb Raider
ฉันสงสัยว่าใครรู้หรือมีความรู้เกี่ยวกับวิธีการเขียนโปรแกรมระบบการปีนเขาเช่นเดียวกับที่พบใน Tomb Raider / ไม่จดที่แผนที่ ฉันเคยคิดว่าจะมีกล่อง จำกัด ตำแหน่งในการไต่ระดับในโลกของเกมแล้วตรวจสอบการชนกัน หากผู้เล่นอยู่ในกล่องพวกเขาจะ "แขวน" จากขอบ ใครมีความคิด / การกระทำที่ดีขึ้นบ้าง? ฉันตั้งค่าการเรนเดอร์เรียบร้อยแล้วโดยใช้ directx9 และกำลังจะกังวลเกี่ยวกับภาพเคลื่อนไหวในภายหลัง

3
คำแนะนำที่จำเป็นสำหรับเครื่องยนต์ฟิสิกส์
ฉันเพิ่งเริ่มโครงการสร้างเครื่องมือฟิสิกส์ ฉันหวังว่าคุณจะสามารถให้คำแนะนำเกี่ยวกับเอกสารและ / หรือเทคโนโลยีที่ดีที่สุดให้ฉันได้ ก่อนอื่นฉันได้เห็นแล้วว่าการพัฒนาเกม - ฟิสิกส์ - เครื่องยนต์ - การพัฒนานั้นเหมาะสำหรับงานที่ทำอยู่และฉันก็สงสัยว่าคุณจะให้ความเห็นที่สองกับฉันได้ไหม นอกจากนี้ในขณะที่กำลังดู Amazon ฉันได้สะดุดกับ Game Engine Architectureและเนื่องจากฉันต้องการสร้างเอ็นจิ้นฟิสิกส์สำหรับเกมฉันคิดว่านี่อาจเป็นสิ่งที่ดีสำหรับการอ่าน ข้อสองฉันรู้ว่าการจำลองฟิสิกส์นั้นใช้การคำนวณอย่างเข้มข้นดังนั้นฉันจึงอยากใช้ CUDA หรือ OpenCL ตอนนี้ฉันกำลังใช้ OpenCL อยู่เพราะมันจะใช้ได้กับทั้ง NVIDIA และ ATI chipsets คุณแนะนำอะไร? PS: ฉันจะใช้สิ่งนี้ใน C ++ บน Linux

8
เริ่มต้นกับ 2d Game Dev (C ++): DirectX หรือ OpenGL หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ดังนั้นฉันเป็นนักเรียนที่กำลังมองหาที่จะก้าวเข้ามาใกล้ประตูของการพัฒนาเกมและฉันกำลังมองหาที่จะทำบางสิ่งบางอย่าง 2D อาจเป็น tetris / ผู้รุกรานพื้นที่ / โคลน - โต้ตอบกับเมาส์บางสิ่งบางอย่าง ฉันชี้การค้นหาของฉันไปในทิศทางของ C ++ และ 2d และในที่สุดก็นำไปสู่ ​​DirectX / OpenGL ตอนนี้เมื่อฉันเข้าใจแล้วแพ็คเกจเหล่านี้ทั้งหมดจะทำเพื่อฉันคือการวาดสิ่งบนหน้าจอ และนั่นคือทั้งหมดที่ฉันสนใจจริงๆ ณ จุดนี้ ไม่จำเป็นต้องใช้เสียง อินพุตสามารถจัดการได้ด้วย stdlib ดังนั้นสำหรับผู้เริ่มต้นที่พยายามสร้างเกมพื้นฐานใน C ++ คุณจะแนะนำ DirectX หรือ OpenGL หรือไม่ ทำไม? ฟีเจอร์หลักบางอย่างแตกต่างกันระหว่างสองคุณสมบัตินี้? ข้อใดใช้งานได้มากกว่า
12 c++  opengl  directx 

9
จะไปเกี่ยวกับองค์ประกอบ GUI ได้อย่างไร
หมายเหตุ: ฉันวางแผนที่จะสร้างระบบ GUI ของตัวเอง มันจะเป็นการดีสำหรับการเรียนรู้น้ำหนักเบามีเพียงบิตที่ฉันต้องการผูกติดกับเกมเป็นต้น ฉันกำลังคิดเกี่ยวกับวิธีการทำ องค์ประกอบที่ฉันหมายถึงคือ: ปุ่มตัวเลือก ป้อนข้อความที่นี่กล่อง ปุ่ม sliders ช่องทำเครื่องหมาย ฉันไม่ได้มองว่าจะทำอย่างไร แต่พวกเขาจะไปได้อย่างไร ความคิด ฉันจะมีแต่ละรัฐที่ต้องการสิ่งต่าง ๆ ดังนั้นเกือบทั้งหมดมีคอนเทนเนอร์ขององค์ประกอบ องค์ประกอบแต่ละชิ้นเป็น GUI แต่ละคนมีตำแหน่งกราฟิก ฯลฯ บิตที่ฉันติดมากขึ้นคือตรรกะของพวกเขา ความคิดของฉันสำหรับสิ่งนั้นเพื่อให้เป็นโมดุลและความเรียบง่ายคือการหลีกเลี่ยง MainMenuStartButton a OptionsOneBackButton เป็นต้นและสามารถใช้ Slider slider1 แทน หรือปุ่มเริ่ม; แต่แต่ละรายการจะมีฟังก์ชั่น boost :: ไปยังฟังก์ชันในเนมสเปซ GUI เช่น Gui :: StartButtonClick หรือ GUI :: ColourSliderHover ฉันแค่สงสัยว่ามันจะช้าเป็นพิเศษหรือไม่ และสำหรับเรื่องนั้นมีผู้ใดบ้าง ง่ายและเรียบง่ายในการทำ GUI สำหรับเกมหรือไม่? …
12 c++  architecture  gui 

2
อัพเดตและแสดงผลในเธรดแยกกัน
ฉันกำลังสร้างเอ็นจิ้นเกม 2D ง่าย ๆ และฉันต้องการอัปเดตและแสดงสไปรต์ในชุดข้อความต่างๆเพื่อเรียนรู้วิธีการทำงาน ฉันต้องการซิงโครไนซ์เธรดการอัพเดทและเรนเดอร์หนึ่ง ปัจจุบันฉันใช้แฟล็กอะตอมสองอัน เวิร์กโฟลว์มีลักษณะดังนี้: Thread 1 -------------------------- Thread 2 Update obj ------------------------ wait for swap Create queue ---------------------- render the queue Wait for render ------------------- notify render done Swap render queues ---------------- notify swap done ในการตั้งค่านี้ฉัน จำกัด FPS ของเธรดการแสดงผลเป็น FPS ของเธรดการปรับปรุง นอกจากนี้ฉันใช้sleep()เพื่อ จำกัด ทั้งเรนเดอร์และอัปเดต FPS ของเธรดเป็น …

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

2
การลบความล่าช้าเมื่อเริ่มต้นการกดปุ่ม
ฉันกำลังสร้างเกมง่ายๆและหนึ่งในปัญหาที่ฉันพบคือความล่าช้าที่น่ารำคาญเมื่อกดปุ่มอย่างต่อเนื่อง ดังนั้นโดยทั่วไปเมื่อฉันกด (เป็นเวลานานมาก) ตัวอย่างเช่นUpวัตถุของฉันจะเคลื่อนที่ 1 หน่วยขึ้นไปไม่ขยับ (ประมาณ 1 วินาที) จากนั้นเลื่อนอย่างต่อเนื่อง 1 หน่วยขึ้นไป (โดยไม่ล่าช้า) ขณะนี้ฉันใช้สิ่งนี้เพื่อย้ายวัตถุ (SDL2): while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_UP: //Move object 1 unit up break; //Other unrelated things omitted } break; //Omitted other cases } } สิ่งที่ฉันต้องการคือการลบความล่าช้าเพื่อให้วัตถุสามารถเคลื่อนที่Upได้อย่างรวดเร็วในทันที มีวิธีการทำเช่นนี้?
11 c++  sdl2  keyboard 

4
เราจะสร้าง Navigation Grid สำหรับโลก 3 มิติได้อย่างไร
ฉันพยายามค้นหาวิธีแก้ไขปัญหานี้ ฉันกำลังพยายามสร้างตาข่ายนำทางในรูปแบบของตารางของจุดยอดที่ล็อค x, y พิกัดพื้นในรูปสี่เหลี่ยมสำหรับพื้นที่ 3D แต่ฉันมีปัญหาในการพยายามหาวิธีที่จะไปเกี่ยวกับเรื่องนี้ ฉันลองดูที่ห้องสมุด Recast มันเป็นวิธีที่ค่อนข้างแข็งแกร่ง แต่เห็นได้ชัดว่าช้าลงด้วยแผนที่ขนาดใหญ่และพื้นที่เปิดโล่ง ฉันยังไม่รู้ว่าพวกมันสร้างจุดยอดและขอบสำหรับพื้นที่โลกด้วยแผนที่ความสูงได้อย่างไร ความคิดต่อไปของฉันคือการทำสิ่งที่ Unreal Engine 3 เคยทำ https://udn.epicgames.com/Three/NavigationMeshReference.html ซึ่งก็คือการใช้ raycasts เพื่อสร้างตาข่าย ฉันไม่สามารถหาวิธีที่จะให้ raycasts หยุด ดังนั้น ... ตัวเลือกถัดไปของฉันคือกล่อง สร้างปริมาตรย่อยที่มีขนาดเท่ากับกำลังของ 2 จัดแนวกล่องให้เข้ากับกริดและยิงปริซึมสี่เหลี่ยมลงด้านล่างเป็นรังสี ถ้ามันตกลงบนชิ้นส่วนของรูปทรงเรขาคณิตซึ่งเป็นส่วนหนึ่งของพื้นดินและสี่เหลี่ยมผืนผ้าไม่ได้ถูกตัดกันให้ปล่อยให้เป็นรูปสี่เหลี่ยมจัตุรัส และดำเนินการต่อไปจนกระทั่งถึงระดับเสียง ในการตรวจสอบว่าจำเป็นต้องทำการเชื่อมโยงขอบหรือไม่ฉันคิดว่าฉันสามารถตรวจสอบเพื่อดูว่าความชันระหว่างจุดยอดสองคู่อยู่ในความลาดชันที่เดินได้หรือไม่หากรวมให้เป็นจริง ปัญหาหลักของฉันคือ ... นี่ดูเหมือนจะไม่เหมาะสมที่สุด โดยไม่ต้องคิดเลยเมื่อกระบวนการประมาณ O (N ^ 3) สำหรับระดับหลายชั้น ซึ่งจะได้รับที่น่ารังเกียจสวย และบิตสุดท้ายสำหรับสร้างกลุ่มสี่เหลี่ยมของสี่เหลี่ยมเหล่านี้โดยอัตโนมัติ ฉันไม่แน่ใจทั้งหมดว่าจะทำอย่างไร การใช้งานที่ไม่จริงแยกพวกเขาด้วยความลาดชัน อย่างไรก็ตามฉันพยายามที่จะรักษารูปแบบกริด นั่นไม่จำเป็นเลย ปัญหายังคงอยู่ในการสร้างแผ่นสี่เหลี่ยมขนาดใหญ่เพื่อแบ่งเส้นทางการค้นหาเป็นแบบเรียงต่อแผ่น กระเบื้องต้องไม่ใหญ่เกินไปหรือเล็กเกินไป …
11 c++  tiles  navmesh 

2
วิธีคำนวณเวลาเดลต้าด้วย SDL
ฉันได้ยินมาว่าคุณสามารถคำนวณเวลาเดลต้าด้วยฟังก์ชันสองอย่างที่เรียกว่า SDL_GetPerformanceCounter และ SDL_GetPerformanceFrequency ฉันไม่แน่ใจว่าทำงานได้อย่างไร แต่ฉันได้ยินมาว่ามันคล้ายกับการใช้ SDL_GetTicks () Uint64 NOW, LAST; double deltaTime = 0; while (somebool) { LAST = SDL_GetPerformanceCounter(); NOW = SDL_GetPerformanceCounter(); LAST = NOW; deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency(); /**Rendering**/ } ฉันมีรหัสนี้ แต่เมื่อใดก็ตามที่ฉันพิมพ์ deltaTime หรือพยายามใช้มันจะเท่ากับตัวเลขสุ่มและตัวเลขบ้าเสมอ ถูกต้องหรือไม่
11 c++  algorithm  sdl 

3
เหตุใดจึงเป็นไปได้ที่จะพบการประสานพื้นผิวมากกว่า 1 หรือน้อยกว่า 0
ฉันกำลังศึกษาข้อความเกี่ยวกับtexture mappingและในpreparing to drawเซสชั่นฉันอ่าน: กำหนดพารามิเตอร์การห่อพื้นผิว สิ่งนี้จะควบคุมสิ่งที่จะเกิดขึ้นเมื่อมีการประสานพื้นผิวมากกว่า 1.0 หรือน้อยกว่า 0.0 ที่พบ: glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap); โดยที่ wrap คือ: GL_REPEAT: ระบุว่ารูปแบบนี้จะทำซ้ำ (เช่นล้อมรอบ) หากพบว่าพิกัดพื้นผิวที่แปลงสภาพน้อยกว่า 0.0 หรือมากกว่า 1.0 จะพบ GL_CLAMP: ระบุว่ารูปแบบจะ“ ติด” กับค่าที่ 0.0 หรือ 1.0 แต่ไม่มีคำอธิบายว่าอะไรเป็นสาเหตุของการเผชิญหน้ากับพิกัดพื้นผิว เช่นสมมติว่าฉันเพิ่งวาดสี่เหลี่ยมและฉันต้องการใช้รูปภาพเป็นพื้นผิวบนมันเป็นไปได้หรือไม่ที่จะพบพิกัดดังกล่าว?

2
ฉันจะเชื่อมโยง key_callback กับอินสแตนซ์คลาสของ wrapper ได้อย่างไร
ฉันพยายามรวมการโทร GLFW3 ไว้ในคลาสเดียว: class WindowManager { private: GLFWwindow* window_; GLFWmonitor* monitor_; Keyboard* keyboard_; ... } และฉันกำลังพยายามตั้งค่าคลาสคีย์บอร์ดแบบซิงเกิลที่รวบรวมแป้นกดระหว่างการดำเนินการ ใน GLFW ฉันสามารถตั้งค่าkey_callbackฟังก์ชั่นที่อยู่นอกนิยามคลาส (ฟังก์ชั่นฟรี): WindowManager::WindowManager() { ... glfwSetKeyCallback(window_, key_callback); ... } // not a class function void key_callback(GLFWwindow* window, int key, int scan code, int action, int mods) { ... } ฉันจะเชื่อมโยงการติดต่อกลับและWindowManagerอินสแตนซ์ของฉันเพื่อให้สามารถตั้งค่าkeyboard_วัตถุได้อย่างไร ฉันไม่สามารถสร้างkey_callbackฟังก์ชั่นสมาชิกของWindowManagerเพราะจะไม่ทำงานเนื่องจากฟังก์ชั่นนั้นจะเป็นสมาชิกของคลาส WindowManager …
11 c++  glfw 

4
จะกำหนดช่วงของการเคลื่อนไหวที่เป็นไปได้ในเกมวางแผนแบบอิงทางเลี้ยวหรือไม่?
ฉันกำลังสร้างเกมวางแผนกลยุทธ์แบบ 2 มิติโดยใช้ c ++ และ SFML-2.0 การเคลื่อนไหวเป็นไปตามระยะทางมากกว่าที่อิงตามกริดโดยมีชิ้นส่วนรูปสามเหลี่ยมที่แตกต่างกันหลายชิ้นตามลำดับที่กำหนดแต่ละรอบอาจหมุนในตำแหน่งหรือเคลื่อนที่ไปข้างหน้า การเคลื่อนไหวจะทำงานในลักษณะที่ผู้เล่นเลือกตำแหน่งสำหรับชิ้นส่วนที่จะย้ายไปซึ่งสร้างเส้นทางที่เป็นไปได้สำหรับชิ้นส่วนที่จะใช้ เมื่อผู้เล่นยืนยันการตัดสินใจของเขาหรือเธอชิ้นส่วนจะย้ายไปตามเส้นทางนั้นไปยังตำแหน่งที่ต้องการ เส้นทางถูก จำกัด โดยปัจจัยสองประการคือระยะทางระยะทางหนึ่งชิ้นที่สามารถไปได้โดยคำนึงถึงการเลี้ยวใด ๆ (ดังนั้นหากมีเส้นโค้งมันจะเป็นความยาวตามแนวโค้งและไม่ใช่จากจุดหนึ่งไปยังอีกจุด); และมุมบังคับเลี้ยวชิ้นส่วนสามารถหมุนที่จุดใดก็ได้ (และสูงสุด) ในขณะเคลื่อนที่ (เช่นจาก -30 ถึง 30 องศา) คำถามของฉันคือฉันควรทำอย่างไรในการกำหนดช่วงของตำแหน่งที่ผู้เล่นสามารถเลือกได้ ฉันไม่แน่ใจทั้งหมดว่าสมการและ / หรืออัลกอริทึมที่จะใช้ที่นี่ แผนเดิมของฉันซับซ้อนเกินกว่าจะถึงจุดที่มันเป็นไปไม่ได้ที่จะนำไปใช้ให้อธิบายเพียงอย่างเดียวและฉันมาถึงจุดนี้โดยสิ้นเชิงเมื่อโครงการหยุดทำงาน ฉันจะกำหนดช่วงที่หน่วยสามารถเคลื่อนที่ได้โดยพิจารณารัศมีการเลี้ยวของมันอย่างไร ตัวอย่างเช่นในภาพด้านล่าง เส้นสีแดงสีน้ำเงินและสีเขียวล้วนมีความยาวเท่ากัน วงกลมสีม่วงหมายถึงช่วงการเคลื่อนไหวที่ยูนิตสามารถเคลื่อนที่ได้ (รูปร่างอาจไม่ถูกต้องและเส้นอาจไม่ใช่ความยาวเท่ากันจริง ๆแต่คุณได้แนวคิด)

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