c# #xna #sprite #monogame
#c# #xna #спрайт #моногейм
Вопрос:
Я пытаюсь нарисовать спрайт на экране в monogame, но не работает. Не выдает никаких ошибок. Я пробовал другие изображения, и это работает с ними. Может быть, это как-то связано с тем, что изображение является .png? Пожалуйста, помогите мне, я не могу понять это
Код:
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
namespace Test
{
public class Game1 : Game
{
private GraphicsDeviceManager _graphics;
private SpriteBatch _spriteBatch;
Texture2D realisticSturgeonSprite;
public Game1()
{
_graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
IsMouseVisible = true;
}
protected override void Initialize()
{
// TODO: Add your initialization logic here
base.Initialize();
}
protected override void LoadContent()
{
_spriteBatch = new SpriteBatch(GraphicsDevice);
realisticSturgeonSprite = Content.Load<Texture2D>("Sturgeon");
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
// TODO: Add your update logic here
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
Texture2D rect = new Texture2D(_graphics.GraphicsDevice, 80, 30);
Color[] data = new Color[80 * 30];
for (int i = 0; i < data.Length; i ) data[i] = Color.Chocolate;
rect.SetData(data);
Vector2 coor = new Vector2(10, 20);
_spriteBatch.Begin();
_spriteBatch.Draw(rect, coor, Color.White);
_spriteBatch.Draw(realisticSturgeonSprite, new Vector2(50, 60), Color.White);
_spriteBatch.Draw(sturgeonSprite, new Vector2(80, 90), Color.White);
_spriteBatch.End();
base.Draw(gameTime);
}
}
}
Спрайт: Lake_Sturgeon.png
Я могу добавить больше деталей к сообщению, если есть какие-либо, которые я пропустил.
Комментарии:
1. Разве имя файла не должно быть с
.png
в конце?2.
Texture2D rect = new Texture2D(_graphics.GraphicsDevice, 80, 30);
Текстуры должны быть созданыLoadContent()
и заполнены,SetData()
,Update()
Это позволяет передавать память на видеокарту в фоновом режиме.3. @Steven, расширение файла при загрузке через content manager является
.xnb
и должно быть опущено.
Ответ №1:
Проще использовать инструмент Monogame Pipline, чтобы сначала преобразовать файл PNG в файл XNB. Лучшее кроссплатформенное решение.
Иногда вам может потребоваться загрузить PNG напрямую.
Добавьте существующий файл в проект в Visual Studio. Выберите файл PNG. Скопируйте его.
В разделе «Свойства» в Visual Studio установите для «Тип сборки нет» и «Копировать в выходные данные, если новее».
Обратите внимание, что это работает только на настольных платформах.
protected override void LoadContent()
{
_spriteBatch = new SpriteBatch(GraphicsDevice);
realisticSturgeonSprite = Texture2D.FromFile(GraphicsDevice,@"Lake_Sturgeon.png");
// you can add path if needed (copy to output option above doesn't need it)
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
_spriteBatch.Begin();
_spriteBatch.Draw(realisticSturgeonSprite, new Vector2(50, 60), Color.White);
_spriteBatch.End();
base.Draw(gameTime);
}
Нарисуйте текстуру, как обычно.
Комментарии:
1. Спасибо! Для меня отлично работает!
2. Я продолжаю получать эту ошибку «Нет перегрузки для метода ‘fromFile’ Принимает не менее 3 аргументов» Что мне делать с нулевой частью?
3. @gogy, извините, я был в ветке разработки. оставьте
,null
. Я исправил сообщение.