Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.07.2012, 23:51
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Определение столкновения элементов на js
Есть старенькая проверенная ф-ия(я ей столкновение спрайтов проверял, работает)

function collisionDetection(x1, y1, w1, h1, x2, y2, w2, h2) { 
    return x1 < (x2 + w2) && y1 < (y2 + h2) && (x1 + w1) > x2 && (y1 + h1) > y2; 
}


function realWidth(el) {
    return parseInt(getStyle(el, 'border-left-width')) + parseInt(getStyle(el, 'margin-left')) + parseInt(getStyle(el, 'width')) + parseInt(getStyle(el, 'margin-right')) + parseInt(getStyle(el, 'border-right-width')); 
}

function realHeight(el) {
    return parseInt(getStyle(el, 'border-top-width')) + parseInt(getStyle(el, 'margin-top')) + parseInt(getStyle(el, 'height')) + parseInt(getStyle(el, 'margin-bottom')) + parseInt(getStyle(el, 'border-bottom-width')); 
}

function isCollide(a, b) { 
    var p1 = absolutePosition(a), p2 = absolutePosition(b); 
    return collisionDetection(p1.left, p1.top, realWidth(a), realHeight(a), p2.left, p2.top, realWidth(b), realHeight(b)); 
}


И такую хрень написал чот не определяет
Ответить с цитированием
  #2 (permalink)  
Старый 30.07.2012, 23:56
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

http://gyazo.com/8865ca0528970902280a40c29574fe0c тут например формула работает

А тут так определяет столкновение

http://gyazo.com/aab7bc9cf253117634ab06919e6d8276

а так нет

http://gyazo.com/416b4f192277d98ff76beb148cde91b9

формулу саму тыщу раз проверил, и остальное тоже вроде правильно
Моя не понимать

Последний раз редактировалось Антон Крамолов, 30.07.2012 в 23:58.
Ответить с цитированием
  #3 (permalink)  
Старый 31.07.2012, 00:01
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Епать я дебил вместо паддинга маргин написал вот и неправильно считало, надо так

function realWidth(el) {
    return parseInt(getStyle(el, 'border-left-width')) + parseInt(getStyle(el, 'padding-left')) + parseInt(getStyle(el, 'width')) + parseInt(getStyle(el, 'padding-right')) + parseInt(getStyle(el, 'border-right-width')); 
}

function realHeight(el) {
    return parseInt(getStyle(el, 'border-top-width')) + parseInt(getStyle(el, 'padding-top')) + parseInt(getStyle(el, 'height')) + parseInt(getStyle(el, 'padding-bottom')) + parseInt(getStyle(el, 'border-bottom-width')); 
}
Ответить с цитированием
  #4 (permalink)  
Старый 30.01.2013, 13:58
Интересующийся
Отправить личное сообщение для vovang Посмотреть профиль Найти все сообщения от vovang
 
Регистрация: 30.01.2013
Сообщений: 21

А как определить столкновение таких элементов:
<div style="position: absolute; left: 0; top: 100;" id="PerSonag">
<IMG SRC="stand/stand.gif" NAME = "btn1">
</div>
<div style="position: absolute; right: 0; top: 100;" id="brick">
<IMG SRC="car.jpg" NAME = "btn2">
</div>
Ответить с цитированием
  #5 (permalink)  
Старый 30.01.2013, 14:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от vovang
А как определить столкновение таких элементов:
У любого элемента есть координаты верхнего левого угла и размеры - от этого и "пляши"...
Ответить с цитированием
  #6 (permalink)  
Старый 30.01.2013, 17:22
Интересующийся
Отправить личное сообщение для vovang Посмотреть профиль Найти все сообщения от vovang
 
Регистрация: 30.01.2013
Сообщений: 21

Да уже месяц пляшу.
Ответить с цитированием
  #7 (permalink)  
Старый 31.01.2013, 10:02
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от vovang
уже месяц пляшу
Где тогда видеоролик тестовый пример?
Ответить с цитированием
  #8 (permalink)  
Старый 31.01.2013, 16:31
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Вот мой вариант...
Добавление непересекаемых блоков на страницу

Генерит непересекающиеся произвольные прямоугольники в произвольной прямоугольной области.
Ответить с цитированием
  #9 (permalink)  
Старый 02.02.2013, 00:24
Интересующийся
Отправить личное сообщение для vovang Посмотреть профиль Найти все сообщения от vovang
 
Регистрация: 30.01.2013
Сообщений: 21

Нет.Мне нужно немного другое.У меня есть управляемый объект.Его можно перемещать курсорами клавиатуры.При перемещении объект сталкивается с другим объектом.Вот это столкновение и нужно определить.Додумался до следующей формулы:
(obj1.offsettop + obj1.offsetheight >= obj2.style.top && obj1.offsettop <= obj2.offsettop + obj2.offsetheight)
.При столкновении она должна возвращать true.Теперь нужно как-то к скрипту управления приладить,что бы obj1 остановился.Пока что не получается.
Ответить с цитированием
  #10 (permalink)  
Старый 03.02.2013, 15:11
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от vovang
Вот это столкновение и нужно определить
Да какое бы нибыло... Пересечение прямоугольников определяется всегда одинаково.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Привильное добавление элементов с помощью js syegorius Events/DOM/Window 0 08.01.2012 09:32
Скрытие элементов на JS alex_89 Элементы интерфейса 5 12.05.2011 09:29
DOM, определение стиля элементов Maximor17 Общие вопросы Javascript 3 04.11.2010 16:24
JQuery и JS - динамичность элементов MCTrane jQuery 1 26.10.2010 21:41