Pergunta

Eu gostaria de iterar através de uma matriz que cobre todos os pixels da minha tela. ou seja:

        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);
                }
            }
        }

... Minha textura é uma imagem de 1x1 pixels que é desenhada para a tela quando o valor da matriz é verdadeiro. Ele é decente - mas definitivamente há atraso, mais a tela eu cobro. Existe uma maneira melhor de realizar o que estou tentando alcançar?

Foi útil?

Solução

Em vez de usar sprites individuais x x y, crie uma única imagem e defina os pixels adequadamente. Em seguida, basta renderizar a imagem inteira como uma textura em um único sprite.

A matriz irregular é provavelmente não O problema - em vez dos sprites de quase meio milhão.

Outras dicas

O problema é que você está gastando muito tempo da CPU dentro do método de desenho a cada quadro. O método de desenho da sua instância do jogo sempre será chamado o mais rápido possível, seja em tempo fixo ou não. Dado isso, você sempre deseja ter certeza de que está gastando o mínimo de tempo possível lá, o que significa que deseja colocar a maior parte do trabalho na GPU.

Os loops aninhados, bem como todas as chamadas para spriteBatch.Draw vão usar a CPU muito mais lenta, especialmente quando o seu loop fica cada vez maior, o que significa desenho atrasado.

Se você deseja fazer cálculos por pixel, por sorteio, cada quadro, a melhor maneira de fazer isso é colocar o trabalho na GPU e usar um shader de pixels. Você pode realizar seu próprio problema criando uma textura do tamanho que deseja e passando uma matriz para o shader que mantém suas informações "ligadas ou desligadas", entre outras maneiras de atingir o mesmo objetivo.

Como: aplicar um shader de pixels em sprites

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top