แก้ไข: เพื่อให้ชัดเจนว่าคำถามของฉันคืออะไร: นี่เป็นวิธีที่ดีในการจัดการภาพเคลื่อนไหว / สถานะภาพเคลื่อนไหวในเอ็นจิ้นเกมด้วยตาการสร้าง / การจัดการเนื้อหาหรือไม่ อะไรคือข้อบกพร่องในการทำเช่นนี้และสิ่งที่จะเป็นทางเลือกในการทำเช่นนั้น? - แม้ว่าคำตอบของฉันจะได้รับคำตอบบางส่วนในความคิดเห็นเพราะมันเป็นหนทางไป
ฉันพยายามจัดการกับอนิเมชั่นในโปรเจ็กต์เกมเอนจิ้น 2Dโดยไม่ต้องเข้ารหัสให้ยุ่งยาก สถานะภาพเคลื่อนไหวที่เข้ารหัสยากดูเหมือนว่าจะเป็นปรากฏการณ์ธรรมดา แต่แปลกมากสำหรับฉัน
พื้นหลังเล็กน้อย: ฉันกำลังทำงานกับระบบเอนทิตีที่ส่วนประกอบคือถุงของข้อมูลและระบบย่อยทำหน้าที่แทนพวกเขา ฉันเลือกที่จะใช้ระบบการลงคะแนนเพื่ออัพเดทสถานะภาพเคลื่อนไหว
ด้วยสถานะภาพเคลื่อนไหวฉันหมายถึง: "walking_left", "running_left", "walking_right", "shooting", ...
ความคิดของฉันเพื่อภาพเคลื่อนไหวที่จับคือการออกแบบเป็นรูปแบบข้อมูลที่ขับเคลื่อนด้วย ข้อมูลสามารถเก็บไว้ในไฟล์ xml, rdbms, ... และสามารถโหลดได้ตั้งแต่เริ่มเกม / ระดับ / ... วิธีนี้คุณสามารถแก้ไขภาพเคลื่อนไหวและช่วงการเปลี่ยนภาพได้อย่างง่ายดายโดยไม่ต้องเปลี่ยนรหัสทุกที่ในตัวคุณ เกม.
ตัวอย่างเช่นฉันสร้างร่าง xml ของคำจำกัดความข้อมูลที่ฉันมีอยู่ในใจ
ชิ้นหนึ่งที่สำคัญมากของข้อมูลก็จะเป็นรายละเอียดของภาพเคลื่อนไหว ภาพเคลื่อนไหวจะมีรหัสเฉพาะ (ชื่อที่สื่อความหมาย) มันจะถือ id อ้างอิงไปยังภาพ (แผ่นงานสไปรท์ที่ใช้เพราะภาพเคลื่อนไหวที่แตกต่างกันอาจใช้แผ่นงานสไปรต์ที่แตกต่างกัน) เฟรมต่อวินาทีเพื่อเปิดภาพเคลื่อนไหว "เล่นซ้ำ" ที่นี่กำหนดว่าควรจะเรียกใช้ภาพเคลื่อนไหวหนึ่งครั้งหรือไม่สิ้นสุด จากนั้นฉันกำหนดรายการสี่เหลี่ยมเป็นเฟรม
<animation id='WIZARD_WALK_LEFT'>
<image id='WIZARD_WALKING' />
<fps>50</fps>
<replay>true</replay>
<frames>
<rectangle>
<x>0</x>
<y>0</y>
<width>45</width>
<height>45</height>
</rectangle>
<rectangle>
<x>45</x>
<y>0</y>
<width>45</width>
<height>45</height>
</rectangle>
</frames>
</animation>
ข้อมูลภาพเคลื่อนไหวจะถูกโหลดและเก็บไว้ในกลุ่มทรัพยากรภาพเคลื่อนไหวและอ้างอิงโดยเอนทิตีเกมที่ใช้งาน มันจะถือว่าเป็นทรัพยากรเช่นรูปภาพเสียงพื้นผิว ...
ข้อมูลชิ้นที่สองที่จะกำหนดจะเป็นเครื่องรัฐในการจัดการสถานะภาพเคลื่อนไหวและช่วงการเปลี่ยนภาพ สิ่งนี้กำหนดแต่ละสถานะที่เอนทิตีของเกมสามารถอยู่ได้ซึ่งระบุว่าสามารถเปลี่ยนเป็นและสิ่งใดเป็นตัวกระตุ้นให้เกิดการเปลี่ยนแปลงสถานะ
เครื่องสถานะนี้จะแตกต่างจากเอนทิตีไปยังเอนทิตี เพราะนกอาจมีสถานะ "เดิน" และ "บิน" ในขณะที่มนุษย์จะมีเพียง "เดิน" เท่านั้น อย่างไรก็ตามมันสามารถใช้ร่วมกันโดยเอนทิตี้ที่แตกต่างกันเพราะมนุษย์หลายคนอาจจะมีสถานะเดียวกัน (โดยเฉพาะเมื่อคุณกำหนด NPC ทั่วไปบางอย่างเช่นมอนสเตอร์ ฯลฯ ) นอกจากนี้ orc อาจมีสถานะเช่นเดียวกับมนุษย์ เพียงเพื่อแสดงให้เห็นว่าคำนิยามของรัฐอาจจะมีการใช้ร่วมกัน แต่โดยเฉพาะกลุ่มที่เลือกของหน่วยงานเกม
<state id='IDLE'>
<event trigger='LEFT_DOWN' goto='MOVING_LEFT' />
<event trigger='RIGHT_DOWN' goto='MOVING_RIGHT' />
</state>
<state id='MOVING_LEFT'>
<event trigger='LEFT_UP' goto='IDLE' />
<event trigger='RIGHT_DOWN' goto='MOVING_RIGHT' />
</state>
<state id='MOVING_RIGHT'>
<event trigger='RIGHT_UP' goto='IDLE' />
<event trigger='LEFT_DOWN' goto='MOVING_LEFT' />
</state>
รัฐเหล่านี้สามารถจัดการได้ด้วยระบบการลงคะแนนเลือกตั้ง แต่ละเกมทำเครื่องหมายว่ามันคว้าสถานะปัจจุบันของเอนทิตีเกมและตรวจสอบทริกเกอร์ทั้งหมด หากตรงตามเงื่อนไขจะเปลี่ยนสถานะของนิติบุคคลเป็นสถานะ "goto"
ส่วนสุดท้ายที่ผมกำลังต่อสู้กับเป็นวิธีการผูกข้อมูลภาพเคลื่อนไหวและภาพเคลื่อนไหวรัฐเพื่อกิจการ ฉันใช้วิธีตรรกะมากที่สุดในการเพิ่มตัวชี้ไปยังข้อมูลสถานะเครื่องจักรที่เอนทิตีใช้และกำหนดสำหรับแต่ละสถานะในเครื่องนั้นว่าภาพเคลื่อนไหวที่ใช้
นี่คือตัวอย่าง xml ที่ฉันจะกำหนดพฤติกรรมการเคลื่อนไหวและการแสดงกราฟิกของเอนทิตีทั่วไปบางอย่างในเกมโดยระบุสถานะภาพเคลื่อนไหวและรหัสข้อมูลภาพเคลื่อนไหว โปรดทราบว่าทั้ง "ตัวช่วยสร้าง" และ "orc" มีสถานะภาพเคลื่อนไหวเดียวกัน แต่มีภาพเคลื่อนไหวที่แตกต่างกัน นอกจากนี้แอนิเมชั่นที่แตกต่างกันอาจหมายถึงสไปรต์ชีตที่ต่างกันหรือแม้กระทั่งแอนิเมชั่นตามลำดับที่แตกต่างกัน
<entity name="wizard">
<state id="IDLE" animation="WIZARD_IDLE" />
<state id="MOVING_LEFT" animation="WIZARD_WALK_LEFT" />
</entity>
<entity name="orc">
<state id="IDLE" animation="ORC_IDLE" />
<state id="MOVING_LEFT" animation="ORC_WALK_LEFT" />
</entity>
เมื่อมีการสร้างเอนทิตีมันจะเพิ่มรายการของสถานะด้วยข้อมูลสถานะเครื่องจักรและการอ้างอิงข้อมูลภาพเคลื่อนไหว
ในอนาคตฉันจะใช้ระบบเอนทิตีเพื่อสร้างเอนทิตีทั้งหมดโดยการกำหนดส่วนประกอบในรูปแบบ xml ที่คล้ายกัน
-
นี่คือสิ่งที่ฉันได้มาหลังจากการวิจัย อย่างไรก็ตามฉันมีปัญหาในการรับหัวของฉันดังนั้นฉันจึงหวังว่าจะได้รับคำติชม มีบางอย่างที่นี่ไม่มีความหมายหรือมีวิธีที่ดีกว่าในการจัดการกับสิ่งเหล่านี้หรือไม่? ฉันเข้าใจแนวคิดของการวนซ้ำผ่านเฟรม แต่ฉันมีปัญหาในการก้าวไปอีกขั้นหนึ่งและนี่คือความพยายามของฉันที่จะทำเช่นนั้น