Методы вызываются, но код внутри них не выполняется - C#

Узнай цену своей работы

Формулировка задачи:

Пишу платформер. Метод falling отвечает за падение игрока под действием гравитации, метод checkCollision останавливает игрока, если тот столкнулся с препятствием. При попытке вызвать эти методы ничего не происходит: координаты не меняются, столкновения не проверяются (пробовал переносить код методов в код таймера - работает исправно, а в методах никак). Подскажите, где моя ошибка?
namespace _3d_engine
{
    public partial class Form1 : Form
    {
        public const float gravity = 0.1f;
        public const float obstacleThickness = 15;
        List<obstacle> obstacles = new List<obstacle>();
        player player1 = new player(75, 35, 20);
 
        private struct player
        {
            public RectangleF model;
            public float  Vy;
            public player(float x, float y, float size)
            {
                Vy = 0;
                model = new RectangleF(x, y, size, size);
            }
        }
 
        private struct obstacle
        {
            public RectangleF model;
            public bool touched;
            public obstacle(float x, float y, float width)
            {
                touched = false;
                model = new RectangleF (x, y, width, obstacleThickness);
            }
        }
 
        private void checkCollision(player p, obstacle o)
        {
            if (p.model.IntersectsWith(o.model))
            {
                p.Vy = 0;
                o.touched = true;
            }
        }
 
        private void falling(player p)
        {
            p.Vy += gravity;
            p.model.Y += player1.Vy;
        }
 
        private void drawWorld(List<obstacle> os, player p)
        {
            Graphics g = CreateGraphics();
            g.FillEllipse(Brushes.OrangeRed, p.model);
            foreach (obstacle o in os)
            {
                g.FillRectangle(Brushes.Blue, o.model);
            }
        }
 
        private void addNewObstacle(float x, float y, float width)
        {
            obstacles.Add(new obstacle(x, y, width));
        }
 
        public Form1()
        {
            InitializeComponent();
            addNewObstacle(50, 100, 100);
        }
 
        private void drawTimer_Tick(object sender, EventArgs e)
        {
            falling(player1);
            foreach (obstacle o in obstacles)
            {
                checkCollision(player1, o);
            }
            drawWorld(obstacles, player1);
        }
 
    }
}

Решение задачи: «Методы вызываются, но код внутри них не выполняется»

textual
Листинг программы
checkCollision(ref player1, ref o);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы