Си диез / Говнокод #3665 Ссылка на оригинал

0

  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 FMB, (Updated )

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

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

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8