此方法不接受此参数的 null.但在我看来,纹理被编程为加载

本文关键字:纹理 编程 加载 在我看来 不接受 参数 null 此方法 | 更新日期: 2023-09-27 18:34:34

>我要为自己创建一个游戏来学习,但我遇到了一个问题,我真的不知道如何解决它。

错误是:

This method does not accept null for this parameter.

我已经搜索过,它告诉我我没有正确加载纹理,我想我做到了。因为它在绘制命令之前。

这是我的游戏1.cs:

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;
namespace Eggt_Fast
    {
        /// <summary>
        /// This is the main type for your game
        /// </summary>
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
            Player player = new Player();
            public Game1()
            {
                graphics = new GraphicsDeviceManager(this);
                Content.RootDirectory = "Content";
                graphics.PreferredBackBufferHeight = 600;
                graphics.PreferredBackBufferWidth = 800;
                this.Window.Title = "Eggt Fast";
                graphics.ApplyChanges();
            }
            /// <summary>
            /// Allows the game to perform any initialization it needs to before starting to run.
            /// This is where it can query for any required services and load any non-graphic
            /// related content.  Calling base.Initialize will enumerate through any             components
            /// and initialize them as well.
            /// </summary>
            protected override void Initialize()
            {
                // TODO: Add your initialization logic here
                base.Initialize();
            }
            /// <summary>
            /// LoadContent will be called once per game and is the place to load
            /// all of your content.
            /// </summary>
            protected override void LoadContent()
            {
                // Create a new SpriteBatch, which can be used to draw textures.
                spriteBatch = new SpriteBatch(GraphicsDevice);
                // TODO: use this.Content to load your game content here
            }
            /// <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
            }
            /// <summary>
            /// Allows the game to run logic such as updating the world,
            /// checking for collisions, gathering input, and playing audio.
            /// </summary>
            /// <param name="gameTime">Provides a snapshot of timing values.</param>
            protected override void Update(GameTime gameTime)
            {
                // Allows the game to exit
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                    this.Exit();
                // TODO: Add your update logic here
                player.Update(gameTime);
                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);
                // TODO: Add your drawing code here
                spriteBatch.Begin();
                player.Draw(spriteBatch);
                spriteBatch.End();
                base.Draw(gameTime);
            }
        }
    }

这是我的播放器.cs:

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

namespace Eggt_Fast
{
    class Player
    {
        public Texture2D texture;
        public Vector2 position;
        public int speed;
        public Rectangle boundingBox;
        public bool isColliding;

        public Player()
        {
            texture = null;
            position = new Vector2(300, 300);
            speed = 14;
            isColliding = false;
        }
        public void LoadContent(ContentManager Content)
        {
            texture = Content.Load<Texture2D>("Player");
        }
        public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(texture, position, Color.White); //THE ERROR IS HERE.
        }

        public void Update(GameTime gameTime)
        {
        }
    }
}

此方法不接受此参数的 null.但在我看来,纹理被编程为加载

我认为你的问题可能是你从不打电话给Player.LoadContent().由于您不从Game1.LoadContent()调用此内容,因此永远不会加载纹理,这就是导致错误的原因。要解决您的问题,您可以尝试如下操作:

在游戏中1

protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            // TODO: use this.Content to load your game content here
            player.LoadContent(Content);
        }

这将在你的玩家职业中调用LoadContent空白,我认为你最初的想法会自动发生。 LoadContent()不会像 Game1 的LoadContent那样自动调用,因为Player只是一个常规类,不会像Game1那样从其他类继承。