आप बारी आधारित गेम के भीतर विश्व राज्य से एनीमेशन के अलगाव को कैसे संभालते हैं? मैं वर्तमान में एक 2D ग्रिड आधारित खेल पर काम कर रहा हूँ। नीचे दिए गए कोड को बेहतर तरीके से समझाया गया है।
जब एक अभिनेता चलता है, तो मैं मोड़ के प्रवाह को रोकना चाहता हूं, जबकि जीव एनिमेट करता है और नई स्थिति में जाता है। अन्यथा, स्क्रीन दुनिया की स्थिति से काफी पीछे रह सकती है, जिससे अजीब दृश्य उपस्थिति होगी। मैं एनिमेशन भी लेना चाहता हूं जो गेम के प्रवाह को अवरुद्ध नहीं करता है - एक कण प्रभाव गेमप्ले को प्रभावित किए बिना कई मोड़ पर प्रकट कर सकता है।
मैंने जो किया है वह दो प्रकार के एनिमेशन का परिचय है, जिसे मैं अवरुद्ध एनिमेशन और गैर-अवरुद्ध एनिमेशन कहता हूं। जब खिलाड़ी हिलना चाहता है, तो कोड निष्पादित हो जाता है
class Actor {
void move(PositionInfo oldPosition, PositionInfo newPosition) {
if(isValidMove(oldPosition, newPosition) {
getGame().pushBlockingAnimation(new MoveAnimation(this, oldPosition, newPosition, ....));
player.setPosition(newPosition);
}
}
}
फिर मुख्य अपडेट लूप करता है:
class Game {
void update(float dt) {
updateNonBlockingAnimations(dt); //Effects like particle explosions, damage numbers, etc. Things that don't block the flow of turns.
if(!mBlockingAnimations.empty()) {
mBlockingAnimations.get(0).update(dt);
} else {
//.. handle the next turn. This is where new animations will be enqueued..//
}
cleanUpAnimations(); // remove finished animations
}
}
... जहां एनीमेशन अभिनेता की स्क्रीन स्थिति को अपडेट करता है।
एक अन्य विचार जो मैं लागू कर रहा हूं, वह है समवर्ती अवरोधन एनीमेशन, जहां कई अवरुद्ध एनिमेशन एक साथ अपडेट किए जाएंगे, लेकिन अगली बारी तब तक नहीं होगी जब तक कि वे सभी नहीं हो जाते।
क्या यह चीजों को करने का एक समझदार तरीका है? क्या किसी के पास कोई सुझाव है, या यहां तक कि इस तरह के अन्य खेल इस तरह के कैसे करते हैं, इसका भी संदर्भ है।