Более быстрый способ перебора зубчатого массива?

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 создайте одно изображение и установите соответствующие пиксели.Затем просто визуализируйте все изображение как текстуру на одном спрайте.

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top