Я работаю над стилем игры «падающий песок».Оптимальный способ установки пиксельных данных?
Я пробовал много способов рисовать песок на экране, однако каждый способ, похоже, создает некоторые проблемы в той или иной форме.
Список вещей, которые я работал через:
рисования каждого пикселя в отдельности, по одному из размера текстуры пикселей. Проблема: Замедление после того, как на обновление было изменено около 100 000 пикселей.
Рисование каждого пикселя в одну большую текстуру2d, рисование текстуры2d, а затем очистку данных. Проблемы: использование texture.SetPixel() выполняется очень медленно, и даже с удалением старой текстуры это приведет к небольшой утечке памяти (около 30 кбит/с, что добавляется быстро) даже после вызова объекта на объект. Я просто не мог понять, как остановить его. В целом, однако, это был лучший метод (до сих пор). Если есть способ остановить эту утечку, я бы хотел ее услышать.
Использование Lockbits из растрового изображения. Это отлично работало с точки зрения растровых изображений, но, к сожалению, мне все равно пришлось преобразовать растровое изображение обратно в texture2d, что приведет к снижению частоты кадров до единицы. Таким образом, это может работать очень хорошо, если я смогу найти способ рисовать растровое изображение в xna, не преобразовывая его (или что-то еще).
Установка каждого пикселя в текстуру2d с установленным пикселем путем замены «старой» позиции пикселей на прозрачные пиксели, а затем установки новой позиции с соответствующим цветом. Это удвоило число наборов пикселей, необходимых для завершения работы, и был гораздо медленнее, чем при использовании номер 2.
Итак, мой вопрос, какие идеи лучше? Или идеи о том, как исправить стили 2 или 3?
В ответ на # 1: Вы пытались дозировать ваши ничьи, а не по одному за раз? – 2013-04-17 05:06:31
Нет, я так не верю, у вас есть ссылка или объяснение? (Если вы имеете в виду рисование похожих текстур вместе, да, это помогло, но это было не очень хорошо.) – Colton
Ну, проще всего начать с того, чтобы просто использовать «SpriteBatch» и «Draw» каждый пиксель с назначением прямоугольник размером '1, 1' и образец из очень маленькой текстуры с нужным цветом. Если это все еще медленно, вы можете сделать все это вручную, а не использовать какие-либо текстуры вообще (нужно немного ускорить его). Это потенциально много полигонов, но это стоит того. – 2013-04-17 05:20:24