คำถามติดแท็ก floating-point

9
เกมที่กำหนดขึ้นมามีความเป็นไปได้อย่างไรในการเผชิญกับการไม่กำหนดระดับทศนิยม
เพื่อให้เกมเหมือนเครือข่าย RTS ฉันได้เห็นคำตอบมากมายที่นี่แนะนำให้ทำเกมที่กำหนดไว้อย่างสมบูรณ์ จากนั้นคุณจะต้องถ่ายโอนการกระทำของผู้ใช้ไปยังแต่ละอื่น ๆ และล่าช้าสิ่งที่ปรากฏเล็กน้อยเพื่อที่จะ "ล็อคใน" การป้อนข้อมูลของทุกคนก่อนที่จะแสดงเฟรมถัดไป ดังนั้นสิ่งต่าง ๆ เช่นตำแหน่งของยูนิตสุขภาพ ฯลฯ ไม่จำเป็นต้องได้รับการอัปเดตตลอดเวลาผ่านเครือข่ายเพราะการจำลองของผู้เล่นทุกคนจะเหมือนกันทุกประการ ฉันยังได้ยินสิ่งเดียวกันที่แนะนำสำหรับการทำรีเพลย์ อย่างไรก็ตามเนื่องจากการคำนวณจุดลอยตัวนั้นไม่ได้ถูกกำหนดระหว่างเครื่องหรือแม้แต่ระหว่างการรวบรวมโปรแกรมเดียวกันบนเครื่องเดียวกันสิ่งนี้เป็นไปได้จริงหรือ เราจะป้องกันความจริงที่ว่าทำให้เกิดความแตกต่างเล็กน้อยระหว่างผู้เล่น (หรือไกล) ที่กระเพื่อมตลอดทั้งเกมได้อย่างไร ฉันได้ยินบางคนแนะนำให้หลีกเลี่ยงจำนวนจุดลอยตัวทั้งหมดและใช้intเพื่อแสดงความฉลาดของเศษส่วน แต่นั่นไม่ได้ฟังดูเป็นประโยชน์สำหรับฉัน - ถ้าฉันต้องการตัวอย่างเช่นถ่ายมุมโคไซน์ของมุม? ฉันจำเป็นต้องเขียนห้องสมุดคณิตศาสตร์ทั้งหมดใหม่หรือไม่? โปรดทราบว่าฉันสนใจ C # เป็นหลักซึ่งเท่าที่ฉันสามารถบอกได้มีปัญหาเหมือนกับ C ++ ในเรื่องนี้

8
ฉันจะทำการจำลองทางฟิสิกส์ที่กำหนดขึ้นได้อย่างไร
ฉันกำลังสร้างเกมฟิสิกส์ที่เกี่ยวข้องกับวัตถุแข็งเกร็งซึ่งผู้เล่นเคลื่อนย้ายชิ้นส่วนและชิ้นส่วนเพื่อไขปริศนา / แผนที่ สิ่งสำคัญอย่างยิ่งของเกมคือเมื่อผู้เล่นเริ่มทำการจำลองสถานการณ์มันจะทำงานแบบเดียวกันทุกที่โดยไม่คำนึงถึงระบบปฏิบัติการตัวประมวลผลและอื่น ๆ ... มีห้องสำหรับความซับซ้อนจำนวนมากและการจำลองอาจทำงานเป็นเวลานานดังนั้นจึงเป็นเรื่องสำคัญที่เอนจิ้นฟิสิกส์จะกำหนดอย่างสมบูรณ์เกี่ยวกับการทำงานของจุดลอยตัวมิฉะนั้นวิธีแก้ปัญหาอาจปรากฏขึ้นเพื่อ "แก้ปัญหา" บนเครื่องของผู้เล่นคนหนึ่งและ "ล้มเหลว" กับอีกรายการหนึ่ง ฉันจะบรรลุระดับนี้ในเกมของฉันได้อย่างไร ฉันยินดีที่จะใช้กรอบและภาษาที่หลากหลายรวมถึง Javascript, C ++, Java, Python และ C # ฉันถูกล่อลวงโดย Box2D (C ++) เช่นเดียวกับภาษาอื่นที่เทียบเท่าเนื่องจากดูเหมือนว่าจะตอบสนองความต้องการของฉัน แต่มันขาดการกำหนดจุดลอยตัวโดยเฉพาะอย่างยิ่งกับฟังก์ชันตรีโกณมิติ ตัวเลือกที่ดีที่สุดที่ฉันเคยเห็นมาแล้วนั้นเทียบเท่ากับ Java ของ Box2D (JBox2D) ดูเหมือนจะใช้ความพยายามในการกำหนดระดับจุดลอยตัวโดยใช้StrictMathมากกว่าMathสำหรับการใช้งานหลายอย่าง แต่ก็ไม่มีความชัดเจนว่าเอ็นจิ้นนี้จะรับประกันทุกสิ่งที่ฉันต้องการเพราะฉันยังไม่ได้สร้างเกม เป็นไปได้ที่จะใช้หรือดัดแปลงเอ็นจิ้นที่มีอยู่เพื่อให้เหมาะกับความต้องการของฉันหรือไม่? หรือฉันจะต้องสร้างเครื่องยนต์ด้วยตัวเอง? แก้ไข: ข้ามส่วนที่เหลือของโพสต์นี้ถ้าคุณไม่สนใจว่าทำไมใครบางคนถึงต้องการความแม่นยำเช่นนี้ บุคคลในความคิดเห็นและคำตอบดูเหมือนจะเชื่อว่าฉันกำลังมองหาบางสิ่งที่ฉันไม่ควรทำเช่นนี้ฉันจะอธิบายเพิ่มเติมเกี่ยวกับวิธีการทำงานของเกม ผู้เล่นจะได้รับจิ๊กซอว์หรือระดับซึ่งมีอุปสรรคและเป้าหมาย เริ่มแรกการจำลองไม่ทำงาน จากนั้นพวกเขาสามารถใช้ชิ้นส่วนหรือเครื่องมือที่ให้ไว้เพื่อสร้างเครื่องจักร เมื่อพวกเขากดเริ่มการจำลองจะเริ่มขึ้นและพวกเขาจะไม่สามารถแก้ไขเครื่องได้อีกต่อไป หากเครื่องแก้แผนที่ผู้เล่นได้เอาชนะระดับ ไม่เช่นนั้นพวกเขาจะต้องกดหยุดปรับเปลี่ยนเครื่องแล้วลองอีกครั้ง เหตุผลที่ทุกอย่างจำเป็นต้องกำหนดขึ้นเพราะฉันวางแผนที่จะสร้างรหัสที่จะแมปเครื่องทุกเครื่อง (ชุดของชิ้นส่วนและเครื่องมือที่พยายามแก้ปัญหาระดับ) ไปยังไฟล์ xml หรือ …

3
ค่าความเร็วที่ไม่ใช่จำนวนเต็ม - มีวิธีที่สะอาดกว่านี้ไหม
บ่อยครั้งที่ฉันต้องการใช้ค่าความเร็วเช่น 2.5 สำหรับการย้ายตัวละครของฉันในเกมที่ใช้พิกเซล การตรวจจับการชนโดยทั่วไปจะทำได้ยากขึ้นหากฉันทำเช่นนั้น ดังนั้นฉันเลยทำอะไรแบบนี้: moveX(2); if (ticks % 2 == 0) { // or if (moveTime % 2 == 0) moveX(1); } ฉันประจบประแจงอยู่ข้างในทุกครั้งที่ฉันต้องเขียนมันมีวิธีที่สะอาดกว่าในการย้ายตัวละครที่มีค่าความเร็วที่ไม่ใช่จำนวนเต็มหรือฉันจะยังคงติดอยู่กับเรื่องนี้ตลอดไปหรือไม่?

1
ใน Unreal ความแตกต่างระหว่าง C ++ กับ float คือ FFloat32 คืออะไร?
ฉันพยายามที่จะเรียนรู้บางแง่มุมที่ลึกซึ้งยิ่งขึ้นของ UE4 และในขณะที่อ่านรหัสตัวอย่างจำนวนมากและยังเป็นแหล่งที่มาของเครื่องยนต์ฉันสังเกตว่าบางครั้งผู้คน (และซอร์สโค้ดมาก) ใช้มาตรฐานfloatดั้งเดิมC ++ แต่บางครั้งก็ใช้FFloat32. ถ้าอย่างนั้นฉันอยากรู้ว่า: เมื่อเขียนโปรแกรมเกมด้วย Unreal อะไรคือความแตกต่างระหว่างการใช้ 2 ตัวเลือกเหล่านี้และสิ่งที่เป็นกรณีหลักที่ควรวางมาตรฐานดั้งเดิม C ++ แบบดั้งเดิมเพื่อการใช้งานของเครื่องยนต์

3
อะไรเป็นสาเหตุของ“ การพลัดตกจากโลก” และอะไรทำให้มันคงที่
เกม 3D ยุคต้นจำนวนมากมีปัญหาที่คุณต้องคลุกเคล้าอย่างสนุกสนานและทันใดนั้นทุกอย่างก็เป็นสีดำพร้อมเกาะที่ดูเหมือนเปลือกหอยด้านหน้าของฉากที่คุณกำลังเดินทะลุเข้าไปในระยะทางด้านบน เพราะคุณหลุดโลก ฉันจำได้ว่านี่เป็นปัญหาพิเศษและยาวนานสำหรับ Bethesda Softworks แม้ว่าพวกเขาจะไม่ได้อยู่คนเดียว เป็นเวลานานแล้วที่ข้าเห็นมันในป่าดังนั้นดูเหมือนว่าเราจะผ่านมันไปแล้ว คำถามของฉันเป็นสองส่วน 1) อะไรคือสาเหตุหรือสาเหตุของสิ่งนี้ (ฉันเดาว่ามันเกี่ยวกับตะเข็บที่มีความแม่นยำของจุดลอยตัวระหว่างรูปหลายเหลี่ยมการโต้ตอบกับตำแหน่งของตัวละครที่มีจุดแบบจำลองนั่นคือชั้นของพื้น A สิ้นสุดที่ตำแหน่ง 1.0, พื้นของพื้น B เริ่มที่ 0.9998 และสำหรับตำแหน่งของคุณ 0.99992 และบูมคุณล้มลงไปทั่วโลก แต่นั่นเป็นเพียงการคาดเดา) 2) มันได้รับการแก้ไขอย่างไร

3
ระดับ“ ญาติ” ที่ใหญ่ที่สุดที่ฉันสามารถใช้ในการลอยคืออะไร
เช่นเดียวกับที่แสดงให้เห็นด้วยเกมอย่าง dungeon siege และ KSP ระดับที่มากพอที่จะเริ่มมีข้อบกพร่องเนื่องจากวิธีการทำงานของ floating point คุณไม่สามารถเพิ่ม 1e-20 ถึง 1e20 โดยไม่สูญเสียความแม่นยำ หากฉันเลือกที่จะ จำกัด ขนาดของระดับฉันจะคำนวณความเร็วต่ำสุดที่วัตถุของฉันสามารถเคลื่อนที่ได้จนกว่าจะเริ่มขาด ๆ หาย ๆ ได้อย่างไร

5
ฉันจะพูดคุยเกี่ยวกับอัลกอริธึมบรรทัดของ Bresenham ไปยังจุดลอยตัวได้อย่างไร
ฉันพยายามรวมสองสิ่งเข้าด้วยกัน ฉันกำลังเขียนเกมและฉันจำเป็นต้องกำหนดสี่เหลี่ยมกริดที่วางอยู่บนเส้นตรงกับจุดสิ้นสุดของจุดลอยตัว ยิ่งกว่านั้นฉันต้องการมันเพื่อรวมสี่เหลี่ยมกริดทั้งหมดที่มันแตะ (เช่นไม่ใช่แค่เส้นของ Bresenhamแต่เป็นสีน้ำเงิน): มีใครให้ข้อมูลเชิงลึกเกี่ยวกับวิธีการใช้หรือไม่ วิธีแก้ปัญหาที่ชัดเจนคือการใช้อัลกอริธึมแบบไร้เดียงสา แต่มีบางสิ่งที่ได้รับการปรับให้เหมาะสมที่สุด (เร็วกว่า)?

1
ความแม่นยำจุดลอยตัว (fp: แม่นยำกับ fp: เร็ว)
ใน C หรือ C ++ ตัวเลือกคอมไพเลอร์ของความแม่นยำจุดลอยตัวสร้างความแตกต่างในเกมในโลกแห่งความเป็นจริง (เล็ก / อินดี้) หรือไม่? จากการสังเกตของฉันการตั้งค่า fp: เร็วเร็วกว่า fp: แม่นยำหลายเท่าและจากสิ่งที่ฉันเข้าใจที่นี่ ( /programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-เผชิญหน้า ) ความแตกต่างที่แม่นยำระหว่างตัวเลือกคอมไพเลอร์สองตัวจะเปลี่ยนจากตัวเลขหลักที่ 16 ของตัวเลขทศนิยมเท่านั้น มีใครพบตัวอย่างเมื่อใช้ fp: ผิดอย่างรวดเร็วสำหรับเกม 2D หรือ 3D หรือไม่? แก้ไข: เพื่อความกระจ่างแจ้งฉันไม่ได้ถามเกี่ยวกับความแม่นยำของค่าจุดลอยตัวด้วยตนเอง (เช่น float vs double และทศนิยม) ความแม่นยำเกี่ยวกับตัวเลือกคอมไพเลอร์เท่านั้น
10 c++  c  floating-point 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.