การพัฒนาเกม

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

3
หลีกเลี่ยงการโคจรในการติดตามพฤติกรรมการบังคับเลี้ยว
ฉันมีขีปนาวุธที่ทำ ติดตามพฤติกรรมเพื่อติดตาม (และลองและส่งผลกระทบ) เป้าหมาย (เครื่องเขียน) ของมัน มันทำงานได้ดีตราบใดที่คุณไม่ได้ยิงเมื่อคุณยิงขีปนาวุธ หากคุณ strafing ขีปนาวุธมีแนวโน้มที่จะโคจรรอบเป้าหมาย ฉันแก้ไขสิ่งนี้โดยการเร่งความเร็วสัมผัสกับเป้าหมายก่อนฆ่าองค์ประกอบแทนเจนต์ของความเร็วก่อนจากนั้นจึงทำการเชื่อมสำหรับเป้าหมาย ดังนั้นฉันจึงเร่งใน -vT จนกระทั่ง vT เกือบ 0 แล้วเร่งในทิศทางของ vN ในขณะที่ใช้งานได้ฉันกำลังมองหาโซลูชันที่สวยงามกว่าซึ่งขีปนาวุธสามารถส่งผลกระทบต่อเป้าหมายได้โดยไม่ต้องฆ่าองค์ประกอบวงสัมผัสก่อน

2
ป้องกันการเกิดภัยพิบัติในเกมแข่งรถ
เมื่อเล่น GTA III บน Android ฉันสังเกตเห็นบางสิ่งที่สร้างความรำคาญให้ฉันในเกือบทุกเกมแข่งที่ฉันเคยเล่น (อาจยกเว้น Mario Kart): การขับตรงไปข้างหน้านั้นเป็นเรื่องง่าย แต่เส้นโค้งนั้นยากมาก เมื่อฉันเปลี่ยนเลนหรือผ่านใครบางคนรถเริ่มหมุนไปมาและความพยายามใด ๆ ที่จะแก้ไขให้แย่ลงเท่านั้น สิ่งเดียวที่ฉันทำได้คือกดเบรก ฉันคิดว่านี่เป็นงานหนักเกินไป สิ่งที่ทำให้มันน่ารำคาญก็คือมันไม่เคยเกิดขึ้นกับฉันในชีวิตจริง (ขอบคุณพระเจ้า :-)) ดังนั้น 90% ของเกมที่มียานพาหนะอยู่ภายในรู้สึกไม่จริงสำหรับฉัน (แม้จะมีเครื่องมือฟิสิกส์ที่ดีจริงๆ) ฉันได้พูดคุยกับผู้คนสองสามคนเกี่ยวกับเรื่องนี้และดูเหมือนว่าคุณ 'ได้รับ' เกมแข่งรถหรือไม่ ด้วยการฝึกฝนจำนวนมากฉันจัดการเพื่อให้ได้กึ่งดีในบางเกม (เช่นจากชุด Need for Speed) โดยการขับรถอย่างระมัดระวังมากเบรกมาก (และมักจะเป็นตะคริวในมือของฉัน) คุณสามารถทำอะไรได้บ้างในฐานะผู้พัฒนาเกมเพื่อป้องกันการเกิดเสียงดังกังวานและทำให้การขับขี่รู้สึกถูกต้อง? (สำหรับเกมแข่งรถทั่วไปที่ไม่ได้มุ่งมั่นเพื่อฟิสิกส์ที่สมจริง 100%) ฉันยังสงสัยว่าเกมอย่าง Super Mario Kart นั้นแตกต่างกันอย่างไรเพื่อที่พวกเขาจะได้ไม่ต้องออกแรงมากเกินไป ฉันเดาว่าปัญหาหนึ่งคือถ้าคุณเล่นกับแป้นพิมพ์หรือหน้าจอสัมผัส (แต่ไม่ใช่ล้อและคันเหยียบ) คุณมีอินพุตดิจิตอลเท่านั้น: ใช้แก๊สอัดหรือไม่หมุนพวงมาลัยซ้าย / ขวาหรือไม่และมันยากกว่ามากที่จะคัด ความเร็วที่กำหนด อีกสิ่งหนึ่งคือคุณอาจไม่ได้รู้สึกถึงความเร็วและขับได้เร็วกว่าความเป็นจริง จากส่วนบนของหัวฉันมีวิธีแก้ไขอย่างหนึ่งที่อาจแตกต่างกันไปตามความเร็วของพวงมาลัย

4
ฉันควรแชร์ข้อมูลระหว่างกราฟิกและเอนจิ้นฟิสิกส์ในเกมหรือไม่
ฉันกำลังเขียนเอ็นจิ้นเกมที่ประกอบด้วยโมดูลไม่กี่ตัว สองของพวกเขาเป็นกราฟิกเครื่องยนต์และเครื่องยนต์ฟิสิกส์ ฉันสงสัยว่ามันเป็นทางออกที่ดีในการแบ่งปันข้อมูลระหว่างกันหรือไม่ สองวิธี (การแชร์หรือไม่) ดูเหมือนว่า: โดยไม่ต้องแชร์ข้อมูล GraphicsModel{ //some common for graphics and physics data like position //some only graphic data //like textures and detailed model's verticles that physics doesn't need }; PhysicsModel{ //some common for graphics and physics data like position //some only physics data //usually my physics data …

5
สไปรต์เรนเดอร์พร่ามัวด้วยความเร็ว
หลังจากเพิ่มความเร็วให้กับเกมของฉันฉันรู้สึกว่าพื้นผิวของฉันกระตุก ฉันคิดว่ามันเป็นแค่ดวงตาของฉันจนกระทั่งในที่สุดฉันก็จับมันเป็นภาพหน้าจอ: ด้านซ้ายเป็นสิ่งที่แสดงในเกมของฉัน ด้านขวาคือสไปรต์ดั้งเดิมวางอยู่ (นี่เป็นภาพหน้าจอจาก Photoshop, ซูมเป็น 6x) สังเกตว่าขอบเป็นนามแฝง - ดูเหมือนว่าการเรนเดอร์พิกเซลย่อยเกือบจะเหมือนกัน ในความเป็นจริงถ้าฉันไม่ได้บังคับสไปรต์ของฉัน (ซึ่งมีตำแหน่งและความเร็วเป็น ints) เพื่อวาดโดยใช้ค่าจำนวนเต็มฉันจะสาบานว่า MonoGame กำลังวาดด้วยค่าจุดลอย แต่มันไม่ใช่ อะไรเป็นสาเหตุของสิ่งเหล่านี้ที่ปรากฏพร่ามัว มันจะไม่เกิดขึ้นหากไม่ใช้ความเร็ว เพื่อความแม่นยำSpriteComponentชั้นเรียนของฉันมีVector2 Positionทุ่งนา เมื่อฉันโทรDrawฉันใช้เป็นหลักnew Vector2((int)Math.Round(this.Position.X), (int)Math.Round(this.Position.Y))สำหรับตำแหน่ง ผมมีข้อผิดพลาดก่อนที่แม้แต่วัตถุนิ่งจะพร่ามัว - นั่นเป็นเพราะผมใช้ตรงเวกเตอร์และไม่ปัดเศษค่าที่จะPosition intsถ้าฉันใช้Floor/ Ceilingแทนการปัดไปรอบ ๆ sprite / hovers (หนึ่งพิกเซลต่างกัน) และยังคงพร่ามัว

2
หลายแหล่งที่มาของการเคลื่อนไหวในระบบเอนทิตี
ฉันค่อนข้างใหม่กับแนวคิดของระบบเอนทิตีที่ได้อ่านสิ่งต่าง ๆ (ส่วนใหญ่เป็นประโยชน์บล็อกที่ยอดเยี่ยมนี้และคำตอบนี้ ) แม้ว่าฉันจะมีปัญหาเล็กน้อยในการทำความเข้าใจว่าบางสิ่งง่าย ๆ เช่นเดียวกับที่สามารถจัดการตำแหน่งของวัตถุด้วยแหล่งที่มาที่ไม่ได้กำหนดจำนวนมาก นั่นคือฉันมีหน่วยงานของฉันซึ่งมีองค์ประกอบตำแหน่ง ฉันมีเหตุการณ์บางอย่างในเกมที่บอกเอนทิตีนี้ให้ย้ายระยะทางที่กำหนดในเวลาที่กำหนด เหตุการณ์เหล่านี้สามารถเกิดขึ้นได้ตลอดเวลาและจะมีค่าแตกต่างกันสำหรับตำแหน่งและเวลา ผลก็คือพวกเขาจะรวมกัน ในโซลูชัน OO แบบดั้งเดิมฉันมีMoveByคลาสบางประเภทที่มีระยะทาง / เวลาและอาเรย์ของผู้ที่อยู่ในคลาสอ็อบเจ็กต์เกมของฉัน แต่ละเฟรมฉันจะวนซ้ำทั้งหมดMoveByและนำไปใช้กับตำแหน่ง หาก a MoveByถึงเวลาสิ้นสุดแล้วให้ลบออกจากอาร์เรย์ ด้วยระบบเอนทิตี้ฉันสับสนนิดหน่อยว่าฉันควรทำซ้ำพฤติกรรมแบบนี้อย่างไร หากมีเพียงหนึ่งในเหล่านี้ในแต่ละครั้งแทนที่จะสามารถรวมพวกเขาเข้าด้วยกันมันก็จะค่อนข้างตรงไปตรงมา (ฉันเชื่อ) และมีลักษณะเช่นนี้: PositionComponent มี x, y MoveByComponent มี x, y, time Entityซึ่งมีทั้งPositionComponentและMoveByComponent MoveBySystemที่รูปลักษณ์สำหรับนิติบุคคลที่มีทั้งส่วนประกอบเหล่านี้และเพิ่มมูลค่าของไปMoveByComponent PositionComponentเมื่อtimeถึงมันจะลบองค์ประกอบจากเอนทิตีนั้น ฉันสับสนเล็กน้อยว่าฉันจะทำสิ่งเดียวกันได้อย่างไรด้วยการเคลื่อนไหวหลายอย่างด้วยกัน ความคิดเริ่มต้นของฉันคือฉันจะมี: PositionComponent, MoveByComponentเช่นเดียวกับข้างต้น MoveByCollectionComponentซึ่งมีอาร์เรย์ของMoveByComponents MoveByCollectionSystemที่มองหาเอนทิตีที่มีPositionComponentและ a MoveByCollectionComponent, วนซ้ำMoveByComponents ข้างในนั้น, ใช้ / ลบตามความจำเป็น ฉันเดาว่านี่เป็นปัญหาทั่วไปมากขึ้นของการมีองค์ประกอบเดียวกันจำนวนมากและต้องการให้ระบบที่เกี่ยวข้องดำเนินการกับแต่ละองค์ประกอบ …

3
Windows 8 ยังรองรับ DirectX 9 หรือไม่
Windows 8 รองรับ DirectX 9 หรือไม่ เพราะฉันดูตัวอย่างที่เขียนใน C ++ และ DirectX 9 ที่สร้างขึ้นสำหรับ Windows 8 มันไม่ใช่อย่างที่ฉันรู้ (ดูที่นี่http://directxtutorial.com/Lesson.aspx?lessonid=111-4-2 ) เช่น Inizialising DirectX พร้อม COM: ComPtr<ID3D11Device1> dev; ComPtr<ID3D11DeviceContext1> devcon; มันแปลกเพราะฉันรู้ว่ามันเป็นแบบเก่า: ID3D11Device *dev; ID3D11DeviceContext *devcon; (ฉันหวังว่าคุณจะเข้าใจสิ่งที่ฉันต้องการจะบอก) ฉันหวังว่ามันจะไม่เปลี่ยนแปลงอย่างสมบูรณ์เนื่องจากระบบปฏิบัติการใหม่ที่วางจำหน่าย
9 c++  directx  windows 

5
การตรวจจับการชนกันแบบ 2 มิติสำหรับเกมพินบอล
จนถึงตอนนี้ในเกมก่อนหน้านี้ฉันใช้การชนสองมิติแบบง่ายกับกล่องจากนั้นตรวจสอบที่ระดับพิกเซลเพื่อการชนกัน หากทำเกมพินบอลในเฟรมจำนวนมากลูกจะสัมผัสกับกำแพงหรือพื้นผิวอื่นดังนั้นจะมีวิธีอื่นหรือไม่?

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

3
เมื่อมีรายการห้องที่เชื่อมต่อกันฉันจะค้นหากลุ่มห้องแยกได้อย่างไร
ฉันพยายามที่จะสร้างโร๊คไลค์เล็ก ๆ และออกไปสร้างห้องและทางเดินแบบสุ่ม ห้องพักแต่ละห้องเป็นวัตถุที่ทันสมัยและมีรายการห้องพักอื่น ๆ ที่เชื่อมต่อกันด้วยทางเดิน ฉันสามารถแยกห้องที่ไม่เชื่อมต่อออกจากกัน แต่ฉันจะรู้ได้อย่างไรว่าห้องที่เชื่อมต่อกันเท่านั้น แต่ไม่ได้รวมกับคนอื่น ๆ ส่วนใหญ่กลายเป็นเกาะ? เพื่อแสดงให้ดีขึ้นปัญหาที่นี่คือภาพจากคอนโซลในระดับจม ห้องที่ 5 และ 6 เชื่อมต่อกันเท่านั้น ฉันสามารถใช้อัลกอริทึมใดเพื่อตรวจสอบสิ่งนั้น
9 java  algorithm 

1
gluLookAt ทำงานอย่างไร
จากความเข้าใจของฉัน gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); เทียบเท่ากับ: glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); แต่เมื่อฉันพิมพ์ModelViewเมทริกซ์การเรียกเพื่อglTranslatef()ดูเหมือนจะทำงานไม่ถูกต้อง นี่คือข้อมูลโค้ด: #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int …

2
การเปลี่ยนแปลงสถานะในเอนทิตีหรือส่วนประกอบ
ฉันมีปัญหาในการหาวิธีจัดการกับการจัดการของรัฐในหน่วยงานของฉัน ฉันไม่ได้มีปัญหากับการจัดการสถานะของเกมเช่นหยุดชั่วคราวและเมนูเนื่องจากสิ่งเหล่านี้ไม่ได้รับการจัดการเป็นระบบส่วนประกอบเอนทิตี เพียงแค่มีสถานะในหน่วยงาน / ส่วนประกอบ ภาพวาดจาก Orcs Must Die เป็นตัวอย่างฉันมีตัวหลักและตัวดักของฉันซึ่งมีส่วนประกอบของพวกเขาเช่น PositionComponent, RenderComponent, PhysicsComponent เท่านั้น ในการอัพเดทแต่ละครั้งเอนทิตีจะเรียกการอัพเดทบนส่วนประกอบของมัน ฉันยังมี EventManager สามัญพร้อมฟังสำหรับประเภทเหตุการณ์ที่แตกต่างกัน ตอนนี้ฉันต้องสามารถวางกับดักได้: ก่อนอื่นเลือกตำแหน่งกับดักและกับดักจากนั้นจึงวางกับดัก เมื่อวางกับดักมันควรจะปรากฏขึ้นที่ด้านหน้าของตัวละครหลักที่แสดงในรูปแบบที่แตกต่างกันและติดตามมันไปรอบ ๆ เมื่อวางไว้ก็ควรตอบสนองต่อการชนและแสดงผลตามปกติ สิ่งนี้จัดการได้อย่างไรในระบบที่ใช้ส่วนประกอบเป็นหลัก (ตัวอย่างนี้เป็นแบบเฉพาะ แต่สามารถช่วยหาวิธีทั่วไปในการจัดการกับสถานะเอนทิตี)

2
ฟรีการเคลื่อนไหวในเกมภาพวาดสามมิติแบบเรียงต่อกัน
มีวิธีง่ายๆในการใช้การเคลื่อนไหวฟรีในเกม isometric แบบอิงไทล์หรือไม่? หมายความว่าผู้เล่นจะไม่เพียงกระโดดจากไทล์หนึ่งไปอีกอันหนึ่งทันทีหรือไม่ใช่ "snapped" ไปยังกริด (ตัวอย่างเช่นหากการเคลื่อนไหวระหว่างไทล์เป็นภาพเคลื่อนไหว แต่คุณถูกล็อคไม่ให้ทำอะไรก่อนที่ภาพเคลื่อนไหวจะเสร็จสิ้น) ฉันเป็นมือใหม่จริงๆกับทุกอย่างที่เกี่ยวข้องกับการเขียนโปรแกรมเกม แต่ด้วยความช่วยเหลือของเว็บไซต์นี้และแหล่งข้อมูลอื่น ๆ มันค่อนข้างง่ายที่จะทำสิ่งพื้นฐาน แต่ฉันไม่สามารถหาแหล่งข้อมูลที่เป็นประโยชน์สำหรับปัญหานี้โดยเฉพาะ . ขณะนี้ฉันได้แก้ไขบางสิ่งที่ใกล้เคียงกับสิ่งนี้: http://jsfiddle.net/KwW5b/4/ (การเคลื่อนไหว WASD) แนวคิดสำหรับการเคลื่อนไหวคือการใช้แผนที่ของเมาส์เพื่อตรวจจับเมื่อผู้เล่นย้ายไปที่ไทล์อื่นแล้วพลิกออฟเซ็ตและส่วนใหญ่ทำงานอย่างถูกต้อง (แต่ละมุมทำให้ผู้เล่นย้ายไปยังตำแหน่งที่ไม่ถูกต้อง: ดูhttp: //www.youtube.com/watch?v=0xr15IaOhrIซึ่งอาจเป็นเพราะฉันไม่สามารถทำงานแผนที่เมาส์เต็มอย่างถูกต้อง) แต่ฉันไม่มีภาพลวงตาว่าอยู่ใกล้กับวิธีแก้ปัญหาที่ดี / มีสติ และอย่างไรก็ตามมันเป็นเพียงการแสดงให้เห็นถึงสิ่งที่ฉันต้องการนำไปใช้

1
นานแค่ไหนที่จะแสดงแต่ละประโยค?
เมื่อสร้างลำดับที่ข้อความเลื่อนไปมาโดยอัตโนมัติมีเมตริกซึ่งจะทำให้ฉันคำนวณระยะเวลาที่เหมาะสมในการแสดง "ประโยค" แต่ละรายการได้หรือไม่ สัญชาตญาณของฉันบอกฉันว่าเนื่องจากวิธีที่เราอ่านจำนวนคำอาจมีความเกี่ยวข้องมากกว่าจำนวนตัวอักษร แต่ฉันอยากรู้ว่าผู้คนอาจคิดเกี่ยวกับปัญหานี้แล้ว

4
รักษาการหมุนระหว่างวัตถุสองอย่าง
ในเกม XNA ของฉันฉันมีวัตถุสองอย่างที่ชนกัน เมื่อวัตถุแรกชนกับวัตถุอื่นมันจะสามารถยึดกับวัตถุนั้นและเคลื่อนไปรอบ ๆ โลกได้ ฉันมีปัญหากับคณิตศาสตร์ที่นี่ (คณิตศาสตร์ไม่ใช่จุดแข็งของฉัน) ขณะนี้ฉันมีวัตถุที่สองที่ยึดเข้ากับวัตถุแรกแล้วเคลื่อนที่ไปด้วย แต่ฉันไม่สามารถทำให้มันเป็นทิศทางดั้งเดิมได้ ดังนั้นหากวัตถุหันหน้าไปทางมันควรรักษาทิศทางนี้ให้สัมพันธ์กับการหมุนของวัตถุต้นฉบับ มีเคล็ดลับใดบ้างที่ฉันจะทำได้เพื่อให้บรรลุเป้าหมาย
9 xna  rotation 

2
อินพุตฝั่งเซิร์ฟเวอร์
ขณะนี้ในเกมของฉันลูกค้าไม่มีอะไรนอกจากเป็น renderer เมื่อมีการเปลี่ยนแปลงสถานะอินพุตไคลเอนต์จะส่งแพ็กเก็ตไปยังเซิร์ฟเวอร์และย้ายผู้เล่นราวกับว่ากำลังประมวลผลอินพุต แต่เซิร์ฟเวอร์มีตำแหน่งสุดท้ายที่บอกตำแหน่ง วิธีนี้ใช้งานได้ดีโดยทั่วไปยกเว้นปัญหาที่สำคัญอย่างหนึ่ง: การหลุดจากขอบ โดยทั่วไปหากผู้เล่นเดินไปที่ขอบพูดหน้าผาและหยุดทันทีก่อนที่จะออกจากขอบบางครั้งในวินาทีต่อมาเขาจะหายตัวไปจากขอบ นี่เป็นเพราะแพ็คเก็ต "ฉันหยุดกด W" ถูกส่งหลังจากเซิร์ฟเวอร์ประมวลผลข้อมูล นี่คือแผนภาพความล่าช้าเพื่อช่วยให้คุณเข้าใจสิ่งที่ฉันหมายถึง: http://i.imgur.com/Prr8K.png ฉันสามารถส่งแพ็กเก็ต "W Pressed" แต่ละเฟรมเพื่อให้เซิร์ฟเวอร์ประมวลผล แต่ดูเหมือนว่าจะเป็นวิธีแก้ปัญหาแบนด์วิดท์ที่มีราคาแพง ความช่วยเหลือใด ๆ ที่ชื่นชม!

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