1. C# / Говнокод #3665

    +118

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    public void isCollideWith(gObj obj, ref bool xCollision, ref bool yCollision)
    {
    	xCollision = (obj.bounds.Top <= this.bounds.Center.Y && this.bounds.Center.Y <= obj.bounds.Bottom) &&
        		     (obj.bounds.Top > this.bounds.Top && obj.bounds.Top < this.bounds.Bottom) ||
    		     (obj.bounds.Bottom > this.bounds.Top && obj.bounds.Bottom < this.bounds.Bottom);
    	yCollision = (obj.bounds.Left <= this.bounds.Center.X && this.bounds.Center.X <= obj.bounds.Right) &&
    		     (obj.bounds.Left > this.bounds.Left && obj.bounds.Left < this.bounds.Right) ||
    		     (obj.bounds.Right > this.bounds.Left && obj.bounds.Right < this.bounds.Right);
    }

    Вот так я проверяю произошло ли столкновения двух(obj и this) прямоугольных объектов.

    Запостил: FMB, 08 Июля 2010

    Комментарии (9) RSS

    • думаешь тебе щас махом нарисуют как надо это делать правильно? google в помощь.
      Ответить
      • Не надо мне ничего рисовать! Я до всего стараясь сам дойти(если не считать гугл). И я не о чём не думал когда выкладывал код, я просто хотел поделится своим тёпленьким, свеженьким, и т.д.
        Ответить
        • кстати когда я писал аналогичную логику (тоже столкнвоение тоже прямоугольники) лет 7 назад, у меня такие же проверки были ))), правда чека центра там не было, не помню почему - но работало нормально
          Ответить
        • Опасно срать у всех на виду. Засмеют за безкультурщину.
          Ответить
          • Не только. Мне рассказывали, как человека за границу не выпустили из-за то, что не был вовремя уплачен штраф за справление нужды на улице. Реальная история.
            Ответить
    • Есть специальный класс Rectangle
      В данном примере можно сделать так:
      Rectangle.Intersect(new Rectangle(x1, y1, width1, height1), new Rectangle(x2, y2, width2, height2));
      Ответить

    Добавить комментарий