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

เหตุการณ์คือการกระทำที่มักเกิดขึ้น "ภายนอก" ของเธรดโปรแกรมหลัก แต่จัดการอยู่ภายใน

8
การสื่อสารที่ขับเคลื่อนด้วยเหตุการณ์ใน Game Engine: ใช่หรือไม่ใช่
ฉันกำลังอ่านGame Coding Completeและผู้เขียนแนะนำให้ใช้การสื่อสาร Event Drivenระหว่างวัตถุและโมดูลเกม โดยพื้นฐานแล้วนักแสดงเกมที่มีชีวิตทุกคนควรสื่อสารกับโมดูลหลัก (Physics, AI, Game Logic, Game View, ฯลฯ ) ผ่านระบบการส่งข้อความเหตุการณ์ภายใน ซึ่งหมายความว่าต้องออกแบบผู้จัดการเหตุการณ์ที่มีประสิทธิภาพ ระบบที่ออกแบบมาไม่ดีจะกินซีพียูเป็นวงรอบ นี่เป็นแนวทางที่ได้รับการพิสูจน์แล้วหรือไม่? ฉันจะตัดสินใจได้อย่างไรว่าจะใช้หรือไม่

3
ฉันและวิธีแยกความกังวลของอินพุตและออบเจ็กต์เกมหรือไม่?
ในทุก ๆ เกมผู้พัฒนาจะต้องจัดการกับอินพุทอย่างใดอย่างหนึ่งอาจเป็นเหตุการณ์แป้นพิมพ์และเมาส์อย่างง่ายเหตุการณ์ที่สัมผัสหรือบางสิ่งบางอย่างที่เป็นอินพุท accelerometer การป้อนข้อมูลนี้โดยตรงของผลกระทบทางอ้อมวัตถุในเกม บางครั้งอินพุตเดียวกันอาจมีผลต่อวัตถุต่างกัน ตอนนี้ฉันกำลังคิดเกี่ยวกับวิธีการสร้างแบบจำลองนี้ วิธีที่ฉันเห็นมันมีสองวิธีที่ต่างกัน ปล่อยให้ตัวเกมจัดการกับมันเองสมัครรับกิจกรรมและเรียกมันว่าเป็นวิธีการของตัวเอง นี่เป็นข้อได้เปรียบของการปล่อยให้วัตถุในเกมตัดสินใจเองว่าปัจจัยใดที่ทำให้เกิดการกระทำ ข้อเสียดูเหมือนจะเป็นรหัสที่ได้รับ mangled ด้วยรหัสวัตถุเกม "หลัก" นอกจากนี้วัตถุในเกมยังไม่ได้รับรู้ถึงสถานะของเกมที่เหลือและบางครั้งก็ไม่ควรทำตามเหตุการณ์ที่ป้อนเข้ามา ดูเหมือนจะไม่ถูกต้อง มีตัวควบคุมอินพุตทั่วไปดูแลอินพุตทั้งหมดและตัดสินใจว่าใครจะได้รับการจัดการกับเหตุการณ์ใด ดูเหมือนว่าจะแยกข้อกังวลออกจากกันดีกว่า แต่ก็จับคู่คลาสควบคุมอินพุตกับเกมวัตถุ จำเป็นต้องรู้ว่าใครต้องการรับเหตุการณ์ใดและอยู่ในสถานะใด สิ่งนี้ดูไม่ถูกต้องเช่นกัน คุณใช้กลยุทธ์อะไรในการจัดการสิ่งนี้?

3
การป้อนข้อมูลที่ขับเคลื่อนด้วยเหตุการณ์ Polling
ฉันกำลังพัฒนาเกมโดยใช้การสำรวจสำหรับวิธีการป้อนข้อมูล อย่างไรก็ตามตอนนี้ฉันกำลังขุดลึกลงไปในเมนูเกมและส่วนประกอบ UI อื่น ๆ ฉันพบว่าฉันอาจต้องการป้อนข้อมูลที่ขับเคลื่อนด้วยเหตุการณ์ บางทีอาจจะมีทั้งคู่โดยใช้เหตุการณ์ที่ขับเคลื่อนด้วย UI และการหยั่งเสียงสำหรับอินพุต "โลก" ฉันอยากรู้ว่าวิธีที่ดีที่สุดที่จะไปคืออะไร ฉันกำหนดโพลเป็น: แต่ละลูปการอัปเดตฉันจะตรวจสอบว่ามีการกดปุ่มใดที่เมาส์อยู่ปุ่มกดจากนั้นทำงานผ่านพวกเขาและดำเนินการตามข้อมูลที่รวบรวมไว้ ฉันกำลังกำหนดกิจกรรมที่ขับเคลื่อนเป็น: เหตุการณ์ตามอินเตอร์รัปต์เมื่อมีเหตุการณ์เกิดขึ้นและถูกขัดจังหวะและมีการเรียกใช้โค้ดบล็อกตามเหตุการณ์ คุณคิดว่าเป็นการดีที่สุดหรือไม่ที่จะผลักดันเหตุการณ์ทั้งหมดการเลือกตั้งทั้งหมดหรือเป็นการรวมกันของทั้งสองอย่าง หากคุณมีข้อดีข้อเสียกรุณาระบุไว้ ขอบคุณ แก้ไข เกมนี้ใช้ Java / OpenGL ดังนั้นจะวางจำหน่ายใน Windows / Mac / Linux ความเป็นไปได้ของการขยายไปยังอุปกรณ์มือถือนั้นอยู่ในระดับต่ำ เกมดังกล่าวเป็นสไตล์ RTS, บุคคลที่สาม 3D แก้ไข 2 ฉันยังคงไม่มีความสุขกับวิธีที่ฉันใช้สิ่งนี้ แต่สิ่งที่ฉันกำลังมุ่งไปคือการจับกิจกรรมใน UI ของฉันและหากพวกเขาไม่ได้รับการจัดการโดยองค์ประกอบ UI ใด ๆ ของฉันฉันจะส่งต่อเหตุการณ์ไปยัง "โลก" สำหรับการเลือก / การเลือก สิ่งที่ต้องการ: @Override …
19 java  input  events  polling 

12
ฉันจะมั่นใจได้อย่างไรว่าชิ้นส่วนของรหัสทำงานเพียงครั้งเดียว
ฉันมีรหัสบางอย่างที่ฉันต้องการเรียกใช้เพียงครั้งเดียวแม้ว่าสถานการณ์ที่เรียกรหัสนั้นอาจเกิดขึ้นหลายครั้ง ตัวอย่างเช่นเมื่อผู้ใช้คลิกเมาส์ฉันต้องการคลิกสิ่ง: void Update() { if(mousebuttonpressed) { ClickTheThing(); // I only want this to happen on the first click, // then never again. } } อย่างไรก็ตามด้วยรหัสนี้ทุกครั้งที่ฉันคลิกเมาส์สิ่งที่ได้รับการคลิก ฉันจะทำให้มันเกิดขึ้นเพียงครั้งเดียวได้อย่างไร

3
วิธีหลีกเลี่ยงรูปแบบซิงเกิลสำหรับ Event Scheduler
ฉันต้องการสร้าง Event scheduler สำหรับเกมของฉันโดยพื้นฐานแล้วฉันต้องการที่จะสามารถกำหนดตารางเวลาการเรียกเหตุการณ์ของเกมได้ นี่อาจเป็นทริกเกอร์ครั้งเดียวหรือทริกเกอร์เป็นระยะ (เหตุการณ์ทริกเกอร์ "E_BIG_EXPLOSION" เป็นเวลา 5 วินาที ... ) มันน่าดึงดูดที่จะคิดว่านี่อาจเป็นสถานที่ที่ดีในการใช้ซิงเกิลตัน แต่ซิงเกิลนั้นค่อนข้างชั่วร้ายและพวกเขามักจะแพร่กระจายอย่างโรค ... ดังนั้นฉันจึงพยายามหลีกเลี่ยงพวกเขาทั้งหมด คุณจะเสนอการออกแบบแบบใดเพื่อหลีกเลี่ยงการใช้งานแบบซิงเกิลในกรณีนี้

3
วิธีที่ดีที่สุดในการจัดการกิจกรรมในเกม?
ฉันทำงานในเกมที่มีกิจกรรมในเกมบางอย่างที่ต้องเกิดขึ้นเป็นครั้งคราว ตัวอย่างที่ดีน่าจะเป็นการสอน คุณเริ่มเกมและมีหลายเหตุการณ์ในเกมที่เกิดขึ้น: คุณพบศัตรูคนแรกเกมหยุดและคุณได้รับคำอธิบายเกี่ยวกับวิธีฆ่ามัน คุณฆ่าศัตรูคนแรกคุณได้รับข้อความ "ดีมาก" คุณได้รับไอเท็มใหม่เมนูพร้อมป๊อปอัพไอเท็มสถิติ ฯลฯ เกมที่ฉันกำลังทำอยู่เป็นเกมปริศนาที่กฎในเกมค่อนข้างเหมือนกันทั้งหมดดังนั้นจึงไม่มีประสิทธิภาพในการเข้ารหัสเหตุการณ์ทั้งหมดเหล่านี้ในระดับที่ต่างกัน ฉันควรกำหนดเหตุการณ์เหล่านี้ในแหล่งภายนอกเช่น XML หรือไม่ จากนั้นเขียนล่ามที่อ่านค่า XML และตั้งค่าข้อกำหนดเหตุการณ์สำหรับระดับ ฉันไม่แน่ใจว่าฉันจะกำหนดเหตุการณ์ที่จะเกิดขึ้นได้อย่างไรเมื่อคุณฆ่าศัตรูสองคน เพียงเพื่อความชัดเจนฉันไม่ได้มองหาภาษาการเขียนโปรแกรมที่ดีที่สุดหรือภาษาสคริปต์ในการทำสิ่งนี้ แต่ยังมีวิธีการที่ดีที่สุดในการจัดการสิ่งนี้ ขอบคุณ! แก้ไข: ตัวอย่างที่สองเนื่องจากคำถามของฉันค่อนข้างเข้าใจยาก: ปัญหาที่ฉันมีคือการเพิ่มการกระทำบางอย่างในเกมในขั้นตอนที่ค่อนข้างเหมือนกันเสมอ เช่นเดียวกับการต่อสู้สวมบทบาท RPG ทุกคนมีเทิร์นเลือกทักษะและอื่น ๆ - มันเหมือนเดิมเสมอ แต่จะเกิดอะไรขึ้นถ้ามีกรณีที่ฉันต้องการแสดงภาพตัดคำบางแห่งระหว่างนั้น Modyfing โครงสร้างเกมทั้งหมดเพื่อผ่านไปในคลาสการต่อสู้ที่เปลี่ยนแปลงด้วย cutscene ที่รวมอยู่ดูเหมือนว่าไม่มีประสิทธิภาพมาก ฉันสงสัยว่าจะทำเช่นนี้ได้อย่างไร

5
การจัดการระบบป้อนข้อมูลด้วยแป้นพิมพ์
หมายเหตุ: ฉันต้องสำรวจแทนที่จะโทรกลับเนื่องจากข้อ จำกัด API (SFML) ฉันยังขอโทษที่ไม่มีชื่อ 'ที่เหมาะสม' ฉันคิดว่าฉันมีสองคำถามที่นี่; วิธีการลงทะเบียนข้อมูลที่ฉันได้รับและจะทำอย่างไรกับมัน การจัดการอินพุต ฉันกำลังพูดถึงหลังจากที่คุณได้ลงทะเบียนว่ามีการกดแป้น 'A' ตัวอย่างเช่นและวิธีการทำจากที่นั่น ฉันเคยเห็นชุดแป้นพิมพ์ทั้งหมดเช่น: bool keyboard[256]; //And each input loop check the state of every key on the keyboard แต่ดูเหมือนว่าจะไม่มีประสิทธิภาพ ไม่เพียง แต่คุณจะมีการเชื่อมต่อปุ่ม 'A' ถึง 'ผู้เล่นที่เลื่อนไปทางซ้าย' แต่มันจะตรวจสอบทุก ๆ 30-60 ครั้งต่อวินาที ฉันลองระบบอื่นซึ่งเพิ่งค้นหากุญแจที่ต้องการ std::map< unsigned char, Key> keyMap; //Key stores the keycode, and …

2
ฉันจะบ้าไปกับ Event Handlers ได้ไหม? ฉันกำลังจะ“ ผิดไป” กับการออกแบบของฉันหรือไม่?
ฉันเดาฉันตัดสินใจว่าฉันชอบตัวจัดการเหตุการณ์ ฉันอาจกำลังทุกข์ทรมานเล็กน้อยจากการวิเคราะห์อัมพาต แต่ฉันกังวลเกี่ยวกับการทำให้การออกแบบของฉันยุ่งเหยิงหรือวิ่งไปสู่ผลลัพธ์ที่ไม่คาดฝันอื่น ๆ ต่อการตัดสินใจออกแบบของฉัน เอ็นจิ้นเกมของฉันทำการเรนเดอร์พื้นฐานโดยใช้กล้องส่ายกล้อง การออกแบบของฉันมีลักษณะเช่นนี้: SceneHandler มีรายการคลาสที่ใช้อินเตอร์เฟส SceneListener (ปัจจุบันเป็น Sprites เท่านั้น) โทร render () หนึ่งครั้งต่อหนึ่งขีดและส่ง onCameraUpdate (); ข้อความถึง SceneListeners InputHandler โพลอินพุตหนึ่งครั้งต่อหนึ่งขีดและส่งข้อความ "onKeyPressed" ธรรมดาไปยัง InputListeners ฉันมี Camera InputListener ซึ่งเก็บอินสแตนซ์ของ SceneHandler และทริกเกอร์ updateCamera (); เหตุการณ์ขึ้นอยู่กับสิ่งที่ป้อนเข้า AgentHandler เรียกการกระทำเริ่มต้นใน Agent (AI) หนึ่งครั้งต่อหนึ่งขีดและจะตรวจสอบสแต็กสำหรับเหตุการณ์ใหม่ใด ๆ ที่ลงทะเบียนโดยส่งไปยังตัวแทนที่เฉพาะเจาะจงตามความจำเป็น ดังนั้นฉันจึงมีวัตถุสไปรต์ขั้นพื้นฐานที่สามารถเคลื่อนที่ไปรอบ ๆ ฉากและใช้พฤติกรรมการขับขี่แบบพื้นฐานเพื่อเดินทาง ฉันได้รับการตรวจจับการชนกันและนี่คือที่ฉันไม่แน่ใจว่าทิศทางการออกแบบของฉันเป็นไปได้ดี เป็นการดีหรือไม่ที่จะมีตัวจัดการเหตุการณ์ขนาดเล็กจำนวนมาก? ฉันคิดว่าจะเป็นอย่างที่ฉันจะต้องใช้ CollisionHandler บางประเภท …

4
รูปแบบบันทึกเกมสำหรับเซิร์ฟเวอร์ MMO
บันทึกเหตุการณ์ของเกม (ตรงข้ามกับบันทึกข้อผิดพลาด / การดีบัก) สำหรับทั้งคลัสเตอร์ / ส่วนแบ่งมีประโยชน์อย่างมากสำหรับ MMO เชิงพาณิชย์ที่อยู่ในสภาพแวดล้อมการผลิตจริงให้การสนับสนุนที่สำคัญสำหรับการบริการลูกค้าและวิธีการวิเคราะห์ประวัติ โครงการที่ฉันกำลังใช้งานอยู่ในปัจจุบันใช้ฐานข้อมูลเชิงสัมพันธ์เพื่อจัดเก็บบันทึกเหตุการณ์ของเกมทั้งหมดและในขณะที่วิธีดังกล่าวใช้งานได้ดีดูเหมือนว่าฉันจะอ่านได้อย่างเดียวเท่านั้น . ฉันไม่แน่ใจว่าจะเริ่มเรียนรู้เกี่ยวกับการสร้างรูปแบบแฟ้มบันทึกไบนารีแบบกำหนดเองได้อย่างไร ประสบการณ์ของคุณในการสร้างรูปแบบบันทึกที่กำหนดเองหรือบทความ / บทความที่แนะนำในหัวข้อนั้นคืออะไร

5
อินพุตแบบซ้อนในระบบที่ขับเคลื่อนโดยเหตุการณ์
ฉันใช้ระบบจัดการการป้อนข้อมูลตามเหตุการณ์กับกิจกรรมและผู้รับมอบสิทธิ์ ตัวอย่าง: InputHander.AddEvent(Keys.LeftArrow, player.MoveLeft); //Very simplified code อย่างไรก็ตามฉันเริ่มสงสัยเกี่ยวกับวิธีจัดการกับอินพุต 'ซ้อน' ยกตัวอย่างเช่นใน Half-Life 2 (หรือเกมใด ๆ ที่มาจริงๆ) Eคุณสามารถเลือกรายการที่มี เมื่อคุณหยิบรายการขึ้นมาคุณจะไม่สามารถยิงได้Left Mouseแต่คุณจะโยนวัตถุแทน Spaceคุณยังสามารถกระโดดด้วย (ฉันกำลังบอกว่าการป้อนข้อมูลแบบซ้อนเป็นที่ที่คุณกดแป้นบางอย่างและการกระทำที่คุณสามารถทำได้เปลี่ยนเมนูไม่ใช่) สามกรณีคือ: ความสามารถในการกระทำเช่นเดียวกับเมื่อก่อน (เช่นการกระโดด) ไม่สามารถทำการกระทำเดียวกัน (เช่นการยิง) การกระทำที่แตกต่างอย่างสิ้นเชิง (เช่นใน NetHack ซึ่งการกดปุ่มเปิดประตูหมายความว่าคุณไม่เคลื่อนไหว แต่เลือกทิศทางเพื่อเปิดประตูเข้า) แนวคิดดั้งเดิมของฉันคือเปลี่ยนเพียงหลังจากได้รับอินพุต: Register input 'A' to function 'Activate Secret Cloak Mode' In 'Secret Cloak Mode' function: Unregister input 'Fire' Unregister input …

4
ฟังก์ชั่นแบบต่อเฟรมการโทรและการส่งข้อความที่ขับเคลื่อนด้วยเหตุการณ์ในการออกแบบเกม
การออกแบบเกมแบบดั้งเดิมอย่างที่ฉันรู้นั้นใช้ความหลากหลายและฟังก์ชั่นเสมือนจริงเพื่ออัพเดทสถานะของเกม กล่าวอีกนัยหนึ่งชุดฟังก์ชั่นเสมือนจริงจะถูกเรียกในช่วงเวลาปกติ (เช่น: ต่อเฟรม) ในทุกวัตถุในเกม เมื่อเร็ว ๆ นี้ฉันค้นพบว่ามีอีกระบบการส่งข้อความที่ขับเคลื่อนด้วยเหตุการณ์เพื่อปรับปรุงสถานะของวัตถุเกม ที่นี่วัตถุมักจะไม่ได้รับการปรับปรุงในแต่ละเฟรม แต่จะมีการสร้างระบบการส่งข้อความเหตุการณ์ที่มีประสิทธิภาพสูงและวัตถุเกมจะได้รับการอัพเดตหลังจากได้รับข้อความเหตุการณ์ที่ถูกต้องเท่านั้น จัดกิจกรรมขับเคลื่อนสถาปัตยกรรมเกมจะอธิบายได้ดีใน: เกมการเข้ารหัสที่สมบูรณ์โดยไมค์แมคชาฟฟรี ฉันขอความช่วยเหลือจากคำถามต่อไปนี้: อะไรคือข้อดีและข้อเสียของทั้งสองวิธีคืออะไร? อันไหนดีกว่าอีกอัน? การออกแบบเกมเป็นไปตามหลักสากลและดีกว่าในทุก ๆ ด้านหรือไม่? ดังนั้นจึงแนะนำให้ใช้งานแม้ในแพลตฟอร์ม mombile? อันไหนมีประสิทธิภาพมากขึ้นและยากต่อการพัฒนา เพื่อชี้แจงคำถามของฉันไม่ได้เกี่ยวกับการลบความหลากหลายโดยสิ้นเชิงจากการออกแบบเกม ฉันเพียงต้องการที่จะเข้าใจความแตกต่างและผลประโยชน์จากการใช้การส่งข้อความที่ขับเคลื่อนด้วยเหตุการณ์และการโทรปกติ (ต่อเฟรม) ไปยังฟังก์ชั่นเสมือนจริงเพื่ออัปเดตสถานะเกม ตัวอย่าง: คำถามนี้ทำให้เกิดความขัดแย้งเล็กน้อยที่นี่ดังนั้นฉันขอเสนอตัวอย่าง: ตาม MVC เครื่องมือเกมแบ่งออกเป็นสามส่วนหลัก: Application Layer (การสื่อสารของฮาร์ดแวร์และระบบปฏิบัติการ) เกมลอจิก มุมมองเกม ในเกมแข่งรถ Game View รับผิดชอบในการแสดงผลหน้าจอโดยเร็วที่สุดอย่างน้อย 30 เฟรมต่อวินาที Game View รับฟังอินพุตของผู้เล่นด้วย ตอนนี้สิ่งนี้เกิดขึ้น: ผู้เล่นกดแป้นคันเร่งเป็น 80% GameView สร้างข้อความ "เหยียบเชื้อเพลิงรถยนต์ …

2
เทคนิคที่ดีสำหรับการซิงค์การกระทำการเล่นเกมกับการกำหนดเวลาของภาพเคลื่อนไหวที่เฉพาะเจาะจงหรือไม่
ดังนั้นฉันจึงเจอปัญหาในเกมที่ฉันกำลังดำเนินการอยู่ แต่ดูเหมือนว่าจะเป็นสิ่งพื้นฐานที่สวยที่อาจเกิดขึ้นในเกมจำนวนมาก เกมของฉันต้องการให้ฟังก์ชั่นการเล่นเกมบางอย่างเกิดขึ้นในช่วงเวลาที่เฉพาะเจาะจงระหว่างภาพเคลื่อนไหวของตัวละคร และอย่างที่ชื่อบอกไว้ฉันสงสัยว่าอะไรคือเทคนิคที่ดีและกลยุทธ์พื้นฐานในการซิงโครไนซ์เหตุการณ์ / ฟังก์ชั่น / การกระทำที่เกี่ยวข้องกับการเล่นเกมไปยังจุดที่เฉพาะเจาะจงในภาพเคลื่อนไหวของตัวละคร นี่คือตัวอย่างง่ายๆของสิ่งที่ฉันพูดถึงในเกมประเภทต่างๆ: ตัวละครของคุณโหลดปืนของพวกเขาในนักกีฬา ตัวละครของคุณเล่นภาพเคลื่อนไหว 'รีโหลด' ของเขา / เธอ แต่สิ่งสำคัญคือฟังก์ชั่นที่ตั้งค่าตัวแปรแอมโมปัจจุบันนั้นจะเรียกเฉพาะในช่วงเวลาที่แน่นอนหลังจากที่นิตยสารเปลี่ยนเป็นและปืนถูกง้าง นี่อาจเป็นจุดที่อยู่ตรงกลางของภาพเคลื่อนไหวโหลดซ้ำ ในเทิร์นอิงเบสตัวละครของคุณจะยืนเป็นเส้นตรงตามแนวของศัตรู เมื่อได้รับคำสั่งให้โจมตีหนึ่งในตัวละครของคุณจะวิ่ง / กระโดดขึ้นไปถึงหนึ่งในศัตรูและฟันดาบยักษ์ของพวกเขาก่อนที่จะวิ่ง / กระโดดกลับไปที่ที่ยืนของพวกเขา คุณต้องการตรวจสอบให้แน่ใจว่าศัตรูได้รับความเสียหายในช่วงเวลาที่แน่นอนที่มีการเล่นอนิเมชั่นอย่างเจ็บแสบ - บางจุดระหว่างวิ่งขึ้นและวิ่งกลับ ในเกมลับ ๆ ล่อๆตัวละครของคุณสามารถแอบและโต้ตอบกับคอมพิวเตอร์และปุ่มต่าง ๆ ในโลก อาจมีปุ่มที่ปิดแหล่งจ่ายไฟให้กับไฟหน้าด่านที่คุณกำลังแทรกซึมอยู่ เมื่อกดปุ่มแอ็คชันตัวละครของคุณจะยื่นออกมาแล้วกดปุ่มจากนั้นกลับสู่ท่าทางที่ไม่ได้ใช้งาน คุณต้องการปิดไฟที่จุดที่แน่นอนในภาพเคลื่อนไหว 'push_button' เมื่อกดปุ่ม กรณีของฉันเป็นที่ยอมรับมากที่สุดเป็นตัวอย่างที่สองซึ่งฉันได้สร้างแอนิเมชั่นที่ตัวละครที่หันตามตัวฉันพุ่งไปข้างหน้าในระหว่างการโจมตีและฉันต้องการความเสียหายที่จะนำมาใช้ในช่วงเวลาที่แน่นอนว่า . เพราะเกมของฉันใช้ระบบเทิร์นเบส (ลองนึกภาพบางอย่างเช่นไฟนอลแฟนตาซีหรือไฟร์เอมเบลม) ฉันต้องการความเสียหาย / การรักษา / เวทมนต์ / ฯลฯ ที่จะใช้ในเวลาที่ถูกต้องในระหว่างการเคลื่อนไหวของตัวละครแต่ละตัวถึงแม้ว่าฉันจะไม่ได้ใช้การชนกันของข้อมูล ฉันควรจะพูดถึงว่าฉันกำลังสร้างเกมของฉันในเกมเอ็นจิ้นที่ได้รับความนิยมและตอนนี้ฉันกำลังจัดการสิ่งนี้โดยใช้กิจกรรมแอนิเมชั่นของพวกเขาหรือแจ้งให้บรรลุบางสิ่งบางอย่างใกล้เคียงกับผลลัพธ์ที่ต้องการ แอนิเมชันเฉพาะคำสั่ง …

5
เปลี่ยนความคิดของเกมกระดานให้กลายเป็นเกมเพลย์ที่ใช้ความเร็วและช้า
สมมติว่าฉันต้องการสร้างเกมวางแผนที่มีสถานะไม่แน่นอนระดับโลกที่แบ่งใช้ระหว่างผู้เล่นทุกคน (คิดว่าเป็นเกมกระดาน) แต่ไม่เหมือนเกมกระดานฉันไม่ต้องการให้มันเป็นแบบเรียลไทม์แอ็คชั่นและ / หรือเทิร์นเบส แต่ผู้เล่นจะสามารถเข้าสู่ระบบได้ตลอดเวลาและใช้คะแนนแอ็คชั่นคงที่ต่อวันตามที่ต้องการ เมื่อเทียบกับสองสามชั่วโมงการประชุมเกมจะใช้เวลาสองสามสัปดาห์ นี่เป็นการให้รางวัลกลยุทธ์ที่ดีแทนที่จะใช้เวลาในการเล่น (เป็นทางเลือกผู้เล่นฮาร์ดคอร์สามารถเล่นเกมหลายเกมในแบบคู่ขนานแทนได้เสมอ) รวมถึงปัญหาทุกประเภทที่เกี่ยวข้องกับการเล่นสดเช่นการตัดการเชื่อมต่อและการซิงโครไนซ์ เกมดังกล่าวน่าจะยังติดอยู่ แต่ก็ยังมีเวลาในการลงทุนต่ำสำหรับผู้เล่นทั่วไป จนถึงตอนนี้ยังดี แต่สิ่งนี้ยังคงเปิดคำถามเมื่อถึงเวลาที่จะแก้ปัญหาการกระทำและเมื่อพวกเขาควรจะมองเห็น ฉันต้องการหลีกเลี่ยง "การเล่นนินจา" เช่นการเคลื่อนไหวทั้งหมดของคุณเพียงไม่กี่นาทีก่อนที่จะทำการรีเซ็ตจุดทุกวันเพื่อพาผู้เล่นคนอื่นด้วยความประหลาดใจหรือผู้คนสแปม F5 เพื่อทำการกระทำตามกำหนดเวลา เกมเวลา ฉันคิดถึงวิธีการสองสามข้อต่อไปนี้: แก้ไขกิจกรรมทั้งหมดในกระบวนการที่กำหนดเวลาเดียวที่รันวันละครั้ง โดยทั่วไปหมายถึงการเล่นเกม "blind" ที่ผู้เล่นสามารถลงมือทำ แต่ไม่เห็นผลลัพธ์ทันที สิ่งนี้คือฉันเล่นเกมเบราว์เซอร์ที่คล้ายกันเมื่อไม่กี่ปีที่ผ่านมาและไม่ชอบความจริงที่ว่าคุณรู้สึกถูกตัดการเชื่อมต่อและไร้อำนาจจนกว่าจะมีDeus ex machinaบอกคุณว่าเกิดอะไรขึ้นในช่วงเวลานั้น คุณเห็นว่าโลกมีวิวัฒนาการเพิ่มขึ้นทีละมาก ๆ ในหนึ่งวันซึ่งมักจะดูเหมือนไม่เห็นว่ามันวิวัฒนาการไปเลย สำหรับการกระทำที่ส่งผลกระทบอย่างใหญ่หลวงต่อเกมหรือผู้เล่นคนอื่น (การโจมตีความสำเร็จครั้งยิ่งใหญ่) ทำให้ทุกคนสามารถมองเห็นได้ในทันที ผู้เล่นฝ่ายตรงข้ามอาจได้รับการแจ้งเตือนเมื่อมีเหตุการณ์เช่นนี้เกิดขึ้นเพื่อให้พวกเขาสามารถตอบโต้ได้ คุณมีความคิดเห็นอื่น ๆ ที่ฉันจะแก้ไขได้อย่างไร มีแนวทางใดบ้างที่รู้จักกันดีในเกมที่มีอยู่ในเกมเดียวกัน

4
ฉันควรใช้เทคนิคใดเพื่ออำนวยความสะดวกในการสื่อสารระหว่าง XNA GameComponents (หรือระหว่างองค์ประกอบของเกมประเภทใดก็ได้)
ฉันเริ่มโครงการเกม 'ถูกต้อง' ครั้งแรกของฉันและฉันก็โดนบล็อกที่พยายามตัดสินใจว่าองค์ประกอบของเกมใน XNA ควรสื่อสารอย่างไร จากเหตุการณ์การเขียนโปรแกรม GUI (Java) GUI ก่อนหน้าตัวจัดการและผู้ฟังดูเหมือนจะเป็นทางไปข้างหน้า ดังนั้นฉันจึงมี Event Bus บางประเภทที่ยอมรับการลงทะเบียนกิจกรรมและคลาสที่สมัครเป็นสมาชิกของกิจกรรมเหล่านั้นพร้อมกับตัวจัดการเพื่อจัดการกับพวกเขา ตัวอย่างเช่น (pseudocode): class SpriteManager Update(){ if(player.collidesWith(enemy) // create new 'PlayerCollisionEvent' } class HUDManager onPlayerCollisionEvent(){ // Update the HUD (reduce lives etc) } อย่างไรก็ตามฉันไม่แน่ใจเกี่ยวกับการตั้งค่ารหัส (ใน C #) ที่จะต้องทำสิ่งนี้ให้สำเร็จ อะไรคือสิ่งที่คอยติดตามเหตุการณ์ (รถบัสบางประเภท) และมันมีโครงสร้างอย่างไร ดูเหมือนจะมีการกล่าวถึงมากมายเกี่ยวกับบริการเกมโดยที่คุณสามารถลงทะเบียน GameComponent ในคลาส Game.cs หลักของคุณจากนั้นดึงข้อมูลจากที่ใดก็ได้ในรหัสของคุณที่มีการอ้างอิงถึงวัตถุ 'เกม' …

4
ฉันควรพิจารณาอะไรเมื่อออกแบบระบบตัวจัดการเหตุการณ์
ฉันพัตต์กับพื้นฐานของ Java engine engine และฉันมาถึงจุดที่ฉันพร้อมที่จะเพิ่มในระบบ Event Manager โดยหลักการแล้วฉันรู้ว่าEvent Manager ควรทำอย่างไร: อนุญาตให้วัตถุ "ลงทะเบียน" สำหรับบางเหตุการณ์และเมื่อใดก็ตามที่ Event Manager ได้รับแจ้งเหตุการณ์ให้เผยแพร่เหตุการณ์ไปยังผู้ฟังที่ "ลงทะเบียนแล้ว" สิ่งที่ฉันนิ่งงันคือวิธีเริ่มใช้งาน ฉันไม่สามารถหาอะไรออนไลน์ได้เกี่ยวกับการนำระบบเหตุการณ์มาใช้ตั้งแต่เริ่มต้นดังนั้นฉันจึงมองหาสิ่งที่แนวปฏิบัติที่ดีที่สุดในกรณีนี้คือสิ่งที่ฉันควรทำและไม่ควรทำ ตัวอย่างเช่นจำเป็นหรือไม่ที่แต่ละวัตถุในเกมของฉันจะมีEventManagerฟิลด์ เนื่องจากวัตถุในเกมทั้งหมดของฉันสืบทอดมาจากคลาสแม่นามธรรมที่เป็นนามธรรมฉันคิดว่าฉันควรจะสามารถใช้การอ้างอิงแบบคงที่เพื่อให้มีเพียงอินสแตนซ์เดียวของ Event Manager ที่ใช้ร่วมกันระหว่างวัตถุทั้งหมดของเกม ฉันทำสิ่งที่คล้ายกันกับ Applet ที่ฉันใช้เพื่อแสดงผลแต่ละวัตถุแล้ว ฉันคิดว่าฉันต้องเก็บชุดของเหตุการณ์ที่สมัครเป็นไปได้แต่ละรายการ - การเพิ่มและลบวัตถุเกมออกจากรายการตามต้องการ ฉันคิดว่ามันควรจะเป็นไปได้ที่จะสร้างคิวของเหตุการณ์ที่ต้องออกอากาศซึ่งในกรณีนี้ฉันสามารถเพิ่ม "EventManager.Update ()" ในเกมหลักและมีUpdate()วิธีออกอากาศกิจกรรมที่เกิดขึ้นในตอนท้าย ของแต่ละเฟรม ในที่สุดวัตถุแต่ละอันจะมีHandleEvent(Event e)วิธีการที่พวกเขาสามารถแยกวิเคราะห์และตอบสนองได้อย่างเหมาะสม เสียงนี้เป็นไปในทิศทางที่เหมาะสมต่อการนำระบบดังกล่าวไปใช้หรือไม่หรือฉันกำลังออกนอกลู่นอกทางและ / หรือขาดอะไรบางอย่างที่ค่อนข้างชัดเจน?
9 events 

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