C# XNA Ссылка на объект требуется для нестатического поля, метода или свойства.

Я пытаюсь создать спаунер яиц, но выдает эту ошибку.
Пытался исправить эту ошибку, но, к сожалению, не могу.
Я знаю, что XNA Framework устарел, но я использую его для обучения.

Кто-нибудь поможет мне?
Спасибо.

Код:

    public class Game1 : Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        int screenWidth;
        int screenHeight;
        List<Eggs> eggList = new List<Eggs>();


        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            graphics.IsFullScreen = false;
            graphics.PreferredBackBufferHeight = 600;
            graphics.PreferredBackBufferWidth = 800;
            Content.RootDirectory = "Content";
        }

        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            
            screenWidth = GraphicsDevice.Viewport.Width;
            screenHeight = GraphicsDevice.Viewport.Height;

            
        }

        public class Eggs
        {
            public Texture2D texture;
            public Vector2 position;
            public Vector2 velocity1;
            
            public bool isVisible = true;
            
            Random random = new Random();
            int randX;
            
            public Eggs(Texture2D newTexture, Vector2 newPosition)
            {
                texture = newTexture;
                position = newPosition;
                
                randX = random.Next(0, 400);
                velocity = new Vector2(randX, 0);
            }
            
            public void Update(GraphicsDevice graphic)
            {
                position += velocity;
                
                if(position.Y < 0 - texture.Height);
                    isVisible = false;
            }
            
            public void Draw(SpriteBatch spriteBatch)
            {
                spriteBatch.Draw(texture, position, Color.White);
            }
        }

        float spawn = 0;
        protected override void Update(GameTime gameTime)
        {
            spawn += (float)gameTime.ElapsedGameTime.TotalSeconds;
            
            foreach(Eggs eggList in eggList)
                eggList.Update(graphics.GraphicsDevice);
                
            LoadEggs();

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

            base.Update(gameTime);
        }
        
        public void LoadEggs()
        {
            if(spawn >= 1)
            {
                spawn = 0;
                if(eggList.Count() < 4)
                    eggList.Add(new Eggs(Content.Load<Texture2D>("Images/egg"), new Vector2(50, 0)));
            }
            
            for(int i = 0; i < eggList.Count; i++)
                if(!eggList[i].isVisible)
                {
                    eggList.RemoveAt(i);
                    i--;
                }
        }

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

            spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
            foreach(Eggs eggList in eggList)
            {
            Eggs.Draw(spriteBatch);
            }
            spriteBatch.End();
            base.Draw(gameTime);
        }
    }

Почему возникает эта ошибка?

error CS0120: An object reference is required for the non-static field, method, or property 'Game1.E ggs.Draw(SpriteBatch)'

Кажется, вы разместили больше кода, чем было бы разумно для вашей проблемы. Пожалуйста, прочитайте Как спросить и как сделать минимальный воспроизводимый пример; предоставление MRE помогает пользователям ответить на ваш вопрос, а будущие пользователи связаны с вашей проблемой.

gunr2171 10.04.2022 00:54
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
1
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что 6. строка с конца создает проблемы. Eggs.Draw(SpriteBatch) нельзя так назвать. Поскольку Eggs не является статическим классом, а Draw не является статическим методом, это означает, что вам нужен объект типа Eggs для вызова метода Draw.

Итак, что-то вроде этого нужно:

var egg = new Eggs();
egg.Draw(SpriteBatch);

Кроме того, этот цикл foreach не имеет смысла, не используйте одно и то же имя для элемента, поскольку это имя коллекции, через которую вы проходите.

Другие вопросы по теме