На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> спрайты
    как определить наложен ли один спрайт на другой?
    как сделать чтобы при движении спрайт не смог пересечь на другой?
    как сделать чтобы спрайт можно было двигать только по определённой траектории?
      По координатам.
        По поводу столкновений - collision detection. Самый простой метод - bounding box (т.е. сравнивать по координатам, не пересёк-ли один спрайт другой). Для спрайтов сложной формы можно ещё смотреть по альфа-каналу (задать спрайту маску, как вариант).

        Двигать спрайт по траектории - ну ты спросил;)))) Задай траекторию и двигай по ней, в чём проблема?:))
        Сообщение отредактировано: Shiru_Otaku -
          Guru мог бы и ответить что-то более содержательное.
          И кинуть пару формул людям, которым лень чуть-чуть подумать.
            На OpenGL или DirectX ???
              Причём тут OGL или DX - хоть GDI... Это элементарнейшие задачи, реализуемые буквально 2-4 условиями..
                Что касается формул, то пример - принадлежность точки многоугольнику (в общем случае). Проверяешь, если какая-то точка (вершина) одного спрайта принадлежит другому, то - они пересекаются.......
                Не много посложнения для n-мерного пространства, где n>2, но тоже разрешима.... Давай конкретику, приведу для любого случая формулы... Если надо можно и в общем случае.... но формулы там.... ;D ;D ;D
                  Разница в том, что если OGL - могу написать пример, DX - скинуть на мыло.
                  На GDI - не знаю.
                    2LAMA3OID

                    Мы друг друга явно не поняли;)
                      Цитата 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 => там и пересечение.
                        Цитата 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прайтов по тем же самых координатам вершин. При этом можно учесть вхаимное расположение вершин и выделить наиболее "подозрительные" вершины, которые могут привести к пересечению... Для прямоугольных - это не составит особого труда...
                          Кстати, таким методом (я знаю, что понадобится куча памяти и т.д.) можно определять и пересечение спрайтов с прозрачными областями, просто не делая Matrix[x][y]++ для тех точек, где цвет "прозрачный" (0xFF для 256 цветов, к примеру).
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0412 ]   [ 15 queries used ]   [ Generated: 4.03.24, 07:47 GMT ]