2015-08-26 3 views
0

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

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Graphics; 
using Microsoft.Xna.Framework.Content; 

namespace Test_Game 
{ 

    class Main_Menu 
    { 
     //setting the variables 
     public Texture2D button1; 
     public Vector2 button1Pos; 
     public GraphicsDevice graphicsDevice; 
     GraphicsDeviceManager graphics; 

     public void initialize(Texture2D texture, Vector2 position, ContentManager Content) 
     { 
      //Getting the initialized stuff 
      button1 = Content.Load<Texture2D>("button_temp"); 
      button1Pos.X = 30; 
      button1Pos.Y = 30; 
     } 

     public void Draw(SpriteBatch spriteBatch) 
     { 
      graphics.GraphicsDevice.Clear(Color.Black); 
      spriteBatch = new SpriteBatch(graphicsDevice); 
      //Just drawing the Sprite 
      spriteBatch.Begin(); 
      spriteBatch.Draw(button1, new Rectangle(30, 30, 214, 101), Color.White); 
      spriteBatch.End(); 
     } 
    } 
} 

Упование вы можете найти ответ.

+0

Пустой синий экран - все же в вашей жеребьевке вы устанавливаете его на черный. Вы называете свой метод draw из основного класса «game1»? – harag

ответ

1

Я вижу много ошибок в вашем коде, я оставил бы комментарий, указывающий на все, но слишком долго.

Большинство ошибок исходит из этого: вы не наследуете от Game класса. Ваша строка class Main_Menu должна быть class Main_Menu : Game. Всегда используйте this template для класса игры:

using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Graphics; 

namespace MyGame 
{ 
    public class MyGame : Game 
    { 
     GraphicsDeviceManager graphics; 
     SpriteBatch spriteBatch; 

     public MyGame() 
     { 
      graphics = new GraphicsDeviceManager(this); 
      Content.RootDirectory = "Content"; 
     } 
     protected override void Initialize() 
     { 
      base.Initialize(); 
     } 
     protected override void LoadContent() 
     { 
      spriteBatch = new SpriteBatch(GraphicsDevice); 
     } 
     protected override void UnloadContent() 
     { 
     } 
     protected override void Update(GameTime gameTime) 
     { 
      base.Update(gameTime); 
     } 
     protected override void Draw(GameTime gameTime) 
     { 
      GraphicsDevice.Clear(Color.CornflowerBlue); 
      base.Draw(gameTime); 
     } 
    } 
} 

С этого момента, вы должны заполнить этот шаблон в виду следующее:

  1. Создайте свою память только объекты в методе Initialize;
  2. Загрузить и создать объекты, связанные с файлами, в методе LoadContent;
  3. Добавить свою логику игры в метод Update;
  4. Добавить логику рисования в методе Draw;
  5. Как правило, не мешайте конструктору или методу UnloadContent.

Подключение существующего кода с шаблоном, мы получим следующее:

using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Graphics; 

namespace Test_Game 
{ 
    public class Main_Menu : Game 
    { 
     GraphicsDeviceManager graphics; 
     SpriteBatch spriteBatch; 
     Vector2 buttonPos; // our button position 
     Texture2D button; // our button texture 

     public MyGame() 
     { 
      graphics = new GraphicsDeviceManager(this); 
      Content.RootDirectory = "Content"; 
     } 
     protected override void Initialize() 
     { 
      buttonPos = new Vector2(30, 30); // X=30, Y=30 
      base.Initialize(); 
     } 
     protected override void LoadContent() 
     { 
      spriteBatch = new SpriteBatch(GraphicsDevice); 
      button = Content.Load<Texture2D>("button_temp"); // load texture 
     } 
     protected override void UnloadContent() 
     { 
     } 
     protected override void Update(GameTime gameTime) 
     { 
      // here we would add game logic 
      // things like moving game objects, detecting collisions, etc 
      base.Update(gameTime); 
     } 
     protected override void Draw(GameTime gameTime) 
     { 
      GraphicsDevice.Clear(Color.CornflowerBlue); 
      spriteBatch.Begin(); 
      // draw our button 
      int buttonWidth = 214; 
      int buttonHeight = 101; 
      spriteBatch.Draw(button, new Rectangle(buttonPos.X, buttonPos.Y, buttonWidth, buttonHeight), Color.White); 
      spriteBatch.End(); 
      base.Draw(gameTime); 
     } 
    } 
} 

Этот шаблон используется в каждой игре за рамки MonoGame и XNA, так что вы должны найти много контента на web о том, что делает каждый метод класса Game.

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