Более быстрый способ перебрать неровный массив? - PullRequest
2 голосов
/ 30 марта 2010

Я хотел бы перебрать массив, который покрывает каждый пиксель на моем экране. то есть:

        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 пикселей, которое выводится на экран, когда значение массива равно true. Он работает прилично - но определенно запаздывает, чем больше экран я покрываю. Есть ли лучший способ достичь того, чего я пытаюсь достичь?

Ответы [ 2 ]

7 голосов
/ 30 марта 2010

Вместо использования отдельных отдельных спрайтов X x Y, создайте одно изображение и установите пиксели соответствующим образом. Затем просто визуализируйте все изображение как текстуру на одном спрайте.

Зубчатый массив, скорее всего, , а не проблема, скорее почти полмиллиона спрайтов.

0 голосов
/ 31 марта 2010

Проблема в том, что вы тратите много времени ЦП в методе рисования каждый кадр. Метод Draw вашего экземпляра Game всегда будет вызываться как можно чаще, будь то в фиксированное время или нет. Учитывая это, вы всегда хотите быть уверены, что проводите там как можно меньше времени, а это значит, что вы хотите перенести большую часть работы на графический процессор.

Вложенные циклы for, а также все вызовы spriteBatch.Draw будут использовать гораздо более медленный процессор, особенно когда ваш цикл становится все больше и больше, что означает задержку рисования.

Если вы хотите выполнять расчеты для каждого пикселя, для каждого рисунка, для каждого кадра, то лучший способ сделать это - поместить работу на графический процессор и использовать пиксельный шейдер. Вы можете решить собственную проблему, создав одну текстуру нужного размера и передав массив в шейдер, содержащий вашу информацию о включении или выключении, среди других способов достижения той же цели.

Как: применить пиксельный шейдер к спрайтам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...