2017-01-20 7 views
0

Я хотел бы создать большой растровый или png-файл с помощью Microsoft XNA и C# в visual Studio. У меня нормальный Game1-Class, а spritebatch - на экране. Я совершенно новый и нуб в XNA. Все отлично работает, когда я хочу отобразить его в игре. Но мне нужна опция для экспорта на любой тип изображения, например bmp или png. Теперь у меня проблема, я хочу создать bitmap-файл, содержащий 100x100 плит, которые имеют 64x64 пикселей. Я знаю, это очень большой, но я не забочусь о моем мощном ПК. Но у меня две проблемы:XNA: создание огромных изображений

Во-первых, Microsoft XNA, похоже, не поддерживает такие большие файлы Вторая проблема: мой код даже не работает с очень маленькими фрагментами.

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

EDIT: Есть ли способ нарисовать текстуру2d в System.Drawing.Bitmap? Создание System.Drawing.Bitmap работает с этим размером ... Теперь мне просто нужно заполнить свои плитки!

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

Вот мой код (с несколькими дополнительными комментариями):

//Idea: creating another spritebatch 
SpriteBatch spriteBatch = new SpriteBatch(Game1.graphics.GraphicsDevice); 
spriteBatch.Begin(); 
//typical try and catch 
try 
{ 
    //The level is 100x100 
    for (int x = 0; x < 100; x++) 
    { 
     for (int y = 0; y < 100; y++) 
     { 
      //this is just a test to check if my map contains a tile at this place 
      if (this.blockContent[y, x].Foreground.Number != 65535) 
      { 
       //the tileSetBlock is a large tileset containing many recktangles for the single tiles 
       //tileSheetBlock is the big sprite with the tiles 
       //load the recktangle from the tileSetBlock depending on the block number at x/y 
       bounds = Game1.tileSetBlock[(int)this.blockContent[y, x].Foreground.Number]; 
       //my idea: draw the sprite to the bitmap-file 
       spriteBatch.Draw(Game1.tileSheetBlock, new Vector2((y * 64), (x * 64)), bounds, Color.White); 
      } 
     } 
    } 
    //here i wanted to create the texture 
    Texture2D destination = new Texture2D(Game1.graphics.GraphicsDevice, 6400, 6400); 
    //here i wanted to draw the content into my texture 
    spriteBatch.Draw(destination, new Rectangle(0, 0, 6400, 6400), Color.White); 
    //here i just wanted to save everything 
    destination.SaveAsPng(new System.IO.FileStream(@"C:\test.png", System.IO.FileMode.CreateNew), 6400, 6400); 
} 

Может быть, есть какой-то рамки или что-нибудь другое, что может помочь? Не проблема держать большие изображения в памяти, если это единственный способ.

+0

Это * очень * большой график; даже так, какие ошибки вы получаете? – BradleyDotNET

+0

, создав растровое изображение, он сказал, что он слишком большой. Поэтому я думаю, что мне понадобится дополнительный пакет. И с меньшим изображением он просто не работает. Я думаю, что неправильно понял, как использовать spritebatch ...Я бы попробовал нечто вроде объекта, где я могу нарисовать плитки и сохранить его как изображение. Я не нашел никакой возможности –

+0

Я понимаю, что растровые изображения, большие, чем ваш видеоэкран, всегда являются безусловным предложением. –

ответ

0

Вы никогда не визуализируете уровень, генерируя из него целый растровый рисунок, он неэффективен и не имеет смысла вообще.

Вместо этого вы используете рендеринг на основе плит и визуализируете только то, что в настоящее время видно на экране.

Смотрите мой предыдущий ответ на GameDev о том, как сделать это легко:

https://gamedev.stackexchange.com/questions/29121/organize-a-game-set/29930#29930

enter image description here

Еще один инструментом, который я написал некоторое время назад, что может быть полезным для вас, она разлагает уровень растрового изображения для плитки:

https://github.com/aybe/LevelDecomposer

Вход:

enter image description here

Выход:

enter image description here

И вы наверняка хотите создать свой уровень, используя правильный редактор, например Tiled.

+0

Я хочу создать карту уровня в виде растрового файла ... –

+0

Теперь редактирование и просмотр уже работают, все, что я хочу сделать, - это сохранить весь уровень как map –

+0

моя проблема: вход -> уровень, вывод -> целая карта (поэтому выход должен быть как ваш вход выше) –

Смежные вопросы