การพัฒนาเกม

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

4
MMOs มีเหตุผลอะไรในการมีระดับสูงสุด
ในการพัฒนาตัวละครของผู้เล่น MMO หลายคนนั้นจะถูก จำกัด ด้วยการเลียนแบบเช่นในระดับ 60 หรือ 90 หรือ 100 หรืออะไรก็ตาม ทำไม MMO จึงมีระดับสูงสุดเหล่านี้ตั้งแต่แรก ทำไมไม่เพียงแค่อนุญาตให้ตัวละครยังคงอยู่ในระดับต่อไปด้วยระบบปรับระดับที่ออกแบบมาเพื่อคณิตศาสตร์ที่ทำให้ประสบการณ์การปรับระดับนั้นน่าสนใจและไม่มีที่สิ้นสุด คำตอบของคำถามนี้อาจช่วยให้เราเพื่อดูเหตุผลที่อยู่เบื้องหลังคุณลักษณะและตัดสินใจถ้าและวิธีนี้ควรจะดำเนินการใน MMOs ของเรา

3
ฟังก์ชั่นการเขียนโปรแกรมและสถานะของเกมล้วนๆ
มีเทคนิคทั่วไปในการจัดการสถานะ (โดยทั่วไป) ในภาษาโปรแกรมการทำงานหรือไม่? มีคำตอบในทุกภาษา (ฟังก์ชั่น) การเขียนโปรแกรมเพื่อจัดการสถานะโกลบอล แต่ฉันต้องการหลีกเลี่ยงสิ่งนี้เท่าที่จะทำได้ สถานะทั้งหมดในลักษณะการทำงานบริสุทธิ์เป็นพารามิเตอร์ฟังก์ชั่น ดังนั้นฉันจึงจำเป็นต้องกำหนดสถานะของเกมทั้งหมด (แฮชแมปขนาดมหึมากับโลกผู้เล่นตำแหน่งคะแนนสินทรัพย์ศัตรู ... )) เป็นพารามิเตอร์สำหรับทุกฟังก์ชั่นที่ต้องการจัดการโลกบนอินพุตหรือทริกเกอร์ที่กำหนด . ฟังก์ชั่นของตัวเองเลือกข้อมูลที่เกี่ยวข้องจาก bloest gamestate ทำอะไรกับมันจัดการกับ gamestate และคืน gamestate แต่นี่ดูเหมือนจะเป็นทางออกที่ไม่ดีสำหรับผู้ชาย ถ้าฉันใส่เกมมิ่งทั้งหมดลงในฟังก์ชั่นทั้งหมดมันจะไม่มีประโยชน์สำหรับฉันในทางตรงกันข้ามกับตัวแปรทั่วโลกหรือวิธีการที่จำเป็น ฉันสามารถใส่ข้อมูลที่เกี่ยวข้องลงในฟังก์ชั่นและคืนการกระทำที่จะนำไปใช้สำหรับอินพุตที่กำหนด และหนึ่งฟังก์ชั่นเดียวใช้การกระทำทั้งหมดกับนักเล่นเกม แต่ฟังก์ชั่นส่วนใหญ่ต้องการข้อมูล"ที่เกี่ยวข้อง" จำนวนมาก move()ต้องการตำแหน่งวัตถุ, ความเร็ว, แผนที่สำหรับการชน, ตำแหน่งของศัตรูทั้งหมด, สุขภาพในปัจจุบัน, ... ดังนั้นวิธีนี้ดูเหมือนจะไม่ทำงานเช่นกัน ดังนั้นคำถามของฉันคือฉันจะจัดการกับรัฐจำนวนมากในภาษาโปรแกรมที่ใช้งานได้โดยเฉพาะอย่างยิ่งสำหรับการพัฒนาเกมได้อย่างไร แก้ไข:มีกรอบเกมบางอย่างสำหรับการสร้างเกมใน Clojure มีวิธีการแก้ปัญหานี้บางส่วนคือการเธรดวัตถุทั้งหมดในเกมเป็น "เอนทิตี" และวางไว้ในกระเป๋าใบใหญ่ หน้าที่หลัก Gigantถือหน้าจอและหน่วยงานและกิจกรรมจับ ( :on-key-down, :on-init, ... ) สำหรับองค์กรนี้และเรียกห่วงจอแสดงผลหลัก แต่นี่ไม่ใช่ทางออกที่สะอาดที่ฉันค้นหา

4
ฉันจะหาคำที่ถูกต้องในตารางตัวละครได้อย่างไร
ฉันกำลังสร้างเกมที่คล้ายคลึงกับ Tetris โดยมีความแตกต่างที่สำคัญสองประการ: หน้าจอเริ่มเต็มไปด้วยกระเบื้อง (เช่นใน Puzzle Quest สำหรับ Nintendo DS และพีซี) และแต่ละไพ่มีตัวอักษรอยู่ในนั้น เป้าหมายของผู้เล่นคือการกำจัดไพ่โดยสร้างคำที่ถูกต้องกับพวกเขา คำที่เกิดขึ้นโดยการวางตัวอักษรติดกันในทิศทางใด ๆ ยกเว้นแนวทแยงมุม ผู้เล่นสามารถย้ายทั้งแถวของไพ่ไปทางซ้ายหรือไปทางขวาหรือทั้งคอลัมน์ของไพ่ขึ้นหรือลงสำหรับช่องว่างมากเท่าที่เขาต้องการ (ถ้าการเคลื่อนไหวของแถว / คอลัมน์เกินขีด จำกัด ของคณะกรรมการ ตัวอักษรที่ข้ามขีด จำกัด จะเป็น "รอบ" ซึ่งปรากฏที่ปลายอีกด้านของแถว / คอลัมน์) หลังจากการกระทำของผู้เล่นเกมควรตรวจสอบกระดานทั้งหมดเพื่อค้นหาคำที่ถูกต้องและลบตัวอักษรที่สร้างคำเหล่านั้นออกจากกระดาน ตัวอักษรด้านบนที่ถูกลบออกจะล้มลงในตำแหน่งของตัวอักษรที่ถูกลบออกและตัวอักษรใหม่จะลดลงจากด้านบนของหน้าจอจนกว่าบอร์ดจะเต็มไปอีกครั้ง ฉันได้เขียนอัลกอริธึมเชิงเส้นที่กำหนดลำดับของอักขระแล้วพิจารณาว่าเป็นคำภาษาอังกฤษที่ถูกต้องหรือไม่ ปัญหาที่ฉันมีคือ: ฉันจะตรวจสอบคำที่ถูกต้องบนกระดานได้อย่างไร กำลังดุร้ายทางเดียวหรือไม่ ทดสอบชุดค่าผสมที่เป็นไปได้ทั้งหมดจากบอร์ดเพื่อดูว่าชุดค่านั้นใช้ได้ช้ามากหรือแม้แต่ขนาดเล็ก (5x5) ความช่วยเหลือใด ๆ จะได้รับการชื่นชมมากขอบคุณ!

2
ประโยชน์ของการใช้ระบบรหัสนิติบุคคลคืออะไร?
ฉันกำลังอ่านหนังสือเกม Programming AI โดยตัวอย่าง หนังสือเล่มนี้กล่าวถึงการกำหนดหมายเลข ID ที่ไม่ซ้ำกันให้กับแต่ละเอนทิตีในเกม บ่อยครั้งเมื่อเอนทิตีAต้องติดต่อเอนทิตีB , Aได้รับการอ้างอิงถึงBโดยส่งหมายเลข ID ของBไปยังคลาสEntityDatabase ชั้นนี้รับหมายเลข ID และส่งกลับการอ้างอิงไปยังเอนทิตี หมายเลข ID ของเอนทิตีบางตัวสามารถดึงมาจากไฟล์ที่มี ID ของเอนทิตีบางตัว (ตัวละครในเกมหลัก) คำถามของฉันคือ: ทำไมฉันจะทำเช่นนี้? เหตุใดฉันจึงไม่สามารถทำงานกับการอ้างอิงได้โดยตรง บางครั้งมันยากที่จะได้รับการอ้างอิงโดยตรง? การใช้ระบบ ID เป็นวิธีการทั่วไปหรือไม่ มีเกมที่ไม่ได้ใช้ ID หรือไม่? ฉันใหม่กับการพัฒนาเกม โปรดอธิบายถึงประโยชน์ของการทำงานกับระบบรหัสนิติบุคคล ข้อดีและข้อเสีย ตัวอย่างคอนกรีตจะดีมาก ขอบคุณ

6
ประสิทธิภาพที่แย่ใน Android เมื่อใช้ APK ทำงานได้ดีในเบราว์เซอร์
ฉันได้สร้างโครงการเกมขนาดเล็กใน HTML5 โดยใช้เครื่องมือPhaser (ลองทั้ง 1.1.5 และ 1.1.6) จากนั้นพอร์ตไปยังแพลตฟอร์มมือถือใช้ Phonegap / Cordova สำหรับ Windows Phone 8, Android และ iOS ในเกมของฉันมีองค์ประกอบประมาณ 10 องค์ประกอบซึ่งทำให้เคลื่อนไหวได้ (ย้ายจากจุดหนึ่งไปยังอีกจุดหนึ่งและหมุนในเวลาเดียวกัน) สำหรับ iOS และ Windows Phone 8 ฉันไม่ประสบปัญหาใด ๆ แต่สำหรับ Android ประสิทธิภาพที่ยอมรับไม่ได้คือ ในทางกลับกันถ้าฉันรันเกมผ่านเบราว์เซอร์ของอุปกรณ์มันจะทำงานราบรื่นโดยไม่ล่าช้า แต่ APK ที่คอมไพล์ทำงานอย่างกระตุกมากและองค์ประกอบเคลื่อนไหวช้ามาก & ในลักษณะริบหรี่ ฉันได้ตรวจสอบการตั้งค่าสถานะการเร่งความเร็วฮาร์ดแวร์ android ตั้งค่าเป็น "จริง" ในไฟล์รายการ พยายามเปลี่ยนเป็นเท็จด้วย แต่นั่นก็ไม่ได้สะท้อนการเปลี่ยนแปลงใด ๆ ในประสิทธิภาพ ฉันได้ตรวจสอบเรื่องเดียวกันกับ Android …

1
ฉันจะทำให้พื้นผิวโค้งออกมาจากบล็อกสี่เหลี่ยมได้อย่างไร
สำหรับเกมที่เหมือนPeggleฉันต้องการสร้างบล็อกที่ตามหลังโค้งเช่นนี้: บล็อกจะหายไปเมื่อลูกบอลกระทบกับพวกเขา ฉันจัดการเพื่อวาดแนวนอน แต่ฉันมีปัญหาในการทำตามเส้นทาง: ฉันจะทำสิ่งนี้ได้อย่างไร ฉันจำเป็นต้องสร้างวัตถุBox2Dด้วยจุดยอดที่กำหนดเองหรือไม่?

4
ฉันจะแสดง PNG ด้วยความโปร่งใสใน LibGDX ได้อย่างไร
ฉันกำลังสร้างตัวอย่างโอเอกซ์ง่ายๆด้วย LibGDX ฉันมีภาพง่าย ๆ : ข้ามวงกลมและกระดานทั้งหมดpngสร้างด้วย GIMP ที่มีพื้นหลังโปร่งใส ฉันจะทำให้พวกเขาเป็นTextureโปร่งใสได้อย่างไร ฉันได้ลองใช้คุณสมบัติเปิดใช้งาน GL10 แล้ว แต่ดูเหมือนจะไม่ทำงาน

3
ฉันจะเพิ่มและลบรูปหลายเหลี่ยมนูนได้อย่างไร
ฉันมีสองรูปหลายเหลี่ยมนูน 2D ที่ทับซ้อนกันซึ่งกันและกัน ฉันกำลังมองหาอัลกอริทึมที่จะลบและเพิ่มพวกเขา ผลที่ได้จะต้องเป็นรูปหลายเหลี่ยมเว้าเดียวหรือ (ดียิ่งขึ้น) ชุดของนูนที่ใหญ่ที่สุดที่สร้างผลลัพธ์เว้า (เช่นสามเหลี่ยม) ( ซ้าย:รูปหลายเหลี่ยมที่ทับซ้อนกันเริ่มต้นกลาง:รูปหลายเหลี่ยมที่เกิดจากเว้าหลังการเพิ่มด้านขวา:ชุดของรูปหลายเหลี่ยมนูนที่สร้างผลของเว้าที่นี่จะเป็นการดีกว่าที่จะได้รูปหลายเหลี่ยมนูนที่ใหญ่กว่าสามเหลี่ยมสำหรับเหตุผลด้านประสิทธิภาพ รูปหลายเหลี่ยมที่ซ้อนกันสองอันจะนำไปสู่รูปภาพเดียวกันทางด้านซ้าย แต่พื้นที่ที่ซ้อนทับไม่ได้เป็นส่วนหนึ่งของรูปหลายเหลี่ยมที่เกิดขึ้น) ฉันจะทำสิ่งนี้ได้อย่างไร
12 algorithm 

2
“ ระยะทางไกล” คืออะไรและมีประโยชน์อย่างไรกับการตรวจจับการชน
ฉันกำลังดูวิธีที่มีประสิทธิภาพสำหรับการตรวจจับการชนกันในฉากที่มีวัตถุทั้งแบบคงที่และไดนามิกเมื่อฉันเจอ "ฟิลด์ระยะทาง" ฉันพยายามค้นหาและเข้าใจแนวคิดนี้ แต่ฉันสามารถค้นหาบทความที่เขียนด้วยภาษาที่ซับซ้อนมากเท่านั้น บางคนสามารถอธิบายด้วยคำพูดง่าย ๆ ว่าฟิลด์ระยะทางคืออะไรและสามารถใช้ในการตรวจจับการชนกันของข้อมูลได้อย่างไร

1
เหตุใดพื้นที่คลิปจึงถูกเรียกว่า“ พื้นที่คลิปเป็นเนื้อเดียวกัน” เสมอ
ฉันสังเกตเห็นเกือบทุกอย่างที่ฉันอ่านจนถึงคำว่า "พื้นที่ว่างในคลิป" นั้นถูกเติมด้วยคำว่า "เป็นเนื้อเดียวกัน" ตอนนี้ฉันเข้าใจแล้วว่ามันหมายถึง "เหมือนกัน" แต่ฉันไม่เข้าใจว่าทำไมมีความต้องการด่วนที่จะพูดว่า "พื้นที่คลิปที่เป็นเนื้อเดียวกัน" เมื่อใดที่พื้นที่คลิปไม่เป็นเนื้อเดียวกันและทำไมเราต้องแยกความแตกต่าง และสำหรับเรื่องนั้นมันหมายความว่าอะไรกันแน่ที่เราเรียกมันว่า "พื้นที่คลิปที่เป็นเนื้อเดียวกัน"? เป็นเนื้อเดียวกันเมื่อเทียบกับอะไร จุดยอด "เหมือนกันทั้งหมด" ในลักษณะใด
12 spaces 

1
มีขั้นตอนวิธีการหาเส้นทางที่จะจัดการประเภทการเคลื่อนไหวที่แตกต่างกันหรือไม่?
ฉันกำลังพัฒนาบอทสำหรับเกมกระดานจำลอง BattleTech http://en.wikipedia.org/wiki/BattleTechมันเปิดใช้แล้ว กระดานแบ่งออกเป็นหกเหลี่ยมแต่ละอันมีประเภทภูมิประเทศที่แตกต่างกันและระดับความสูง คุณขับหุ่นยนต์ที่เคลื่อนที่ข้ามมันเพื่อทำลายหุ่นยนต์ตัวอื่น ฉันรู้เพียงอัลกอริธึม Dijkstra และ A * แต่ปัญหาคือมีการเคลื่อนไหว 3 ประเภท: เดินวิ่งและกระโดดหกเหลี่ยมหลาย ๆ รูป (แต่ละอันมีกฎของตัวเอง) เดินและวิ่งเกือบจะเหมือนกัน เส้นทางที่ดีที่สุดอาจเป็นการผสมผสานหรือการเคลื่อนไหวแต่ละประเภท นี่คือตัวอย่างของแผนที่http://megamek.info/sites/default/files/isometric_view.png คุณรู้อัลกอริทึมที่ดีสำหรับการค้นหาเส้นทางที่ซับซ้อนหรือวิธีรวมผลลัพธ์ A * สำหรับการเคลื่อนไหวแต่ละประเภทหรือไม่

1
ฉันจะหยุดการแคชพื้นผิวแบบรันไทม์ของสารได้อย่างไร
พื้นผิวขั้นตอนการทำงานกับSubstance Engineดูเหมือนจะอัปเดตอย่างรวดเร็วหากคุณปิดการแคชแก้ไขตัวแปรที่เปิดเผยครั้งละหนึ่งตัวแก้ไขบ่อยครั้งและแม้หลังจากนั้นหลังจากที่คุณพยายามแก้ไข 2 หรือ 3 ครั้งเท่านั้น อย่างไรก็ตามฉันต้องการพื้นตรงข้าม ตัวอย่างเช่นหน่วยมีตัวแปร "เลือด" ที่สร้างเลือดแตกต่างกันไปตามที่พวกเขาได้รับความเสียหายเช่นเดียวกับตัวแปร "สวมใส่การต่อสู้" ที่สร้างรอยขีดข่วนและรอยบุบ แต่ไม่เปลี่ยนกลับเมื่อพวกเขารักษา RebuildTexturesImmediatelyดังนั้นจะบังคับตัวแปรที่จะไม่แคชผมต้องตั้งค่าให้ค่าหุ่นบางส่วนแล้วกลับมาเป็นปกติแล้วโทร ฉันจะบอกให้ Substance ไม่ทำการแคชตัวแปรในขณะใช้งานได้ดังนั้นฉันสามารถเปลี่ยนได้หนึ่งครั้งและทำให้พื้นผิวสร้างใหม่ได้อย่างรวดเร็ว

3
กล้องสำหรับเกม 2.5D
ฉันหวังว่าบางคนสามารถอธิบายสิ่งนี้กับฉันได้เหมือนฉันอายุ 5 ขวบเพราะฉันดิ้นรนกับสิ่งนี้เป็นเวลาหลายชั่วโมงและไม่สามารถเข้าใจสิ่งที่ฉันทำผิดได้ ฉันเขียนCameraชั้นเรียนสำหรับเกม 2.5D ของฉัน ความตั้งใจคือการสนับสนุนโลกและพื้นที่หน้าจอเช่นนี้: กล้องเป็นสีดำด้านขวา แกน + Z เลื่อนขึ้นด้านบนของภาพโดยให้ -Z ชี้ลง อย่างที่คุณเห็นทั้งอวกาศโลกและพื้นที่จอภาพมี (0, 0) ที่มุมบนซ้าย ฉันเริ่มเขียนการทดสอบหน่วยเพื่อพิสูจน์ว่ากล้องของฉันทำงานได้ตามที่คาดไว้และนั่นคือสิ่งที่เริ่มแปลก ... การทดสอบของฉันพล็อตพิกัดในโลกมุมมองและพื้นที่หน้าจอ ในที่สุดฉันจะใช้การเปรียบเทียบภาพเพื่อยืนยันว่าถูกต้อง แต่สำหรับตอนนี้การทดสอบของฉันเพิ่งแสดงผลลัพธ์ ตรรกะการเรนเดอร์ใช้Camera.ViewMatrixในการแปลงพื้นที่ของโลกเพื่อดูพื้นที่และCamera.WorldPointToScreenเพื่อแปลงพื้นที่โลกเป็นพื้นที่หน้าจอ นี่คือตัวอย่างทดสอบ: [Fact] public void foo() { var camera = new Camera(new Viewport(0, 0, 250, 100)); DrawingVisual worldRender; DrawingVisual viewRender; DrawingVisual screenRender; this.Render(camera, out worldRender, out viewRender, …
12 xna  matrix  projection 

4
ฉันจะหาทรงกลมที่ใหญ่ที่สุดที่อยู่ใน frustum ได้อย่างไร
คุณจะพบทรงกลมที่ใหญ่ที่สุดที่คุณสามารถวาดในมุมมองได้อย่างไร ดูจากด้านบนมันเป็นเช่นนี้: ที่เพิ่มเข้ามา: บน frustum ด้านขวาฉันได้ทำเครื่องหมายสี่จุดที่ฉันคิดว่าเรารู้อะไรเกี่ยวกับ เราสามารถปลดโปรเจ็กต์ทั้งแปดมุมของ frusum และศูนย์กลางของใกล้และไกลสุด เรารู้จุดที่ 1, 3 และ 4 เราก็รู้ว่าจุดที่ 2 คือระยะห่างเดียวกันจาก 3 เท่ากับ 4 จาก 3 ดังนั้นเราสามารถคำนวณจุดที่ใกล้ที่สุดในบรรทัดที่ 1 ถึง 4 ถึงจุดที่ 2 เพื่อให้ได้ ศูนย์? แต่คณิตศาสตร์และรหัสที่แท้จริงช่วยฉันได้ ฉันต้องการวาดแบบจำลอง (ซึ่งเป็นทรงกลมโดยประมาณและที่ฉันมีทรงกลมมินิบัสที่ล้อมรอบ) มีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้ อัปเดต: ฉันได้พยายามใช้แนวทาง incircle-on-two- planeตามที่Bobobobo และ Nathan Reed แนะนำ : function getFrustumsInsphere(viewport,invMvpMatrix) { var midX = viewport[0]+viewport[2]/2, …
12 geometry 

3
ฉันจะตั้งค่าแอปพลิเคชันของฉันให้ทำงานบน GPU ประสิทธิภาพสูงเป็นค่าเริ่มต้นได้อย่างไร
ปัจจุบันแล็ปท็อปจำนวนมากมาพร้อมกับ GPU 2 ตัวซึ่งเป็นรุ่นที่มีประสิทธิภาพสูงและรุ่นประหยัดพลังงานหนึ่งตัว (มีประสิทธิภาพน้อยลง) แอพพลิเคชั่นส่วนใหญ่ที่ฉันใช้บนแล็ปท็อปของฉันทำงานด้วย GPU ในตัว (ประหยัดพลังงาน) แต่ก็ยังมีบางส่วนที่เปิดไว้พร้อมการ์ดประสิทธิภาพสูง ฉันพยายามกำหนดค่าแอพที่ฉันกำลังสร้างเพื่อให้ทำงานบน GPU ประสิทธิภาพสูงโดยค่าเริ่มต้น แต่ฉันไม่สามารถหาข้อมูลเกี่ยวกับหัวข้อใดก็ได้ ฉันหวังว่าบางคนสามารถหลั่งน้ำตาของแสงนี้ ฉันจะแจกจ่ายแอปพลิเคชันของฉันด้วยโปรแกรมติดตั้ง NSIS และฉันเดาว่าฉันจะต้องเพิ่มเส้นทางของแอปพลิเคชันของฉันไปยังรายการแอปพลิเคชันสำหรับการ์ด NVidia / ATI แอปพลิเคชันได้รับการโปรแกรมใน C # นอกจากนี้ไม่มีใครรู้ว่าสิ่งที่ยืนอยู่กับเดสก์ทอปพีซี? จะเกิดอะไรขึ้นถ้าพีซีมี GPU 2 ตัวและฉันต้องเลือกอันทรงพลังมากขึ้น? Milcho
12 c#  gpu 

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