I'm currently having an issue with my Xna Game 1 Class. I've incorporated a 2D camera with it's own separate class, which is called for the usage of the matrix. the problem I'm having is in the draw method, to the point of which I use the : `spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, null, null, null, null, camera.TransformMatrix);
The problem occurs after it as the case methods change what is drawn, for example the Case Main menu and playing don't seem to be reached, or quite frankly drawn to the screen.I've tried to put an individual SpriteBatch.Begin method in each case, consequently, ending each method in the case itself with spriteBatch.end().
I've also tried, not calling the translateCamera class in the update method, but that was also to no avail.
Any Help would be much appreciated!
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
graphics.PreferredBackBufferWidth = 800;
graphics.PreferredBackBufferHeight = 600;
screenRectangle = new Rectangle(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);
npc_creation = new NPC_Creation[0];
player1 = new charDevelopment();
camera = new Camera2D();
}
/// <summary>
protected override void Initialize()
{
Random rnd = new Random();
rndYpos = rnd.Next(200,500);
rndXpos = rnd.Next(100, 300);
base.Initialize();
}
/// <summary>
/// LoadContent will be called once per game and is the place to load
/// all of your content.
protected override void LoadContent()
{
#region loadTextures
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
backGround = Content.Load<Texture2D>("MainMenu");
graphics.PreferredBackBufferWidth = screenWidth; // width of screen..
graphics.PreferredBackBufferHeight = screenHeight; //height of screen..
IsMouseVisible = true;
graphics.ApplyChanges(); // load images...
potion = Content.Load<Texture2D>("potion");
itemrect = new Rectangle(((screenRectangle.Width + potion.Width) / 2), ((screenRectangle.Height + potion.Height) / 2), potion.Width / 4, potion.Height / 4);
item = new ItemPotion(potion, itemrect, screenRectangle);
OnScreenLevel = Content.Load<SpriteFont>("OnScreenLevel");
charAtkSound = Content.Load<SoundEffect>("AttackSound"); //loads attack sound
Grave = Content.Load<Texture2D>("Grave");
HealthBar = Content.Load<Texture2D>("HealthBar");
btnPlay = new cButton(Content.Load<Texture2D>("Button1"), graphics.GraphicsDevice);
movement = new cMovement(Content.Load<Texture2D>("SpritesRe"), new Vector2(rndXpos, rndYpos), 64, 57, HealthBar, cBar,Grave);
Inv = new InventoryScreen(movement);
TempNPC = Content.Load<Texture2D>("MonsterSprite");
//npc_creation[i] = new NPC_Creation(Content.Load<Texture2D>("MonsterSprite"), screenRectangle,HealthBar,Content.Load<Texture2D>("Grave"));
btnPlay.setPosition(new Vector2(350, 300));
StartGame();
#endregion
}
/// <summary>
/// UnloadContent will be called once per game and is the place to unload
/// all content.
/// </summary>
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}
protected override void Update(GameTime gameTime)
{
KeyboardState keyState = Keyboard.GetState();
TranslateCamera(keyState);
//Spawns the mobs
if (map.getSpawnStatus() == true)
{
npc_creation = new NPC_Creation[map.getNumOfNPC()];
for (int i = 0; i < npc_creation.Length; i++)
{
npc_creation[i] = new NPC_Creation(TempNPC, screenRectangle, HealthBar, Grave);
npc_creation[i].setSpawnPosition(-10*i);
}
map.setSpawnStatus(false);
}
//888888
MouseState mouse = Mouse.GetState();
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
this.Exit();
switch (CurrentGameState)
{
case GameState.MainMenu: // if mouse is clicked... call method
if (btnPlay.isClicked == true) CurrentGameState = GameState.charCreate;
btnPlay.Update(mouse);
break;
case GameState.charCreate: // creating character
charCreate.Show(); // show menu
if (charCreate.create == true)
{
charCreate.Close(); // close menu
CurrentGameState = GameState.Playing;
}
break;
case GameState.Playing: // if true.. load new image...
backGround = Content.Load<Texture2D>("Game Map");
if (movement.Alive == false)
{
CurrentGameState = GameState.GameOver;
}
else if (Keyboard.GetState().IsKeyDown(Keys.E))
{
Inv.Show();
}
else if (Keyboard.GetState().IsKeyDown(Keys.Q))
{
Inv.Hide();
}
break;
case GameState.GameOver: // end game screen
end.Show(); // pop up screen
if (end.retry == true) // if click retry
{
Application.Restart(); // restart program
break;
}
if (end.quit == true) // if click quit
{
this.Exit(); // quit
break;
}
break;
}
if (movement.getAttackSound() == true)
{
charAtkSound.Play();
}
for (int i = 0; i < npc_creation.Length; i++)
{
//checks if character takes damage from being in range of enemy
npc_creation[i].charWithinDamageRange(movement.getCharLocation());
//checks if character is within sight range
npc_creation[i].charWithinRange(movement.getCharLocation());
//calls on monster update method, with the inputs:
npc_creation[i].Update(gameTime, npc_creation[i].withinRangeOrNot(), movement.getCharLocation(), i);
//checks if monster is in range of character attack
npc_creation[i].monsterTakeDamageRange(movement.getAttackRadius());
npc_creation[i].charWithinDamageRange(movement.getCharLocation());
//*************************************************************Added Jan 9th*****************
//checks if monster is dead, and once dead to give character EXP from mob once
if ((npc_creation[i].deadOrAlive() == false)&&(npc_creation[i].getEXPgivenOrNot() == false))
{
//character gains exp determined by returnEXPworth
player1.EXPgained(npc_creation[i].returnEXPworth());
//tells program that exp has been gained by character
npc_creation[i].setEXPgiven();
//*****BELOW PRINTS OUT CURRENT EXP, GAME MUST BE SET TO CONSOLE MODE****
Console.WriteLine("Current char EXP is "+player1.getEXP());
}
//**************************************************************Added Jan 9th****************
if (npc_creation[i].withinDamageRangeOrNot() == true)
{
movement.decreaseCharHealth();
npc_creation[i].charWithinDamageRange(movement.getCharLocation());
npc_creation[i].withinDamageRangeOrNot();
}
while (npc_creation[i].inAttackRadius() == true)
{
npc_creation[i].decreaseMobHealth(item);
movement.resetAttackRadius();
npc_creation[i].monsterTakeDamageRange(movement.getAttackRadius());
npc_creation[i].inAttackRadius();
}
movement.Update(gameTime, map);
}
item.Update(movement.getCharLocation(), Inv);
base.Update(gameTime);
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// do not erase comments! added SUnday
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, null, null, null, null, camera.TransformMatrix);
//spriteBatch.Begin();
spriteBatch.Draw(backGround, Vector2.Zero, Color.White);
switch (CurrentGameState)
{
case GameState.MainMenu: // if on main menu... draw button...
btnPlay.Draw(spriteBatch);
break;
case GameState.Playing: // otherwise.. draw the character sprites
movement.Draw(spriteBatch);
player1.checkLevel();
spriteBatch.DrawString(OnScreenLevel, "Current Level: " + player1.getLvL() +"\nUserName: " +charCreate.getInput(), new Vector2(0, 5), Color.White);
for (int i = 0; i < npc_creation.Length; i++)
{
npc_creation[i].Draw(spriteBatch, Color.White);
}
item.Draw(spriteBatch);
break;
}
spriteBatch.End();
// TODO: Add your drawing code here
base.Draw(gameTime);
}
private void TranslateCamera(KeyboardState keyState)
{
Vector2 cameraTranslate = Vector2.Zero;
if (keyState.IsKeyDown(Keys.W))
cameraTranslate.Y =1;
cameraTranslate.X = 0;
if (keyState.IsKeyDown(Keys.A))
cameraTranslate.X =-1;
cameraTranslate.Y = 0;
if (keyState.IsKeyDown(Keys.D))
cameraTranslate.X =1;
cameraTranslate.Y = 0;
if (keyState.IsKeyDown(Keys.S))
cameraTranslate.Y =-1;
cameraTranslate.X = 0;
camera.Position += cameraTranslate;
}
private void StartGame()
{
map = new Map(backGround, movement);
item.spawnLocation();
for (int i = 0; i < npc_creation.Length; i++)
{
npc_creation[i].setSpawnPosition(i);
}
}