Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.128.30.45] |
|
Сообщ.
#1
,
|
|
|
как определить наложен ли один спрайт на другой?
как сделать чтобы при движении спрайт не смог пересечь на другой? как сделать чтобы спрайт можно было двигать только по определённой траектории? |
Сообщ.
#2
,
|
|
|
По координатам.
|
Сообщ.
#3
,
|
|
|
По поводу столкновений - collision detection. Самый простой метод - bounding box (т.е. сравнивать по координатам, не пересёк-ли один спрайт другой). Для спрайтов сложной формы можно ещё смотреть по альфа-каналу (задать спрайту маску, как вариант).
Двигать спрайт по траектории - ну ты спросил;)))) Задай траекторию и двигай по ней, в чём проблема?) |
Сообщ.
#4
,
|
|
|
Guru мог бы и ответить что-то более содержательное.
И кинуть пару формул людям, которым лень чуть-чуть подумать. |
Сообщ.
#5
,
|
|
|
На OpenGL или DirectX ???
|
Сообщ.
#6
,
|
|
|
Причём тут OGL или DX - хоть GDI... Это элементарнейшие задачи, реализуемые буквально 2-4 условиями..
|
Сообщ.
#7
,
|
|
|
Что касается формул, то пример - принадлежность точки многоугольнику (в общем случае). Проверяешь, если какая-то точка (вершина) одного спрайта принадлежит другому, то - они пересекаются.......
Не много посложнения для n-мерного пространства, где n>2, но тоже разрешима.... Давай конкретику, приведу для любого случая формулы... Если надо можно и в общем случае.... но формулы там.... ;D ;D ;D |
Сообщ.
#8
,
|
|
|
Разница в том, что если OGL - могу написать пример, DX - скинуть на мыло.
На GDI - не знаю. |
Сообщ.
#9
,
|
|
|
2LAMA3OID
Мы друг друга явно не поняли;) |
Сообщ.
#10
,
|
|
|
Цитата GrAnd, 22.03.03, 09:27:52 Проверяешь, если какая-то точка (вершина) одного спрайта принадлежит другому, то - они пересекаются....... Не всегда так: 222 1???1 1???1 222 1 - спайт №1, 2 - соответственно, №2. То есть наложение в виде "креста" Тогда можно сделать так: берешь минимальный прямоугольник, в который вписываются проверяемые спрайты (т.е. матрицу Х на У), забиваешь ее нулями, потом для 1-го спрайта делаешь Matrix[x][y]++, для второго то же, и в итоге получаешь: 01110 12221 12221 01110 Там где >1 => там и пересечение. |
Сообщ.
#11
,
|
|
|
Цитата Wolfcub, 23.03.03, 23:45:16 Не всегда так: 222 1???1 1???1 222 1 - спайт №1, 2 - соответственно, №2. То есть наложение в виде "креста" Тогда можно сделать так: берешь минимальный прямоугольник, в который вписываются проверяемые спрайты (т.е. матрицу Х на У), забиваешь ее нулями, потом для 1-го спрайта делаешь Matrix[x][y]++, для второго то же, и в итоге получаешь: 01110 12221 12221 01110 Там где >1 => там и пересечение. Может получиться большое количество "лишних" вычислений порядка 2mn, где (m,n)- размеры спрайтов (если одинаковые) и возникает ппроблема в подборке этого прямоугольника для конкретной пары спрайтов. А если их несколько.... В таком случае проще учесть пересечение "сторон" cпрайтов по тем же самых координатам вершин. При этом можно учесть вхаимное расположение вершин и выделить наиболее "подозрительные" вершины, которые могут привести к пересечению... Для прямоугольных - это не составит особого труда... |
Сообщ.
#12
,
|
|
|
Кстати, таким методом (я знаю, что понадобится куча памяти и т.д.) можно определять и пересечение спрайтов с прозрачными областями, просто не делая Matrix[x][y]++ для тех точек, где цвет "прозрачный" (0xFF для 256 цветов, к примеру).
|