طريقة أسرع للتكرار من خلال مجموعة خشنة؟

StackOverflow https://stackoverflow.com/questions/2541940

  •  23-09-2019
  •  | 
  •  

سؤال

أرغب في التكرار من خلال صفيف يغطي كل بكسل على شاشتي. بمعنى آخر:

        for (int y = 598; y > 0; y--)
        {
            for (int x = 798; x > 0; x--)
            {
                if (grains[x][y])
                {
                    spriteBatch.Draw(Grain, new Vector2(x,y), Color.White);
                }
            }
        }

... نسيج بلدي هو صورة 1x1 بكسل يتم رسمها على الشاشة عندما تكون قيمة الصفيف صحيحة. إنه يعمل لائقًا - ولكن هناك بالتأكيد تأخر كلما غطيت الشاشة. هل هناك طريقة أفضل لإنجاز ما أحاول تحقيقه؟

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

المحلول

بدلاً من استخدام العفاريت الفردية x x y ، قم بإنشاء صورة واحدة ، وضبط البكسل بشكل مناسب. ثم فقط عرض الصورة بأكملها كملمس على Sprite واحد.

على الأرجح صفيف خشنة ليس المشكلة - بالأحرى ما يقرب من نصف ملايين العفاريت.

نصائح أخرى

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

المتداخلة من أجل الحلقات وكذلك جميع المكالمات spriteBatch.Draw سوف تستخدم وحدة المعالجة المركزية أبطأ بكثير ، خاصة عندما تصبح حلقةك أكبر وأكبر ، مما يعني تأخير الرسم.

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

كيفية: تطبيق تظليل بكسل على العفاريت

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