سؤال

بالاستناد الى هذه اللعبة البرمجة أنا حاليا بناء.

كتبت الطريقة أدناه للتحرك (ترجمة) قماش لمسافة محددة وفقا لزاويةها الحالية:

private void MoveBot(double pix, MoveDirection dir)
    {
        if (dir == MoveDirection.Forward)
        {
            Animator_Body_X.To = Math.Sin(HeadingRadians) * pix;
            Animator_Body_Y.To = ((Math.Cos(HeadingRadians) * pix) * -1);
        }
        else
        {
            Animator_Body_X.To = ((Math.Sin(HeadingRadians) * pix) * -1);
            Animator_Body_Y.To = Math.Cos(HeadingRadians) * pix;
        }

        Animator_Body_X.To += Translate_Body.X;
        Animator_Body_Y.To += Translate_Body.Y;

        Animator_Body_X.From = Translate_Body.X;
        Translate_Body.BeginAnimation(TranslateTransform.XProperty, Animator_Body_X);

        Animator_Body_Y.From = Translate_Body.Y;
        Translate_Body.BeginAnimation(TranslateTransform.YProperty, Animator_Body_Y);

        TriggerCallback();
    }

أحد المعلمات التي يقبلها هو عدد من البكسلات التي يجب تغطيتها عند الترجمة.

فيما يتعلق بالقانون أعلاه، Animator_Body_X و Animator_Body_Y هي من النوع DoubleAnimation, ، والتي يتم تطبقها بعد ذلك على الروبوت TranslateTransform هدف: Translate_Body


المشكلة التي أقوم بها هي أن الروبوت (وهو قماش) يتحرك بسرعة مختلفة وفقا لمسافة مشورة. وبالتالي، كلما كانت المسافة أطول، أسرع حركات الروبوت! لوضعك في منظور، إذا كانت المسافة المطبوعة 20, ، يتحرك الروبوت بطيئا إلى حد ما، ولكن إذا كانت المسافة المديلة 800, ، يطلق النار حرفيا عن الشاشة.

أحتاج إلى جعل هذه السرعة ثابتة، غير ذي صلة من المسافة المطبوعة.

أعتقد أنني بحاجة إلى تعديل بعض من Animator_Body_X و Animator_Body_Y خصائص وفقا للمسافة المدخلة، لكنني لا أعرف ما يجب أن يعدل بالضبط (أعتقد أن بعض الرياضيات يجب أن يتم كذلك).

هنا هو قائمة DoubleAnimation الخصائص ربما سوف ترغب في إلقاء نظرة على معرفة ذلك.

هل كانت مفيدة؟

المحلول

هل هناك سبب أنت تستخدم Doubleanimation؟ تم تصميم DoubleAnimation لتأخذ قيمة من A إلى B خلال فترة زمنية محددة باستخدام تسريع / تباطؤ الاستيفاء الخطي في بداية / نهاية تلك الفترة إذا كان مطلوبا (وهذا هو السبب في أنه "أسرع" للمسافة أطول. في نفس الوقت!). من خلال مظهر الأشياء ما تحاول القيام به هو انقل شيء مسافة ثابتة لكل "إطار" اعتمادا على الاتجاه الذي يواجهه؟ هذا لا يبدو أن يصلح لي.

يمكنك حساب طول الرسوم المتحركة، اعتمادا على المسافة، وبالتالي فإن الطول أطول لمسافات أطول، ثم يتحرك العنصر دائما في نفس "السرعة". بالنسبة لي، فمن المنطقي أن تحرك العنصر بنفسك. يمكنك حساب سرعة الكائنات بناء على معايير الزاوية الخاصة بك، ثم كل "إطار" يمكنك نقل العنصر يدويا بقدر ما تحتاج إلى الذهاب بناء على تلك السرعة. مع هذه الطريقة، يمكنك أيضا تطبيق الاحتكاك بسهولة إلخ إلى السرعة إذا لزم الأمر.

نصائح أخرى

الرياضيات عليك أن تفعل هي: السرعة * الوقت = المسافة

لذلك، للحفاظ على ثابت ثابت عليك تغيير مدة الرسوم المتحركة:

double pixelsPerSecond = 5;
animation.Duration = TimeSpan.FromSeconds(distance/pixelsPerSecond);

راجع للشغل، لا أعتقد أن الرسوم المتحركة هي أفضل حل لتحريك الروبوتات الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top