Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > движение объектов в форме


Автор: KoLiZeI 18.12.2008, 11:40
Нард помогите с проблемой, нужно реализовать класс "зоопарка", т.е объекты будут двигаться по полю и при столкновении со стенкой или с другим объектом менять направление. Нужна ОО модель, т.е. за животных должен отвечать 1 класс. Поиск не принёс результатов.

Автор: Partizan 18.12.2008, 11:51
KoLiZeI, какое у объекта должно быть представление?

Автор: KoLiZeI 18.12.2008, 11:54
Partizan По идее объект на форме должен быть рисунком, но рисунок будет 1 и прямоугольный. Он двигается по полю и если встречает стенку или себе подобный объект движется в другую сторону. Или ты не об этом? Если проще использовать круг для определения радиуса столкновения пусть будет круг не принципиально.

Автор: Partizan 18.12.2008, 11:58
KoLiZeI, ну а в чём пробелема? ) По таймеру передвигать рисунок в нужном направлении =) При столкновении - менять направление на противоположное =) Это ж не сложно)

з.ы. с прямоугольными объектами всяко легче будет =)

Автор: KoLiZeI 18.12.2008, 12:00
ээээ.... )) 
 smile 

Автор: Partizan 18.12.2008, 12:05
KoLiZeI, ну...
1) допустим на форме рисунок....
2) допустим он лежит внутри прямоугольного контрола PictureBox...начальные координаты - 0,0(левый верхний угол)
3) задаёмся текущим направлением...допустим это будет право-низ
    В итоге по таймеру в замисимости от направления - меняем координаты
    если текущее направление - право-низ, то 
                 PictureBox.Top += 1; PictureBox.Left += 1;
4) если дошли до нижней границы формы, то есть (PictureBox.Top + PictureBox.Height >= (Form.Height - Высота заголовка)),
    то меняем текущеенаправление на право-верх...в итоге на каждой итерации 
                 PictureBox.Top -= 1; PictureBox.Left += 1;

Добавлено через 11 секунд
Идея ясна?

Автор: KoLiZeI 18.12.2008, 12:06
А столкновение объектов?

Автор: Partizan 18.12.2008, 12:13
KoLiZeI,

у тебя есть двумерная плоскость с координатами x и y... как опеределить, что два прямоугольника пересекаются?

Автор: KoLiZeI 18.12.2008, 12:15
Класс "коровы" описал так, правильно?
Код

public class Cow
    {
        //public Cow()
        //{

        //}

        //public Cow(int xCoordinate, int yCoordinate, int radius)
        //{
        //    this.XCoordinate = xCoordinate;
        //    this.YCoordinate = yCoordinate;
        //    this.Radius = radius;
        //}

        public Cow(int xCoordinate, int yCoordinate, int radius, int xVector, int yVector)
        {
            this.XCoordinate = xCoordinate;
            this.YCoordinate = yCoordinate;
            this.Radius = radius;
            this.XVector = xVector;
            this.yVector = yVector;
        }

        public int XCoordinate
        {
            get;
            private set;
        }

        public int YCoordinate
        {
            get;
            private set;
        }

        public int Radius
        {
            get;
            private set;
        }

        public int XVector
        {
            get;
            private set;
        }

        public int YVector
        {
            get;
            private set;
        }

        public void Move()
        {
            this.XCoordinate += XVector;
            this.YCoordinate += YVector;
        }

        public void Crash(int x, int y)
        {
            this.XVector -= x * 2;
            this.YVector -= y * 2;
        }
    }


Автор: Partizan 18.12.2008, 12:20
KoLiZeI, Если чесно - лень в коде разбираться...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)