NotAComputerScienceStudent Ответов: 1

Как создать систему коллизий в C# visual studio


Поэтому я делал такую игру, как flappy bird, однако я не могу создать правильную систему Коллисона. Птица представляет собой круглый эллипс, а стены-прямоугольники.

В моей нынешней системе столкновение работает беспорядочно и бессмысленно. В основном он сломан.

Визуальное представление
https://youtu.be/1RElwfCVNZg

Gametimer является частью моей функции обновления кадра в основном каждый .1 сек появляется новый кадр

Что я уже пробовал:

Как я сделал птицу и прямоугольную стену
//Bird
               new Settings();
               //Bird
               //Set Colour Bird
               SolidBrush Yellow = new SolidBrush(Color.Yellow);
               Graphics Canvas = e.Graphics;
               //Make Bird
               Canvas.FillEllipse(Yellow, Bird.X, Bird.Y, Settings.WidthBird, Settings.HeightBird);

               SolidBrush Black = new SolidBrush(Color.Black);

               //Max Height
               int MAxHeight = PbCanvas.Size.Height;
               MH = MAxHeight - 80;
               if (i == 0 || i % j == 1)
               {
                   HeightD = random.Next(10, MAxHeight - 80);
               }
               HeightU = MH - HeightD;
               Bottom = PbCanvas.Bottom;
               //Walls
               Canvas.FillRectangle(Black, X, 0, 50, HeightU);
               Canvas.FillRectangle(Black, X, Bottom - HeightD, 50, HeightD);

I и J означают 2 вещи. Я означает, сколько раз в стену породил, а j-количество secodns между каждой стены, которую породил

Моя идея для столкновения такова
if (Bird.X == X && Bird.Y > HeightD && Bird.Y < HeightU - 80) 
            {
                GameOver = true;
                label2.Visible = true;
                MessageBox.Show("You Died");
                X = 300; //Defauly X value of wall
                GameTimer.Stop();
            }

Здесь же присутствуют 2 стены. Если его высота больше высоты верхней стены, то он пройдет, а если высота нижней стены меньше, то он пройдет. Проблемы, с которыми я сталкиваюсь, заключаются в том, что значения птиц находятся в координатах X и Y, а значения стен-в высоте. Какие могут быть возможные варианты решения этой проблемы

Richard MacCutchan

Вы должны использовать одну и ту же систему координат для птиц и стен.

1 Ответов

Рейтинг:
1

RickZeeland

Вот пример использования .IntersectsWith():
Обнаружение столкновений в C#.Net & Java пример | биты и фрагменты кода[^]