एक कार्ड गेम बनाना और जब गेम शुरू होता है, तो एक हाथ को 5 कार्ड दिए जाते हैं। स्टोरीबोर्ड का उपयोग करते हुए कार्ड डेक से हाथ की स्थिति में क्रमशः 0-4 पर जाता है। 5 कहानी है, प्रत्येक 5 हाथ की स्थिति के लिए एक।

कहानी को लूप के लिए बुलाया जा रहा है जो:

  • डेक से एक नया कार्ड प्राप्त करें।
  • संबंधित कहानी चलाएँ।
  • नया कार्ड प्रदर्शित करें (असली वह नहीं जो डेक से आ रहा है)।
  • डेक से आने वाले कार्ड को उसकी मूल स्थिति में रीसेट करें।

समस्या केवल अंतिम कहानी है जिसे लूप के लिए बुलाया जा रहा है। अगर मैं घटना की लूप संख्या बदलता हूं, तो कहानियां सभी पदों के लिए काम कर रही हैं, लेकिन हमेशा केवल आखिरी ही खेलती हैं जिसे .

<Page.Resources>

    <Storyboard x:Name="sDeckToHandPositionOne" TargetName="HandPositionOne"> 
        <DoubleAnimation Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.X)" To="0" Duration="0:0:1"/>
        <DoubleAnimation Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.Y)" To="0" Duration="0:0:1"/>
    </Storyboard>

    <Storyboard x:Name="sDeckToHandOne" TargetName="HandPositionOne"> 
        <DoubleAnimation Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.X)" To="0" Duration="0:0:1"/>
        <DoubleAnimation Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.Y)" To="0" Duration="0:0:1"/>
    </Storyboard>

</Page.Resources>
RunDeckToHandStory(string target) {

    string myStory = "sDeckToHandPositionOne";
    Storyboard story = (Storyboard)UI.Ctrl.Resources[myStory] as Storyboard;
    var moveX = (DoubleAnimation)story.Children[0];
    var moveY = (DoubleAnimation)story.Children[1];
    moveX.To = ImgHandCoordinates[Position][target] - ImgHandCoordinates[DeckOfCards][0];
    moveY.To = ImgHandCoordinates[Position][target] - ImgHandCoordinates[DeckOfCards][1];
    story.Begin();

}

For (i=0; i<5; i++) {

    int targetHandPosition = i;
    newCard = GetNewCardFromDeck();
    RunDeckToHandStory(targetHandPosition);
    DisplayNewCard(targetHandPosition, newCard);
    ResetDeckCardPosition();

}

नोट: यह एक उदाहरण है, इसमें टाइपो हो सकता है।

0
Erix 11 मई 2019, 19:48

1 उत्तर

सबसे बढ़िया उत्तर

अगर मैं आपकी समस्या को सही ढंग से समझता हूं, तो आप Storyboard क्रमिक रूप से का संग्रह चलाने की कोशिश कर रहे हैं, यानी अगले स्टोरीबोर्ड को वर्तमान स्टोरीबोर्ड के पूरा होने की प्रतीक्षा करनी होगी; हालांकि, आपका कोड स्टोरीबोर्ड के संग्रह को समानांतर में चला रहा है, और नतीजा यह है कि केवल आखिरी स्टोरीबोर्ड खेला जाता है, अन्य को आसानी से अनदेखा कर दिया जाता है।

मुझे लगता है कि आप स्टोरीबोर्ड को एक कतार में पंक्तिबद्ध कर सकते हैं, और केवल पहला स्टोरीबोर्ड चला सकते हैं, और स्टोरीबोर्ड की पूर्ण घटना के लिए एक हैंडलर पंजीकृत कर सकते हैं, जिसमें आप कतार में अगला स्टोरीबोर्ड खेलते हैं। ऐशे ही

var storyboardQueue = new Queue<Storyboard>();
storyboardQueue.Enqueue((Resources["sDeckToHandPositionOne"] as Storyboard));
storyboardQueue.Enqueue((Resources["sResetPosition"] as Storyboard)); 
storyboardQueue.Enqueue((Resources["sDeckToHandPositionTwo"] as Storyboard));
storyboardQueue.Enqueue((Resources["sResetPosition"] as Storyboard));
storyboardQueue.Enqueue((Resources["sDeckToHandPositionThree"] as Storyboard));
storyboardQueue.Enqueue((Resources["sResetPosition"] as Storyboard));
//... other storyboards

PlayNextStoryBoard(storyboardQueue);

private void PlayNextStoryBoard(Queue<Storyboard> storyboardQueue)
{
    if (storyboardQueue.Count > 0)
    {
        var sb = storyboardQueue.Dequeue();
        sb.Completed += (o, e) =>
        {
            PlayNextStoryBoard(storyboardQueue);
        };
        sb.Begin();
    }
}
1
kennyzx 13 मई 2019, 07:16