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

8
ฉันควรหลีกเลี่ยงการใช้การสืบทอดของวัตถุเป็นไปได้ในการพัฒนาเกมหรือไม่?
ฉันชอบฟีเจอร์ OOP เมื่อพัฒนาเกมด้วย Unity ฉันมักจะสร้างคลาสพื้นฐาน (ส่วนใหญ่เป็นนามธรรม) และใช้การสืบทอดวัตถุเพื่อแบ่งปันฟังก์ชันการทำงานเดียวกันกับวัตถุอื่น ๆ อย่างไรก็ตามฉันเพิ่งได้ยินจากคนที่ใช้การสืบทอดต้องหลีกเลี่ยงและเราควรใช้อินเทอร์เฟซแทน ดังนั้นฉันจึงถามว่าทำไมและเขาบอกว่า "การสืบทอดวัตถุมีความสำคัญแน่นอน แต่ถ้ามีวัตถุเพิ่มเติมจำนวนมากความสัมพันธ์ระหว่างชั้นเรียนจะถูกเชื่อมโยงกันอย่างลึกซึ้ง ฉันใช้คลาสเบสที่เป็นนามธรรมบางอย่างเช่นWeaponBaseและสร้างคลาสอาวุธที่เฉพาะเจาะจงเช่นShotgunนั้นAssaultRifleเป็นMachinegunอย่างนั้น มีข้อดีมากมายและรูปแบบเดียวที่ฉันชอบคือความแตกต่าง ฉันสามารถปฏิบัติต่อวัตถุที่สร้างโดยคลาสย่อยราวกับว่าพวกเขาเป็นคลาสพื้นฐานเพื่อให้ตรรกะสามารถลดลงอย่างมากและทำให้สามารถนำมาใช้ซ้ำได้มากขึ้น หากฉันต้องการเข้าถึงฟิลด์หรือวิธีการของคลาสย่อยฉันจะส่งกลับไปยังคลาสย่อย ฉันไม่ต้องการที่จะกำหนดเขตข้อมูลเดียวกันที่นิยมใช้ในการเรียนแตกต่างกันเช่นAudioSource/ Rigidbody/ Animatorและจำนวนมากของเขตข้อมูลสมาชิกฉันที่กำหนดไว้เช่นfireRate, damage, range, spreadและอื่น ๆ ในบางกรณีวิธีการบางอย่างอาจถูกเขียนทับ ดังนั้นฉันใช้วิธีเสมือนในกรณีนั้นโดยทั่วไปฉันสามารถเรียกใช้วิธีนั้นโดยใช้วิธีการจากคลาสผู้ปกครอง แต่ถ้าตรรกะควรจะแตกต่างกันในเด็กฉันได้แทนที่พวกเขาด้วยตนเอง ดังนั้นสิ่งเหล่านี้ทั้งหมดควรถูกทอดทิ้งเป็นการปฏิบัติที่ไม่ดี? ฉันควรใช้อินเทอร์เฟซแทนหรือไม่

3
ทีมป้องกันการเขียนทับทำงานในไฟล์ต้นฉบับได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว มันเป็นไปได้สำหรับฉันที่มีหลายคนที่กำลังทำงานอยู่ในขณะเดียวกันเช่นเอ็นจิ้นเกม สมมติว่านักพัฒนาคนหนึ่งกำลังทำงานAudio.cppและนักพัฒนาที่สองก็กำลังทำงานอยู่Audio.cppสิ่งนี้จัดการโดยทั่วไปในทีมขนาดใหญ่เพื่อต่อสู้กับการเขียนทับได้อย่างไร (ในคำอื่น ๆ ที่จะหยุดสองนักพัฒนาจากการเปิดไฟล์จนกว่านักพัฒนาคนหนึ่งจะเสร็จสิ้น)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

6
ฉันจะใช้ซิงเกิลตันอย่างถูกต้องในการเขียนโปรแกรมเอ็นจิน C ++ ได้อย่างไร?
ฉันรู้ว่าซิงเกิลตันไม่ดีเอ็นจิ้นเกมเก่าของฉันใช้วัตถุ 'เกม' ซิงเกิลตันที่จัดการทุกอย่างตั้งแต่การเก็บข้อมูลทั้งหมดจนถึงลูปเกมจริง ตอนนี้ฉันกำลังสร้างใหม่ ปัญหาคือการวาดอะไรบางอย่างใน SFML คุณใช้ที่เป็นหน้าต่างwindow.draw(sprite) sf::RenderWindowมี 2 ​​ตัวเลือกที่ฉันเห็นอยู่ที่นี่: สร้างวัตถุเกม Singleton ที่ทุกหน่วยงานในเกมดึง (สิ่งที่ฉันใช้มาก่อน) ทำให้นี่เป็นตัวสร้างสำหรับเอนทิตี: Entity(x, y, window, view, ...etc)(นี่เป็นเพียงเรื่องไร้สาระและน่ารำคาญ) อะไรจะเป็นวิธีที่เหมาะสมในการทำเช่นนี้ในขณะที่รักษานวกรรมิกของ Entity ให้เป็นแค่ x และ y ฉันสามารถลองและติดตามทุกสิ่งที่ฉันทำในลูปเกมหลักและเพียงแค่วาดเทพดาในลูปเกมด้วยตนเอง แต่ดูเหมือนว่ายุ่งเกินไปและฉันยังต้องการการควบคุมเต็มรูปแบบสำหรับฟังก์ชั่นการดึงทั้งหมด

6
สถาปัตยกรรม OOP สำหรับฮีโร่ที่มีคุณสมบัติมากมาย
ฉันกำลังจะเริ่มเกมสวมบท RPG แบบเบราว์เซอร์ที่มีตัวละครที่สามารถต่อสู้กับคนอื่นได้ สิ่งนี้เกี่ยวข้องกับรายการทักษะ 10 อย่างเช่นความแข็งแกร่งความคล่องแคล่วและอื่น ๆ พร้อมด้วยทักษะเพิ่มเติมสำหรับอาวุธที่แตกต่างกัน มีวิธีที่ดีกว่าในการออกแบบคลาสของตัวละครนี้แล้วเพียงแค่มีทักษะเหล่านั้นเป็นคุณลักษณะคลาส? ดูเหมือนง่าย แต่ฉันลังเลเพราะความซุ่มซ่าม class Char(self): int strength int dexterity int agility ... int weaponless int dagger ...
14 architecture  oop 

3
องค์ประกอบ OOP หนักเทียบกับระบบส่วนประกอบของเอนทิตีบริสุทธิ์? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันยอมรับว่าฉันได้ทำบาปมากเกินไปและแม้กระทั่งการละเมิดมรดก โครงการเกมแรก (ข้อความ) ที่ฉันทำเมื่อฉันเรียนหลักสูตร OOP ไปจนถึง "ล็อคประตู" และ "ปลดล็อคประตู" จาก "ประตู" และ "ห้องที่มีประตูเดียว", "ห้องที่มีสองประตู" และ ต่อจาก "ห้อง" ด้วยเกม (กราฟิก) ที่ฉันทำงานเมื่อเร็ว ๆ นี้ฉันคิดว่าฉันได้เรียนรู้บทเรียนและ จำกัด การใช้การสืบทอด อย่างไรก็ตามฉันสังเกตเห็นปัญหาเริ่มปรากฏขึ้นในไม่ช้า คลาสรูทของฉันเริ่มขยายตัวมากขึ้นเรื่อย ๆ และคลาสลีฟของฉันก็เต็มไปด้วยรหัสที่ซ้ำกัน ฉันคิดว่าฉันยังคงทำสิ่งผิดปกติและหลังจากค้นหาทางออนไลน์ฉันพบว่าฉันไม่ใช่คนเดียวที่มีปัญหานี้ มันเป็นวิธีการที่ฉันค้นพบระบบ Entity หลังจากการวิจัยอย่างละเอียด (อ่าน: googlefu) เมื่อฉันเริ่มอ่านมันฉันก็สามารถเห็นได้อย่างชัดเจนว่ามันสามารถแก้ปัญหาที่ฉันมีกับลำดับชั้นของ OOP ดั้งเดิมที่มีส่วนประกอบ สิ่งเหล่านี้อยู่ในการอ่านครั้งแรกอย่างไรก็ตาม เมื่อผมเจอมากขึ้น ... “รุนแรง” ES …

3
วิธีการจัดโปรแกรมเกมใน C ++? การใช้การรับมรดกของฉันเป็นความคิดที่ดีหรือไม่?
ฉันเป็นผู้เริ่มต้นทั้งในการพัฒนาเกมและการเขียนโปรแกรม ฉันพยายามเรียนรู้หลักการบางอย่างในการสร้างเอ็นจิ้นเกม ฉันต้องการสร้างเกมง่ายๆฉันอยู่ในจุดที่ฉันพยายามนำเอ็นจิ้นเกมมาใช้ ดังนั้นฉันคิดว่าเอ็นจิ้นเกมของฉันควรควบคุมสิ่งนี้: - Moving the objects in the scene - Checking the collisions - Adjusting movements based on collisions - Passing the polygons to the rendering engine ฉันออกแบบวัตถุของฉันเช่นนี้: class GlObject{ private: idEnum ObjId; //other identifiers public: void move_obj(); //the movements are the same for all the objects (nextpos …
11 c++  architecture  oop 

4
จะสร้างเกมที่ไม่มี OOP ได้อย่างไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังศึกษาการพัฒนาเกมและฝึกทำเกม ฉันใช้ OOP เป็นจำนวนมากในเกมของฉัน ตัวอย่างเช่นขีปนาวุธแต่ละตัวที่ถูกยิงเป็นตัวอย่างของMissileวัตถุและเพิ่มเข้าไปในรายการของMissileวัตถุ รถถังแต่ละคันในเกมนั้นเป็นTankวัตถุ เป็นต้น การออกแบบทั้งหมดของโปรแกรมขึ้นอยู่กับสิ่งนี้ ยกตัวอย่างเช่นการมีรายการของMissileวัตถุทำให้ฉันทุกเฟรมสามารถเคลื่อนย้ายขีปนาวุธดึงพวกมันได้ ฯลฯ และการมีตัวอย่างของTankวัตถุสำหรับรถถังทุกคันทำให้ฉันสามารถตรวจสอบแต่ละถังถ้ามันชนกับสิ่งอื่น ๆ มันยากสำหรับฉันที่จะจินตนาการว่าเกม (ซึ่งซับซ้อนกว่า Pac-Man) สามารถตั้งโปรแกรมในภาษาที่ไม่ใช่ OO (ไม่มีการดูหมิ่นผู้เขียนโปรแกรมที่ไม่ใช่ OO แน่นอน) ไม่เพียง แต่จะใช้เวลานานแค่ไหน แต่ส่วนใหญ่ในแง่ของวิธีการออกแบบเกมด้วยวิธีนี้ ฉันไม่สามารถจินตนาการถึงการออกแบบเกมโดยไม่ใช้การเขียนโปรแกรมเชิงวัตถุเพราะความเข้าใจของฉันทั้งหมดเกี่ยวกับวิธีการออกแบบโปรแกรมเกมนั้นใช้ OOP ฉันต้องการถาม: วันนี้มีเกมที่ไม่ได้ตั้งโปรแกรมโดยใช้ OOP ในลักษณะที่คุ้นเคยกับสิ่งที่ฉันอธิบายไว้ข้างต้นหรือไม่ มีเกมใด ๆ 'วิชาชีพ' ที่ไม่ได้ใช้ OOP เป็นปัจจัยสำคัญในกระบวนการพัฒนาหรือไม่? ถ้าเป็นเช่นนั้นคุณช่วยให้ฉันทราบได้อย่างไรตัวอย่างเช่นการตรวจจับการชนระหว่างรถถังและขีปนาวุธ N สามารถทำได้โดยไม่ต้องใช้ OOP?

2
การสืบทอดหลายอย่างไม่สามารถแก้ปัญหาทั้งหมดที่ระบบเอนทิตี้ทำได้หรือไม่
คำถามคือการอธิบายตัวเองค่อนข้างสวย: การสืบทอดหลายอย่างไม่สามารถแก้ปัญหาทั้งหมดที่ระบบนิติบุคคลแก้ได้หรือไม่ ฉันจำคำศัพท์ที่เรียกว่า "การสืบทอดหลายอย่าง" และดูเหมือนจะแก้ปัญหาท้องอืดได้มากมายที่การสืบทอดแบบดั้งเดิมกำหนดขึ้น

3
ตัวแทน AI จะเข้าถึงข้อมูลเกี่ยวกับสภาพแวดล้อมของพวกเขาได้อย่างไร
นี่อาจเป็นคำถามที่ไม่สำคัญ แต่ฉันมีปัญหาในการเข้าใจสิ่งนี้ จะขอบคุณมากสำหรับความช่วยเหลือของคุณ ในการพัฒนาเกมโดยใช้การออกแบบเชิงวัตถุฉันต้องการเข้าใจว่าตัวแทน AI เข้าถึงข้อมูลที่พวกเขาต้องการจากโลกของเกมเพื่อที่จะดำเนินการได้อย่างไร ดังที่เราทุกคนรู้ว่าในเกมตัวแทน AI มักจะต้อง 'รับรู้สภาพแวดล้อม' และปฏิบัติตามสิ่งที่เกิดขึ้นรอบตัวพวกเขา ตัวอย่างเช่นตัวแทนอาจถูกโปรแกรมให้ไล่ล่าผู้เล่นหากเขา / เธอเข้าใกล้มากพอหลีกเลี่ยงสิ่งกีดขวางในขณะเคลื่อนที่ (โดยใช้พฤติกรรมการหลบหลีกการหมุน) ปัญหาของฉันคือฉันไม่แน่ใจว่าจะทำอย่างไร ตัวแทน AI จะเข้าถึงข้อมูลที่ต้องการเกี่ยวกับโลกของเกมได้อย่างไร แนวทางหนึ่งที่เป็นไปได้คือเอเจนต์ร้องขอข้อมูลที่ต้องการจากโลกของเกมโดยตรง มีคลาสที่เรียกว่า GameWorld มันจัดการตรรกะของเกมที่สำคัญ (วนรอบเกมการตรวจจับการชน ฯลฯ ) และยังมีการอ้างอิงถึงเอนทิตีทั้งหมดในเกม ฉันสามารถทำให้คลาสนี้เป็นซิงเกิล เมื่อตัวแทนต้องการข้อมูลจากโลกของเกมมันก็จะได้รับโดยตรงจากอินสแตนซ์ GameWorld ตัวอย่างเช่นตัวแทนอาจถูกตั้งโปรแกรมให้Seekผู้เล่นเมื่อเขา / เธอปิด ในการทำสิ่งนี้ตัวแทนจะต้องได้ตำแหน่งของผู้เล่น GameWorld.instance().getPlayerPosition()ดังนั้นมันก็สามารถขอได้โดยตรง: ตัวแทนยังสามารถรับรายการเอนทิตีทั้งหมดในเกมและวิเคราะห์ตามความต้องการ (เพื่อค้นหาว่าเอนทิตีใกล้เคียงหรืออะไรอย่างอื่น): GameWorld.instance().getEntityList() นี่เป็นวิธีที่ง่ายที่สุด: ตัวแทนติดต่อชั้น GameWorld โดยตรงและรับข้อมูลที่ต้องการ อย่างไรก็ตามนี่เป็นวิธีเดียวที่ฉันรู้ มีดีกว่าไหม นักพัฒนาเกมที่มีประสบการณ์จะออกแบบสิ่งนี้ได้อย่างไร "รับรายการของเอนทิตีทั้งหมดและมองหาสิ่งที่คุณต้องการ" ไร้เดียงสาหรือไม่? มีวิธีการและกลไกใดบ้างที่อนุญาตให้ตัวแทน AI เข้าถึงข้อมูลที่ต้องการเพื่อดำเนินการ
9 architecture  ai  oop 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.