การพัฒนาเกม

คำถาม & คำตอบสำหรับนักพัฒนาเกมมืออาชีพและเป็นอิสระ

10
การแข่งขันกับ C ++ สำหรับการเขียนโปรแกรมเกม
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Game Exchange Stack Exchange อพยพ 8 ปีที่ผ่านมา ฉันสงสัยว่าเพราะเหตุใด C ++ จึงเป็นที่นิยมสำหรับการพัฒนาเกมไม่ใช่ภาษาอื่นแทน ฉันรู้ว่าคุณสามารถสร้างรหัสได้อย่างรวดเร็วด้วย แต่สิ่งที่ทำให้มันเป็นที่นิยม? เป็นเพราะความรวดเร็วหรือไม่ มันเป็นคุณสมบัติอื่น ๆ ในภาษาเช่นกระบวนทัศน์ OO หรือพกพา? มันเป็นเพราะห้องสมุดทั้งหมดที่ถูกสร้างขึ้นเมื่อเวลาผ่านไป? หรือการรวมกันของเหตุผลเหล่านี้ (และอื่น ๆ ) ทั้งหมด? หากใครบางคนสามารถกรอกฉันในนี้ฉันจะมีความสุขมาก :-)
21 c++ 

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

4
วิธีการใช้พฤติกรรมในสถาปัตยกรรมเกมตามองค์ประกอบ?
ฉันเริ่มใช้ผู้เล่นและศัตรู AI ในเกม แต่ฉันสับสนเกี่ยวกับวิธีการนำสิ่งนี้ไปใช้ในสถาปัตยกรรมเกมตามส่วนประกอบได้ดีที่สุด ว่าฉันมีตัวละครของผู้เล่นดังต่อไปนี้ที่สามารถนิ่งวิ่งและแกว่งดาบ ผู้เล่นสามารถผ่านไปยังสถานะดาบสวิงจากทั้งที่อยู่กับที่และนิ่ง แต่จากนั้นจะต้องสวิงให้เสร็จสิ้นก่อนที่ผู้เล่นจะสามารถกลับมายืนหรือวิ่งต่อได้ ในระหว่างการแกว่งผู้เล่นไม่สามารถเดินไปรอบ ๆ อย่างที่ฉันเห็นฉันมีสองวิธีดำเนินการ: สร้างส่วนประกอบ AI เดียวที่มีลอจิกของผู้เล่นทั้งหมด (แยกออกจากองค์ประกอบจริงหรือฝังเป็น PlayerAIComponent) ฉันสามารถบังคับใช้ข้อ จำกัด ของรัฐได้อย่างง่ายดายโดยไม่ต้องสร้างการเชื่อมต่อระหว่างส่วนประกอบแต่ละอย่างที่ประกอบกันเป็นเอนทิตีของผู้เล่น อย่างไรก็ตามส่วนประกอบ AI ไม่สามารถแตกหักได้ ตัวอย่างเช่นถ้าฉันมีศัตรูที่สามารถยืนและเดินไปมาหรือเดินไปรอบ ๆ และแกว่งดาบเป็นครั้งคราวฉันต้องสร้างส่วนประกอบ AI ใหม่ แยกพฤติกรรมออกเป็นส่วน ๆ โดยระบุแต่ละสถานะ ฉันได้รับ StandComponent, WalkComponent และ SwingComponent ในการบังคับใช้กฎการเปลี่ยนแปลงฉันต้องจับคู่แต่ละองค์ประกอบ SwingComponent ต้องปิดการใช้งาน StandComponent และ WalkComponent ในช่วงระยะเวลาของการสวิง เมื่อฉันมีศัตรูที่ยืนอยู่เฉยๆแกว่งดาบเป็นครั้งคราวฉันต้องแน่ใจว่า SwingComponent นั้นปิดการใช้งาน WalkComponent หากมีอยู่ แม้ว่าสิ่งนี้จะช่วยให้ส่วนประกอบผสมและการจับคู่ที่ดีขึ้น แต่ก็สามารถนำไปสู่ฝันร้ายในการบำรุงรักษาได้เมื่อมีการเพิ่มการพึ่งพาแต่ละครั้งส่วนประกอบที่มีอยู่จะต้องได้รับการอัปเดตเพื่อให้เล่นได้ดีขึ้นกับข้อกำหนดใหม่ สถานการณ์ในอุดมคติคือผู้ออกแบบสามารถสร้างศัตรู / …

9
วิธีที่มีประสิทธิภาพในการวาดโครงร่างรอบสไปรต์
ฉันใช้ XNA เพื่อเขียนโปรแกรมเกมและได้ทดลองวิธีการต่าง ๆ เพื่อให้ได้ผล 'ที่เลือก' บนสไปรต์ของฉัน ปัญหาที่ฉันมีอยู่ก็คือการคลิกแต่ละครั้งที่ถูกดึงลงไปใน Spritebatch นั้นถูกใช้มากกว่า Sprite เดียว (แต่ละวัตถุสามารถสร้างได้มากถึง 6 Sprite) ฉันขอขอบคุณถ้ามีคนแนะนำฉันเกี่ยวกับวิธีการเพิ่มเค้าร่างให้กับสไปรต์ X พิกเซลของฉัน (ดังนั้นความกว้างเค้าร่างอาจเป็นจำนวนพิกเซลทั้งหมดที่หลากหลาย) ขอบคุณล่วงหน้า, เกร็ก
21 2d  xna  sprites 

5
ฉันจะใช้การเลื่อนแบบพารัลแลกซ์ในแบบ 2D ได้อย่างไร
สมมติว่าฉันมีสามชั้น: พื้นหน้าพื้นกลางและพื้นหลัง การใช้เลเยอร์ทั้งสามนี้เกี่ยวข้องกับการสร้างการเลื่อนพารัลแลกซ์อย่างไร

1
แปลงลำดับการคูณเมทริกซ์
ฉันประสบปัญหาในการพยายามหาลำดับการคูณที่ถูกต้องสำหรับเมทริกซ์การแปลงสุดท้าย ฉันมักจะได้รับการเคลื่อนไหวที่แปลกหรือเรขาคณิตที่บิดเบี้ยว รุ่นปัจจุบันของฉันมีคำอธิบายด้านล่าง: สำหรับโหนดเดียวลำดับการคูณของฉันคือ: L = S * R * T ที่ไหน L = เมทริกการแปลงโลคัล S = เมทริกซ์สเกลท้องถิ่น R = เมทริกซ์การหมุนโลคัล T = เมทริกซ์แปลโลคัล สำหรับการเปลี่ยนแปลงโลกของโหนด: W = PW * L ที่ไหน W = เมทริกซ์การแปลงโลก PW = เมทริกซ์การแปลงโลกผู้ปกครอง L = เมทริกการแปลงโลคัลที่คำนวณข้างต้น เมื่อแสดงผลสำหรับแต่ละโหนดฉันคำนวณเมทริกซ์: MV = Inv (C) * NW ที่ไหน MV = …
21 matrix 

3
ย้ายจาก A (x, y) ไปยัง B (x1, y1) ด้วยความเร็วคงที่หรือไม่
ขณะนี้ฉันมีสิ่งที่ชอบ: float deltaX = point0.getX() - point1.getX(); float deltaY = point0.getY() - point1.getY(); และทุกๆ 0.01 วินาทีฉันจะรีเฟรชตำแหน่งวัตถุของฉันเช่นนี้: object.setPosition(object.getX()-deltaX/100,object.getY()-deltaY/100); ดังนั้นสิ่งนี้จะย้ายวัตถุของฉันจากจุด 0 ถึงจุด 1 ใน 1 วินาที สิ่งที่ฉันต้องการคือมี 2 คะแนนเพื่อให้สามารถเคลื่อนย้ายวัตถุจากจุด 0 หันหน้าไปทาง (ตามทิศทาง) จุด 1 ด้วยความเร็วคงที่ ดังนั้นเมื่อฉันมีจุดใกล้กับจุดเริ่มต้นของฉันวัตถุจะเคลื่อนที่ไปทางนั้นด้วยความเร็วเท่ากันมันจะเกิดอะไรขึ้นถ้าฉันมีจุดที่ไกลออกไป ข้อเสนอแนะใด ๆ ที่ชื่นชม ขอบคุณ

3
เราจะหลีกเลี่ยง“ เอฟเฟกต์บันได” ในการเคลื่อนไหวของภาพพิกเซลได้อย่างไร
ฉันกำลังแสดงสไปรต์ที่พิกัดพิกเซลที่แน่นอนเพื่อหลีกเลี่ยงผลเบลอที่เกิดจากการลดรอยหยัก (สไปรต์เป็นพิกเซลศิลปะและจะดูแย่หากกรอง) อย่างไรก็ตามเนื่องจากการเคลื่อนที่ของวัตถุนั้นเกี่ยวข้องกับความเร็วตัวแปรแรงโน้มถ่วงและปฏิกิริยาทางกายภาพวิถีจึงถูกคำนวณด้วยความแม่นยำระดับพิกเซลย่อย ที่ความเร็วหน้าจอขนาดใหญ่พอ (vΔtมากกว่า 2 หรือ 3 พิกเซล) นี้ทำงานได้ดีมาก อย่างไรก็ตามเมื่อความเร็วมีขนาดเล็กเอฟเฟกต์บันไดที่เห็นได้ชัดเจนสามารถปรากฏขึ้นได้โดยเฉพาะอย่างยิ่งในแนวเส้นทแยงมุม นี่ไม่ใช่ปัญหาที่ความเร็วหน้าจอช้ามาก (v << 1 พิกเซลต่อวินาที) ดังนั้นฉันจึงมองหาวิธีแก้ปัญหาสำหรับค่าความเร็วกลางเท่านั้น ทางด้านซ้ายเป็นเส้นทางที่พล็อตสำหรับความเร็วขนาดใหญ่ที่ได้จากการปัดเศษของพิกัดวัตถุ ตรงกลางคุณจะเห็นว่าเกิดอะไรขึ้นเมื่อความเร็วมีขนาดเล็กลงและเอฟเฟกต์บันไดที่ฉันกำลังพูดถึง ทางด้านขวาสถานทีของเส้นทางการเคลื่อนที่ที่ฉันต้องการ ฉันสนใจแนวคิดของอัลกอริทึมในการกรองวิถีเพื่อลดนามแฝงในขณะที่ยังคงพฤติกรรมเดิมที่ความเร็วสูงและขนาดเล็ก ฉันสามารถเข้าถึงΔtตำแหน่งทันทีและความเร็วเช่นเดียวกับจำนวนโดยพลการของค่าก่อนหน้า แต่เนื่องจากเป็นการจำลองแบบเรียลไทม์ฉันจึงไม่ทราบเกี่ยวกับค่าในอนาคต . โปรดทราบว่าเนื่องจากการจำลองทางฟิสิกส์การเปลี่ยนแปลงทิศทางอย่างฉับพลันอาจเกิดขึ้นได้เช่นกัน

5
ฉันต้องการส่วนประกอบ 'w' ในคลาส Vector ของฉันหรือไม่
สมมติว่าคุณกำลังเขียนรหัสเมทริกซ์ที่จัดการการหมุนการแปลและอื่น ๆ สำหรับพื้นที่ 3 มิติ ตอนนี้เมทริกซ์การแปลงต้องเป็น 4x4 เพื่อให้พอดีกับองค์ประกอบการแปล อย่างไรก็ตามคุณไม่จำเป็นต้องจัดเก็บwส่วนประกอบในเวกเตอร์ใช่ไหม? แม้แต่ในการแบ่งเปอร์สเปคทีฟคุณสามารถคำนวณและจัดเก็บwนอกเวคเตอร์และแบ่งเปอร์สเปคทีฟก่อนกลับจากเมธอด ตัวอย่างเช่น: // post multiply vec2=matrix*vector Vector operator*( const Matrix & a, const Vector& v ) { Vector r ; // do matrix mult r.x = a._11*v.x + a._12*v.y ... real w = a._41*v.x + a._42*v.y ... // perspective divide r …

6
วิธีการสร้าง "ปริมาณการใช้ AI"?
โครงการที่ฉันกำลังทำอยู่ตอนนี้มี "การจราจร" จำนวนมากในแง่ของรถยนต์ที่กำลังแล่นไปตามถนน, เครื่องบินกำลังเคลื่อนย้ายผ้ากันเปื้อนเป็นต้น ณ ตอนนี้พา ธ ที่พร้อมใช้งานจะถูกคำนวณล่วงหน้าดังนั้นโหนดจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับการข้ามที่ตัวเองเชื่อมต่อกันด้วยขอบ เมื่อตัวละคร / เอเจนต์เกิดขึ้นในโลกมันเริ่มต้นที่บางโหนดและค้นหาเส้นทางไปยังโหนดเป้าหมายโดยใช้อัลกอริธึม A * ตัวแทนตามเส้นทางและในที่สุดก็มาถึงปลายทาง ไม่มีปัญหาจนถึงตอนนี้ ตอนนี้ฉันต้องเปิดใช้งานตัวแทนเพื่อหลีกเลี่ยงการชนและจัดการกับสถานการณ์การจราจรที่ซับซ้อน ตั้งแต่ฉันยังใหม่กับสนามของ AI ฉันค้นหาบทความ / บทความเกี่ยวกับพฤติกรรมการบังคับเลี้ยว แต่พบว่าพวกเขาอยู่ในระดับต่ำเกินไป ปัญหาของฉันประกอบด้วยการหลีกเลี่ยงการชนที่เกิดขึ้นจริงน้อยกว่า (ซึ่งค่อนข้างง่ายในกรณีนี้เนื่องจากตัวแทนปฏิบัติตามเส้นทางที่กำหนดอย่างเคร่งครัด) แต่ในสถานการณ์เช่นตัวแทนหนึ่งออกจากจุดจบในขณะที่อีกคนหนึ่งต้องการป้อนสิ่งเดียวกัน หรือตัวแทนสองคนพบกันที่คอขวดซึ่งอนุญาตให้ตัวแทนหนึ่งรายผ่านแต่ละครั้ง แต่ทั้งคู่ต้องผ่าน (ตามเส้นทางที่ดีที่สุดที่พบก่อนหน้านี้) และพวกเขาต้องการหาวิธีที่จะให้อีกฝ่ายหนึ่งผ่านไปก่อน ประเด็นหลักของปัญหาคือการคาดคะเนการเคลื่อนไหวของการจราจรเพื่อหลีกเลี่ยงการล็อกที่ตายแล้ว ยากที่จะอธิบาย แต่ฉันเดาว่าคุณเข้าใจในสิ่งที่ฉันหมายถึง คุณมีคำแนะนำใด ๆ สำหรับฉันที่จะเริ่มมองหา? เอกสารโครงการตัวอย่างหรือสิ่งที่คล้ายกันที่สามารถเริ่มต้นได้บ้าง ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ!
21 ai  movement 

2
วิธีการออกแบบเมนูบริบทตามวัตถุใด ๆ
ฉันกำลังมองหาวิธีแก้ปัญหาสำหรับพฤติกรรม "คลิกขวา" โดยพื้นฐานทุกรายการในเกมเมื่อคลิกขวาสามารถแสดงชุดของตัวเลือกตามสิ่งที่วัตถุเป็น ตัวอย่างคลิกขวาสำหรับสถานการณ์ต่าง ๆ : สินค้าคงคลัง:หมวกกันน็อกแสดงตัวเลือก (สวมใส่ใช้วางคำอธิบาย) ธนาคาร: Helmet แสดงตัวเลือก (รับ 1, Take X, Take All, Description) ชั้น:หมวกกันน็อกแสดงตัวเลือกต่าง ๆ (ถ่ายเดินที่นี่รายละเอียด) เห็นได้ชัดว่าตัวเลือกแต่ละตัวชี้ไปที่วิธีการบางอย่างที่ทำในสิ่งที่พูด นี่เป็นส่วนหนึ่งของปัญหาที่ฉันพยายามหา ด้วยตัวเลือกการมีเสน่ห์มากมายสำหรับรายการเดียวฉันจะให้ชั้นเรียนของฉันออกแบบในลักษณะที่จะไม่ยุ่งมากได้อย่างไร ฉันเคยคิดเกี่ยวกับการสืบทอด แต่นั่นอาจจะยืดเยื้อและห่วงโซ่อาจมีขนาดใหญ่มาก ฉันคิดเกี่ยวกับการใช้อินเทอร์เฟซ แต่สิ่งนี้อาจ จำกัด ฉันเล็กน้อยเพราะฉันจะไม่สามารถโหลดข้อมูลรายการจากไฟล์ Xml และวางลงในคลาส "รายการ" ทั่วไป ฉันอ้างอิงผลลัพธ์ที่ต้องการในเกมที่ชื่อว่า Runescape วัตถุทุกชิ้นสามารถคลิกขวาในเกมและขึ้นอยู่กับว่ามันอยู่ที่ไหนและอยู่ที่ไหน (สินค้าคงคลัง, พื้น, ธนาคาร ฯลฯ ) แสดงชุดตัวเลือกต่าง ๆ ที่ผู้เล่นสามารถโต้ตอบได้ ฉันจะประสบความสำเร็จในเรื่องนี้ได้อย่างไร ฉันควรใช้วิธีใดก่อนอื่นตัดสินใจว่าควรแสดงตัวเลือกใดและเมื่อคลิกวิธีเรียกวิธีที่สอดคล้องกัน ฉันกำลังใช้ C # …

2
ทำให้ฉากทั้งหมดจางหายไปเป็นสีเทา
เมื่อผู้เล่นเสียชีวิตไปทั้งหมดฉันต้องการให้หน้าจอเกมทั้งหมดเป็นสีเทา แต่ไม่หยุดอัปเดตทันที ฉันยังต้องการให้มันจางหายไปถึงระดับสีเทาแทนที่จะเสียสีไปในทันที ทุกสิ่งที่ฉันพบจนถึงขณะนี้คือเกี่ยวกับการจับภาพหน้าจอและทำให้เป็นสีเทาหรือทำให้เป็นสีเทาเฉพาะพื้นผิว มีวิธีที่จะเปลี่ยนสนามเด็กเล่นทั้งหมดและวัตถุทั้งหมดภายในเป็นสีเทาโดยไม่ต้องวนซ้ำทุกอย่างหรือไม่?
20 xna  c# 

3
แนวทางปฏิบัติที่ดีที่สุดสำหรับระบบพิกัดแผนที่
มีอนุสัญญาและ / หรือวิธีการที่รู้จักกันดีที่สุดเกี่ยวกับระบบพิกัดในแผนที่เกมหรือไม่? จุดเริ่มต้นมักจะอยู่ในตำแหน่งกึ่งกลางของแผนที่หรือไม่ หรือมันอาศัยอยู่ในมุมหนึ่งและแผนที่ถูกสร้างขึ้นใน octant เดียวของพื้นที่ 3D หรือไม่?

3
ทำให้ศัตรู flocking หลายตัวล้อมรอบสิ่งกีดขวางได้อย่างมีประสิทธิภาพ
ฉันกำลังพยายามปรับปรุงการหาเส้นทางสำหรับศัตรูในเกมของฉัน ตอนนี้พวกเขาเพียงแค่ขยับไปยังตำแหน่งที่แน่นอนของผู้เล่นโดยการคำนวณมุมระหว่างพวกเขากับผู้เล่นและเคลื่อนที่ไปในทิศทางนั้น ฉันยังมีอัลกอริทึม flocking ที่ป้องกันศัตรูจากการซ้อนทับกันดังนั้นพวกเขาจะรวมตัวกันเป็นกลุ่มแทนที่จะจับกลุ่มกัน อย่างไรก็ตามตอนนี้ฉันได้เพิ่มแผนที่แบบเรียงต่อกันแล้วฉันต้องการศัตรูเพื่อให้สามารถเดินไปรอบ ๆ สิ่งกีดขวางและกำแพงได้เช่นกัน ในขั้นต้นฉันพยายามเพิ่มค่าการแยกลงในไทล์ "ไม่สามารถเดินได้" เพื่อที่อัลกอริทึม flocking จะพิจารณาผนังและอุปสรรคเป็นวัตถุที่จะย้ายออกไป ฉันยังไม่ทราบว่าเป็นไปได้หรือไม่เพราะการทดสอบครั้งแรกของฉันแสดงให้เห็นว่าศัตรูชนกำแพงที่มองไม่เห็นซึ่งไม่มีกระเบื้องที่ไม่สามารถเดินได้ แต่ด้วยเหตุผลบางอย่างพวกเขาชนและเริ่มพูด ฉันสงสัยว่ามันอาจจะทำงานหนักเกินไปหรือไม่ในการคำนวณเส้นทางไปยังผู้เล่นโดยใช้ A * จากนั้นใช้อัลกอริทึม flocking เพื่อป้องกันการจับกันเป็นก้อน เดิมทีเกมของฉันจะเป็นเกมยิงตามคลื่น แต่ฉันตัดสินใจที่จะทำให้เกมนี้อยู่ในระดับที่เส้นเลือดของ Hotline Miami ดังนั้นจึงเป็นไปได้ที่ฉันจะมีศัตรูน้อยลง พวกเขาแข็งแกร่งขึ้น นี่เป็นทางออกที่ทำงานได้หรือไม่? ฉันใช้ Java กับ Slick2D เป็นเอ็นจิ้นเกมของฉัน หรือมีวิธีแก้ปัญหา / อัลกอริทึมที่ดีกว่าที่จัดการกับปัญหาทั้งสองนี้ได้หรือไม่

2
วิธีการ Unity นับเกินขีด จำกัด 64K
ฉันเพิ่งมีปัญหาเกี่ยวกับวิธี 64k ใน Unity ดังนั้นฉันจึงไม่สามารถสร้างโครงการของฉันได้ มันแสดงให้เห็นข้อ จำกัด วิธีการเกินขีด จำกัด ของวิธีการนับ 64k ดังนั้นทุกคนที่นี่สามารถช่วยฉันแก้ไขปัญหานี้ได้หรือไม่

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