2013-08-29 7 views
0

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

здесь картина сообщения: http://crystalnix.deviantart.com/art/XNa-Problem-396626207?ga_submit_new=10%253A1377747418

Это основной файл.

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.Input.Touch; 
using Microsoft.Xna.Framework.Media; 
using Mochi_Mochi_Pets_Life.Script.Screen; 

namespace Mochi_Mochi_Pets_Life 
{ 

public class MainFile : Microsoft.Xna.Framework.Game 
{ 
    GraphicsDeviceManager graphics; 
    SpriteBatch spriteBatch; 
    ScreenStates screentState; 

    Rectangle TouchS_Y_X; 

    Logo logo; 
    Menu0 menu; 
    Choose_Pets choose_pets; 
    ScreenStates.CurrentGameState GameState; 

    public MainFile() 
    { 
     graphics = new GraphicsDeviceManager(this); 
     Content.RootDirectory = "Content"; 
     Content.RootDirectory = "Script\\Screen"; 

     choose_pets = new Choose_Pets(); 

     this.screentState = new ScreenStates(); 
     this.logo = new Logo(GraphicsDevice); 
     this.menu = new Menu0(); 
     // Frame rate is 30 fps by default for Windows Phone. 
     TargetElapsedTime = TimeSpan.FromTicks(333333); 

     // Extend battery life under lock. 
     InactiveSleepTime = TimeSpan.FromSeconds(1); 

     GameState = ScreenStates.CurrentGameState.Logo; 


    } 


    protected override void Initialize() 
    { 
     choose_pets.Initialize_choosepets(); 
     // TODO: Add your initialization logic here 
     base.Initialize(); 
    } 


    protected override void LoadContent() 
    { 
     TouchS_Y_X = new Rectangle(0, 0, 1, 1); 
     // Create a new SpriteBatch, which can be used to draw textures. 
     spriteBatch = new SpriteBatch(GraphicsDevice); 

     if (GameState == ScreenStates.CurrentGameState.Logo) 
      this.logo.Load(this.Content, this.GraphicsDevice); 

     if (GameState == ScreenStates.CurrentGameState.Menu) 
      this.menu.Load_Menu(GraphicsDevice, Content); 

     if (logo.FadeOut_logo == true) 
      GameState = ScreenStates.CurrentGameState.Menu; 

     if (GameState == ScreenStates.CurrentGameState.CharactersChooser) 
     this.choose_pets.Load_ChoosePet(this.Content, this.GraphicsDevice); 
     // TODO: use this.Content to load your game content here 
    } 


    protected override void UnloadContent() 
    { 
     // TODO: Unload any non ContentManager content here 
     //this.logo.Unload_logo(Content); 
    } 


    protected override void Update(GameTime gameTime) 
    { 

     // Allows the game to exit 
     if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) 
      this.Exit(); 

        if (GameState == ScreenStates.CurrentGameState.Logo) 
       logo.Update_logo(gameTime); 


        if (GameState == ScreenStates.CurrentGameState.CharactersChooser) 
        choose_pets.Update_petchoose(gameTime); 

     // TODO: Add your update logic here 

     base.Update(gameTime); 
    } 


    protected override void Draw(GameTime gameTime) 
    { 
     GraphicsDevice.Clear(Color.Black); 

     spriteBatch.Begin(); 

        if (GameState == ScreenStates.CurrentGameState.Logo) 
         logo.Draw(spriteBatch); 

        if (logo.FadeOut_logo == true) 
         menu.Draw_Menu(spriteBatch); 

        if (GameState == ScreenStates.CurrentGameState.CharactersChooser) 
         choose_pets.Draw_petChoose(spriteBatch); 

     spriteBatch.End(); 
     base.Draw(gameTime); 
    } 
} 
} 

И Это одно меню, которое дает мне проблемы

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

    namespace Mochi_Mochi_Pets_Life 
    { 
class Menu0 
{ 
    Texture2D Text2D_Background; 
    Rectangle Rec_Background; 

    Texture2D ButtonText2DPlay; 
    Rectangle ButtonRecPlay; 


    public void Load_Menu(GraphicsDevice Graphics_Menu, ContentManager Content_Menu) 
    { 
     Content_Menu.RootDirectory = "Content"; 

     Text2D_Background = Content_Menu.Load<Texture2D>("UI\\MenuBack"); 
     Rec_Background = new Rectangle(0, 0, Graphics_Menu.Viewport.Width,     Graphics_Menu.Viewport.Height); 

     ButtonText2DPlay = Content_Menu.Load<Texture2D>("UI\\Buttons\\New Games"); 
     ButtonRecPlay = new Rectangle(Graphics_Menu.Viewport.Width, 400, 150, 40); 
    } 


    public void Draw_Menu(SpriteBatch Spritebatch_Menu) 
    { 
     Spritebatch_Menu.Draw(Text2D_Background, Rec_Background, Color.White); 
     Spritebatch_Menu.Draw(ButtonText2DPlay, ButtonRecPlay, Color.White); 
    } 
} 
    } 

Хорошо, что это делает, что, когда мой логотип Fade это == верно состояние игры Перейти к основной Мане но никогда случается всегда ошибка, я ценю вашу помощь ..

+0

это spritebatch null в этой точке? это похоже на то, что это – Jonesopolis

+0

. Я думаю, что это нулевое значение, но почему, если у меня есть мой Spritebatch и в загрузке графического устройства и Contentmanager im dunno xD – user2727653

+0

, я думаю, что отладка его вы можете понять. – Jonesopolis

ответ

1

Loading_Menu никогда не вызывается, поэтому текстура Text2D_Background всегда нуль

Вы должны понимать, что LoadContent есть с а только в игре инициализации, поэтому сравнение gamestate бесполезно, потому что только будет загружать содержимое логотипа.

Как решение, которое вы можете загрузить все содержимое в инициализационном, или вы можете загрузить его при изменении GameState при необходимости содержания не загружались до

0

Я думаю, что ваш Text2D_Background имеет нулевое значение, и это потому, что вы никогда не называйте Load_Menu. Вы проверяете gameState в LoadContent, и он возвращает false.

if (GameState == ScreenStates.CurrentGameState.Menu) 

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

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