Хотя я бы предположил, что это было бы быстрее сделать математически, определяя банкноты как прямоугольники и проверяя их на перекрытие, используя что-то вроде теоремы о разделении осей, это явно не то, что вы спрашиваете, и не подходит для изображений общего случая.
Поэтому я предлагаю вам создать CGBitmapContext
того же размера, что и ваша игровая зона, и при заполнении игровой зоны для каждой размещаемой ноты вы делаете что-то вроде:
- назначить новый, еще неиспользованный цвет для банкноты
- нарисовать его в контексте растрового изображения в месте его назначения, но как сплошной объект назначенного цвета - так вы сохраните контур исходной формыно в каждом пикселе вы рисуете либо сплошной, назначенный цвет, либо вообще никакого цвета
- посчитайте, сколько пикселей во всем контексте теперь является назначенным цветом, сохраните это с вашим объектом, представляющим примечание
Впоследствии, когда игра начнется, запустите через буфер и посчитайте, сколько из каждого ассвзрослый цвет.Все заметки с тем же номером, которые хранятся в текущий момент, находятся сверху.Всякий раз, когда заметка удаляется, перерисовывайте все остальные по порядку и делайте подсчет цветов один раз.
Обратите внимание, что вы не выполняете подсчет цветов в общем буфере один раз для каждой заметки, всего один раз.Таким образом, это фиксированная стоимость, и, вероятно, это происходит реже, чем один раз за нажатие.
Вероятно, самый простой способ сделать рисунок одним цветом - создать маску версии каждого графика при его загрузке, а затем нарисовать его.с подходящим оттенком.Здесь есть введение в альфа-маски здесь ;вы, вероятно, захотите создать пользовательский контекст растрового изображения, а не использовать неявный контекст, возвращаемый UIGraphicsGetCurrentContext
, и постфильтровать, чтобы проверить выходную альфа - нажимая вниз до 0, если он меньше некоторого порога, до 255 в противном случае.