Вверх ↑
Ответов: 2202
Рейтинг: 675
#1: 2014-05-21 01:59:48 ЛС | профиль | цитата
Все изменения и новые элементы внесены в пакет. Достаточно обновиться: SVN
Все ниже перечисленные изменения внесены в стандартный набор элементов HiAsm, обновитесь или установите последнюю версию.

Скриншот вкладки панели элементов (слева устаревшая, справа новые элементы)
Скриншот примера FallingLetters.sha в котором на низ окна падают буквы.
Итак по порядку:
  • 1. Элементы создания регионов особо не пострадали.
  • 2. Элементы комбинирования регионов, нуждались в переделки, так как работают на данный момент не логично. Вот доказательство: test_combine.sha попробуйте запустить схему (на текущей версии) и у вас не получится на выходе регион. А если сравнить с такими распространенными элементами как StrCat и Math то логично предположить что к результирующему региону прибавиться (с комбинируется [OR]) новый. Но не тут то было. Это в основном и поправлено, проверьте схему на обновленных элементах. Еще добавлено результат комбинации, зачем будет понятно позже.
  • 3. Добавлены элементы создания регионов из текста RGN_Text и из траектории RGN_Path (см. RGN_Path.sha в архиве с примерами).
  • 4. Добавлен элемент RGN_Array Массив регионов (добавление, удаление, запись, сохранение). Так как регионы не получится хранить в обычном массиве или списке.
  • 5. Добавлен элемент RGN_File: Сохранение и загрузка региона.
  • 6. Добавлен элемент RGN_Draw: Рисование региона. Можно регион нарисовать (заливка, контур, контурные штриховка, изображение шаблон, инвертировать цвета) на объекте выводе графики.
  • 7. Добавлен элемент RGN_InRect: Проверка нахождения региона в прямоугольнике. Ну тут вроде все понятно из описания. Если хоть одна точка региона попадает в область прямоугольника вы об этом узнаете.
  • 8. Добавлен элемент RGN_GetData: Данные о регионе. Можно узнать некоторые данные о регионе: отступ слева и сверху, ширина, высота и прочая не особо нужная информация.
  • 9. Добавлены элементы трансформации региона: RGN_Offset: Перемещение региона, RGN_Rotate: Поворот регион, RGN_Transform: Трансформация региона. Ну с первыми двумя вроде все понятно, а вот третий позволяет масштабировать, скашивать, отражать.
  • 10. В элемент RGN_SetToWindow: Применить регион к окну, добавилось сброс региона с окна (9 этажа) и получение региона с окна.
  • 11. Самое интересное в этой серии это элемент RGN_Collision: Коллизия регионов. Что же в нем интересного? И зачем вам может понадобиться коллизия (столкновение) каких-то там регионов? Все очень просто. С помощью коллизии регионов можно обрабатывать столкновение всего что угодно (двухмерное). К примеру обычные окна при перетаскивании или столкновении машинок в игре. Элемент может определить коллизию двух регионов или определить коллизию одного региона с с каждым регионом из массива (см. пункт 4).
  • 12. Добавлен элемент RGN_Convertor: Конвертирование региона (регион в поток, поток в регион).
  • 13. Внесены дополнения в элемент ScreenShort: Снятие скриншотов с окон и с экрана. Добавилась возможность снимать скриншот не всего окна, а по заданному региону (свойство UseRegion False/True). Если регион не прямоугольной формы, то фон заливается выбранным цветом (свойство Color).
  • У всех элементов новые стильные иконки (сам малявау ).
       Теперь о коллизии поподробней. По идущему в архиве примеру(CollisionMoveElements.sha) можно убедиться что обработка коллизий окон делается достаточно просто и удобно и не требует сложных арифметических вычислений. Вместо прямоугольных окон, можно обрабатывать коллизию и других фигур. К примеру у GameEngine коллизия обрабатывается только прямоугольника с прямоугольником.
       Коллизия регионах сделана на функции CombineRgn, она при объединении двух регионов (RGN_AND) выдает результат, по которому и можно понять имеют хоть одну общую точку два региона или нет. Вот и все. Никаких вычислений, только двигай себе регионы вместе с нужными объектами(см. пример:RGN_Collision_SmallGame.sha). И при этом если была коллизия двух регионов, то по скомбинированному региону (он напомню создается из наложенных участков двух регионов), можно узнать и участок коллизии.
      С обработкой коллизии может справится даже RGN_Combine (с внесенными небольшими изменениями). Достаточно подать два региона и по результату комбинации определить было столкновение или нет.
       Только вот нигде мне не попадалось (интернет, книги) такой метод обработки столкновений. Даже не знаю насколько правильно использовать для этого регионы, но все работает и при этом достаточно неплохо.
       В примере Chaos.sha обрабатывается коллизия 100 элементов.

    Для тестирования:
    Обновите или установите последнюю версию HiAsm или
    1. Скачать архив с элементами: rgn_2014_11_11.zip
    2. Из папки new установить элементы (перетащить ini файлы на рабочее поле HiAsm). Элементы устанавливаются в вкладку: ОкноРегионы.
    3. Заменить элементы из папки change. Файлы pas в папку Elementsdelphicode, файлы ini в папку Elementsdelphiconf, файлы ico в папку Elementsdelphiico. Желательно оригиналы предварительно скопировать в отдельную папку, для возможности восстановления.
    4. Скачать архив с примерами: test_rgn_2014_11_11.zip.
  • карма: 11

    9
    файлы: 5test_combine.sha [1.3KB] [595], fallingletters.jpg [53.3KB] [2783], test_rgn_2014_11_11.zip [19.1KB] [545], rgn_panel_old_and_new.png [10KB] [1732], rgn_2014_11_11.zip [52.1KB] [506]
    Голосовали:miver, tom-it, flint2, ser_davkin, MAV, tig-rrr, foksov, kamakama, Konst