Группы спрайтов
Вы можете объединять спрайты в группы. Группы помогут вам если вам нужно выполнять одинаковые действия со множеством спрайтов. Вы можете одной командой задать одинаковую скорость сразу всем спрайтам в группе, либо включить/выключить видимость спрайтов в группу и прочее.
Создать группу можно функцией createGroup, которая возвращает значение типа Group, которое по сути является адресом в памяти — указателем на описание группы внутри библиотеки Helianthus.
Для добавления спрайта в группу используйте функцию groupAdd, для удаления из группы - groupRemove.
Все функции для групп повторяют функции работы с одиночными спрайтами, только применяются они одновременно ко всем спрайтам в группе. Поэтому заглядывайте ещё и в раздел «Спрайты».
Функции:
Group createGroup();
Создать пустую группу. В дальнейшем вы можете добавить в неё спрайты функцией groupAdd.
Group createEdgesGroup();
Создать группу спрайтов ограничивающих края экрана. Уровень массы для спрайтов рамки равен 100 (см. spriteSetMassLevel). Используйте эту группу если вам нужно сделать так чтобы спрайт отталкивался от краёв экрана. Смотрите описание физической модели в разделе «Спрайты».
Group createEdgesGroupEx(double x1, double y1, double x2, double y2, double borderWidth, int massLevel);
Создать группу спрайтов ограничивающих прямоугольник. Функция аналогична функции createEdgesGroup, только рамка создаётся не вокруг краёв экрана, а вокруг заданного вами прямоугольника.
Параметры:
x1, y1 — координаты верхнего левого угла прямоугольника;
x2, y2 — координаты нижнего правого угла прямоугольника;
borderWidth — толщина рамки;
massLevel — уровень массы для рамки, см. spriteSetMassLevel.
void groupDestroy(Group group);
Удалить группу. Спрайты, которые содержались в группе продолжат существовать, просто они больше не будут состоять в данной группе.
Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на группу. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на группу, группа удалена. Вы можете занести в эту переменную другую группу, но использовать старое значение переменной больше нельзя это приведёт к ошибкам и непредсказуемому поведению программы.
void groupDestroyEx(Group group, int destroySprites);
Удалить группу, с возможностью удаления и спрайтов тоже. См. также groupDestroy.
Параметры:
destroySprites — если TRUE, то перед удалением группы будут удалены и все содержащиеся в ней спрайты (см. spriteDestroy).
void groupAdd(Group group, Sprite sprite);
Добавить спрайт в группу.
Параметры:
sprite — спрайт для добавления.
void groupRemove(Group group, Sprite sprite);
Исключить спрайт из группы.
Параметры:
sprite — спрайт для исключения.
void groupClear(Group group);
Исключить из группы все спрайты. Группа станет пустой. См. также groupRemove.
void groupClearEx(Group group, int destroySprites);
Очистить группу с возможностью удаления всех спрайтов. См. также groupClear, groupDestroyEx, spriteDestroy.
Параметры:
destroySprites — если TRUE, то спрайты вместо исключения из группы будут полностью удалены.
int groupContains(Group group, Sprite sprite);
Возвращает TRUE, если спрайт содержится в группе, иначе возвращает FALSE.
Параметры:
sprite — спрайт для проверки.
int groupGetCount(Group group);
Возвращает количество спрайтов в группе.
Sprite groupGet(Group group, int i);
Возвращает содержащийся в группе спрайт по указанному номеру.
Параметры:
i — номер спрайта в группе.
Sprite groupSpriteByPoint(Group group, double x, double y, int onlyVisible);
Найти в группе спрайт физическое тело которого содержит указанную точку. Если таких спрайтов несколько то возвращается самый верхний из них. См. также spriteIsPointInside, spriteSetDepth.
Параметры:
x, y — координаты точки;
onlyVisible — если TRUE, то поиск будет производиться только среди видимых спрайтов; если FALSE, то все спрайты группы будут включены в поиск.
int groupOverlap(Group group, Sprite sprite);
int groupCollide(Group group, Sprite sprite);
Функции обнаружения и решения столкновений между группой и спрайтом. Смотрите аналогичные функции из раздела «Спрайты» — spriteOverlap и spriteCollide. Каждый спрайт из группы будет взаимодействовать с указанным в параметрах функции спрайтом.
int groupOverlapGroup(Group a, Group b);
int groupCollideGroup(Group a, Group b);
Функции обнаружения и решения столкновений между группой и группой. Смотрите аналогичные функции из раздела «Спрайты» — spriteOverlap и spriteCollide. Каждый спрайт из первой группы будет взаимодействовать с каждым спрайтом из второй группы.
int groupOverlapBetween(Group group);
int groupCollideBetween(Group group);
Функции обнаружения и решения столкновений между спрайтами в группе. Смотрите аналогичные функции из раздела «Спрайты» — spriteOverlap и spriteCollide. Каждый спрайт в группе взаимодействует со всеми остальными спрайтами в группе.
double groupGetMinDepth(Group group);
Возвращает минимальную глубину среди всех спрайтов в группе.
double groupGetMaxDepth(Group group);
Возвращает максимальную глубину среди всех спрайтов в группе.
void groupDestroyEach(Group group);
Полностью удалить каждый спрайт в данной группе. Группа станет пустой. См. также groupClearEx, spriteDestroy.
void groupDestroyTimerEach(Group group, double lifetime);
Задать таймер на удаление для каждого спрайта в группе. См. также spriteDestroyTimer.
void groupSetVisibleEach(Group group, int visible);
void groupSetFrozenEach(Group group, int frozen);
void groupSetDebugEach(Group group, int debug);
void groupSetWidthEach(Group group, double width);
void groupSetHeightEach(Group group, double height);
void groupSetDepthEach(Group group, double depth);
void groupSetXEach(Group group, double x);
void groupSetYEach(Group group, double y);
void groupSetXYEach(Group group, double x, double y);
void groupSetVelocityXEach(Group group, double x);
void groupSetVelocityYEach(Group group, double y);
void groupSetVelocityEach(Group group, double x, double y);
void groupSetAccelerationXEach(Group group, double x);
void groupSetAccelerationYEach(Group group, double y);
void groupSetAccelerationEach(Group group, double x, double y);
void groupSetRotateToDirectionEach(Group group, int rotateToDirection);
void groupSetRotationEach(Group group, double rotation);
void groupSetRotationSpeedEach(Group group, double rotationSpeed);
void groupSetScaleEach(Group group, double scale);
void groupSetMirrorXEach(Group group, int mirrorX);
void groupSetMirrorYEach(Group group, int mirrorY);
void groupPointToEach(Group group, double x, double y);
void groupSetSpeedAndDirectionEach(Group group, double speed, double angle);
void groupSetAnimationEach(Group group, Animation animation);
void groupSetNoAnimationEach(Group group);
void groupSetShapeColorEach(Group group, unsigned int colorCode);
void groupSetTintColorEach(Group group, unsigned int colorCode);
void groupSetBouncinessEach(Group group, double bounciness);
void groupSetBouncinessThresholdEach(Group group, double bouncinessThreshold);
void groupSetFrictionEach(Group group, double friction);
void groupSetAirFrictionEach(Group group, double friction);
void groupSetMassLevelEach(Group group, int massLevel);
void groupSetUserTagEach(Group group, int tag);
void groupSetUserTextEach(Group group, const char *text);
void groupSetUserDataEach(Group group, void *data);
void groupSetDestroyEach(Group group, SpriteCallback destroy);
Установить параметры для каждого спрайта в группе. Смотрите аналогичные функции из раздела «Спрайты».
void groupSetColliderSensitiveDistance(Group group, double distance);
void groupSetColliderEach(Group group, Collider type, double xOffset, double yOffset, double rotationOffset);
void groupSetColliderCircleEach(Group group, double xOffset, double yOffset, double radius);
void groupSetColliderRectangleEach(Group group, double xOffset, double yOffset, double rotationOffset, double width, double height, double cornersRadius);
void groupSetColliderEachEx(Group group, Collider type, double xOffset, double yOffset, double rotationOffset, double width, double height, double radius);
Установить параметры физического тела для каждого спрайта в группе. Смотрите аналогичные функции из раздела «Спрайты».
void groupDraw(Group group);
Нарисовать все спрайты в группе. См. также spriteDraw, drawSprites.