I can't get my 3D model to display, I think it might have to do with the draw order inside of my Draw method. The part I'm working on is the aircraft selection menu I'm making for a flight sim.
Here's my code:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace Thin_Air
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
GameState state;
Model airCraft;
float modelRotation, aspectRatio;
Vector3 modelPosition, cameraPosition, pos;
int iii, mouseX, mouseY;
string[] info;
SpriteFont font;
KeyboardState kbState_Old, kbState_New;
MouseState mouseState;
SelectedAirCraft selectedObject;
Texture2D airCraftSelectBG, selectionSquare, selectionSquare_Hover, displayPanel;
Song introMusic;
bool hit;
public enum SelectedAirCraft
{
EuroFighter,
Craft2,
Craft3
}
public enum GameState
{
MainMenu,
AreaSelect,
AirCraftSelect,
Flying,
EndFlight,
Pause
}
public void Draw_AirCraftSelection_Background()
{
spriteBatch.Draw(airCraftSelectBG, new Rectangle(0, 0, 800, 600), Color.White);
}
public void Draw_AirCraftSelection_DisplayPanel()
{
spriteBatch.Draw(displayPanel, new Rectangle(0, 400, 800, 200), Color.White);
}
public void Draw_AirCraftSelection_Models(Vector3 pos)
{
Matrix[] transforms = new Matrix[airCraft.Bones.Count];
airCraft.CopyAbsoluteBoneTransformsTo(transforms);
foreach (ModelMesh mesh in airCraft.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.World = transforms[mesh.ParentBone.Index] *
Matrix.CreateRotationY(modelRotation) *
Matrix.CreateTranslation(modelPosition);
effect.View = Matrix.CreateLookAt(cameraPosition, pos, Vector3.Up);
effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),aspectRatio,1.0f,10000.0f);
}
mesh.Draw();
}
}
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
this.IsMouseVisible = true;
state = GameState.AirCraftSelect;
selectedObject = SelectedAirCraft.Craft2;
pos = new Vector3((float)iii, 0, 0);
info = new string[5];
iii = -100;
hit = false;
cameraPosition = new Vector3(0.0f, 150.0f, 180.0f);
modelRotation = 0.0f;
modelPosition = Vector3.Zero;
}
protected override void Initialize()
{
kbState_Old = Keyboard.GetState();
for (int i = 0; i < 5; i++)
info[i] = "...";
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
airCraft = Content.Load<Model>("Models\\eurofighter_fbx");
airCraftSelectBG = Content.Load<Texture2D>("Backgrounds\\nebo004");
selectionSquare = Content.Load<Texture2D>("AirCraftSelect\\SelectedAirCraft");
selectionSquare_Hover = Content.Load<Texture2D>("AirCraftSelect\\SelectedAirCraft_Hover");
displayPanel = Content.Load<Texture2D>("AirCraftSelect\\Panel");
introMusic = Content.Load<Song>("Audio\\Intro\\Game_Intro_Music");
font = Content.Load<SpriteFont>("Fonts\\SpriteFont1");
aspectRatio = graphics.GraphicsDevice.Viewport.AspectRatio;
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
mouseState = Mouse.GetState();
mouseX = mouseState.X;
mouseY = mouseState.Y;
switch (state)
{
case GameState.MainMenu:
break;
case GameState.AreaSelect:
break;
case GameState.AirCraftSelect:
kbState_New = Keyboard.GetState();
if (kbState_New.IsKeyDown(Keys.D))
{
if (!kbState_Old.IsKeyDown(Keys.D))
{
}
}
else if (kbState_Old.IsKeyDown(Keys.D))
{
if (iii <= -100)
iii = 100;
else
iii -= 100;
pos = new Vector3(iii, 0, 0);
switch (selectedObject)
{
case SelectedAirCraft.Craft2:
info[0] = "Name: Craft2";
info[1] = "Top Speed: 0";
info[2] = "Type: 0";
info[3] = "Weapon: 0";
info[4] = "Good For: 0";
break;
case SelectedAirCraft.Craft3:
info[0] = "Name: Craft3";
info[1] = "Top Speed: 0";
info[2] = "Type: 0";
info[3] = "Weapon: 0";
info[4] = "Good For: 0";
break;
case SelectedAirCraft.EuroFighter:
info[0] = "Name: EuroFighter";
info[1] = "Top Speed: 0";
info[2] = "Type: 0";
info[3] = "Weapon: 0";
info[4] = "Good For: 0";
break;
}
hit = true;
}
if (kbState_New.IsKeyDown(Keys.A))
{
if (!kbState_Old.IsKeyDown(Keys.A))
{
}
}
else if (kbState_Old.IsKeyDown(Keys.A))
{
if (iii >= 100)
iii = -100;
else
iii += 100;
pos = new Vector3(iii, 0, 0);
switch (selectedObject)
{
case SelectedAirCraft.Craft2:
info[0] = "Name: Craft2";
info[1] = "Top Speed: 0";
info[2] = "Type: 0";
info[3] = "Weapon: 0";
info[4] = "Good For: 0";
break;
case SelectedAirCraft.Craft3:
info[0] = "Name: Craft3";
info[1] = "Top Speed: 0";
info[2] = "Type: 0";
info[3] = "Weapon: 0";
info[4] = "Good For: 0";
break;
case SelectedAirCraft.EuroFighter:
info[0] = "Name: EuroFighter";
info[1] = "Top Speed: 0";
info[2] = "Type: 0";
info[3] = "Weapon: 0";
info[4] = "Good For: 0";
break;
}
if (!hit)
hit = true;
}
switch (iii)
{
case 100:
selectedObject = SelectedAirCraft.Craft2;
break;
case 0:
selectedObject = SelectedAirCraft.EuroFighter;
break;
case -100:
selectedObject = SelectedAirCraft.Craft3;
break;
}
kbState_Old = kbState_New;
modelRotation += (float)gameTime.ElapsedGameTime.TotalMilliseconds * MathHelper.ToRadians(0.03f);
break;
case GameState.Flying:
break;
case GameState.Pause:
break;
case GameState.EndFlight:
break;
}
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
switch (state)
{
case GameState.MainMenu:
break;
case GameState.AreaSelect:
break;
case GameState.AirCraftSelect:
Draw_AirCraftSelection_Background();
Draw_AirCraftSelection_Models(pos);
spriteBatch.DrawString(font, info[0], new Vector2(50, 620), Color.White);
spriteBatch.DrawString(font, info[1], new Vector2(50, 640), Color.White);
spriteBatch.DrawString(font, info[2], new Vector2(50, 660), Color.White);
spriteBatch.DrawString(font, info[3], new Vector2(50, 680), Color.White);
spriteBatch.DrawString(font, info[4], new Vector2(50, 700), Color.White);
if(!hit)
{
spriteBatch.DrawString(font, "Welcome", new Vector2(50, 620), Color.White);
}
if ((mouseX >= 300 && mouseX <= 500) && (mouseY >= 200 && mouseY <= 400))
{
spriteBatch.Draw(selectionSquare_Hover, new Rectangle(300, 200, 200, 200), Color.White);
if (mouseState.LeftButton == ButtonState.Pressed)
state = GameState.Flying;
}
else
{
spriteBatch.Draw(selectionSquare, new Rectangle(300, 200, 200, 200), Color.White);
}
break;
case GameState.Flying:
break;
case GameState.Pause:
break;
case GameState.EndFlight:
break;
}
spriteBatch.End();
base.Draw(gameTime);
}
}
}