Камера позволяет вам перемещать позицию обзора и масштаб при рисовании спрайтов. При использовании камеры вам не надо изменять позицию всех спрайтов чтобы имитировать смену точки обзора.
+
+
Для работы с камерой её нужно включить функцией cameraOn,
Для подключения и использования библиотеки Helianthus нужно:
+- подключить файл <helianthus.h>
+- создать и зарегистрировать функции для начальной загрузки и для перерисовки кадра (см. worldSetInit и worldSetDraw)
+- вызвать функцию worldRun для запуска вашей программы
+
+
Вот что должно получиться:
+
+
+#include <helianthus.h>
+
+void init() {
+ // Здесь будут команды для начальной загрузки.
+ // Они выполнятся только один раз в самом начале.
+}
+
+void draw() {
+ // Здесь будут команды для движения и рисования.
+ // Во время работы программы они будут запускаться
+ // несколько раз в секунду.
+}
+
+int main() {
+ worldSetInit(&init);
+ worldSetDraw(&draw);
+ worldRun();
+ return 0;
+}
+
+
+
+
Функции:
+
+
void worldSetInit(Callback init);
+
+
Задать функцию для начальной инициализации (загрузки). Эта функция будет запущена только один раз в самом начале работы программы, как только будет вызвана функция worldRun.
+
+
Параметры:
+
+
init — указатель на функцию начальной инициализации (загрузки). Функция быть работать без параметров и не должна возвращать значение.
+
+
void worldSetDraw(Callback draw);
+
+
Задать основную функцию вашей программы — функцию для перерисовки кадра. Во время работы программы заданная функция будет запускаться несколько раз в секунду перед перерисовкой каждого кадра. Поместите в неё команды для движения и рисования.
+
+
Параметры:
+
+
draw — указатель на функцию перерисовки кадра. Функция быть работать без параметров и не должна возвращать значение.
+
+
void worldRun();
+
+
Запустить вашу программу на Helianthus. Перед вызовом этой функции нужно зарегистрировать функции начальной загрузки и перерисовки кадра (см. выше)
+
+
void worldStop();
+
+
Остановить и закрыть программу. Программа всегда закрывается если пользователь нажмёт на крестик в верхнем правом углу окна, но вы можете добавить и свои способы выхода из программы. Например, в функцию перерисовки вы можете вставить возможность выхода по нажатию клавиши Esc (см. также раздел «Клавиатура и мышь»):
Перечисленные ниже функцию позволяют рисовать на экране различные фигуры и текст.
+
+
Для указания цвета используется его текстовое наименование.
+Вот список наименований:
+ "transparent",
+ "black",
+ "white",
+ "gray",
+ "red",
+ "green",
+ "blue",
+ "yellow",
+ "magenta",
+ "cyan",
+ "yellow",
+ "magenta",
+ "cyan",
+ "brown".
+
+
Также поддерживаются цвета в кодировка #RRGGBBAA:
+ #000000 — чёрный;
+ #ff0000 — красный;
+ #0000ff — синий;
+ #00ff00aa — зелёный полупрозрачный.
+
+
Вы можете сгенерировать текстовое наименования для любого цвета по его числовым составляющим при помощи функций rgb и rgba.
+
+
Для рисования линий и многоугольников используются функции moveTo, lineTo, closePath, strokePath. При этом функции stroke и fill задают цвет линий и заливки. Функция strokeWeight задаёт толщину линий. Вот пример рисования красного треугольника с чёрным контуром:
Установить цвет фона. Начиная со следующего все кадры будут рисоваться на выбранном фоне.
+
+
Параметры:
+
+
color — текстовое наименование цвета.
+
+
void fill(const char *color);
+
+
Установить цвет заливки. После вызова этой функции все фигуры будут заполняться выбранным цветом. См. также noFill.
+
+
Параметры:
+
+
color — текстовое наименование цвета.
+
+
void noFill();
+
+
Отключить заливку фигур. После вызова этой функции все фигуры будут рисоваться без заполнения. См. также fill.
+
+
void stroke(const char *color);
+
+
Установить цвет контура. После вызова этой функции все фигуры будут рисоваться с контуром выбранного цвета. Также эта функция задаёт цвет рисования текста См. также noStroke.
+
+
Параметры:
+
+
color — текстовое наименование цвета.
+
+
void noStroke();
+
+
Отключить рисование контура. После вызова этой функции все фигуры будут рисоваться без прорисовки контура. См. также stroke.
+
+
Важно: Так как текст рисуется цветом контура, эта функция полностью отключает вывод текста.
+
+
void strokeWeight(double weight);
+
+
Установить толщину линий и контуров. После вызова этой функции все линии и контуры будут рисоваться с заданной толщиной.
+
+
Параметры:
+
+
weight — толщина линии.
+
+
char* rgb(double r, double g, double b);
+
+
Функция возвращает текстовое наименование цвета для заданных числовых значений яркости красной, зелёной и синей составляющих.
+
+
Параметры:
+
+
r — яркость красной составляющей цвета, дробное число от 0 до 1;
+g — яркость зелёной составляющей цвета, дробное число от 0 до 1;
+b — яркость синей составляющей цвета, дробное число от 0 до 1.
Функция возвращает текстовое наименование цвета для заданных числовых значений яркости красной, зелёной и синей составляющих, а также прозрачности.
+
+
Параметры:
+
+
r — яркость красной составляющей цвета, дробное число от 0 до 1;
+g — яркость зелёной составляющей цвета, дробное число от 0 до 1;
+b — яркость синей составляющей цвета, дробное число от 0 до 1;
+a — прозрачность, дробное число от 0 до 1, при этом 0 — цвет полностью прозрачный, 1 — цвет непрозрачный.
+
+
void moveTo(double x, double y);
+
+
Начать рисование новой фигуры, и задать начальное положение пера. Перед запуском этой функции убедитесь что вы завершили рисование предыдущей фигуры функцией closePath или strokePath.
+
+
Параметры:
+
+
x, y — координаты в которые будет помещено перо.
+
+
void lineTo(double x, double y);
+
+
Наметить линию от текущих координат пера до заданной точки, а также перевести перо в указанною точку. Настоящая линия будет нарисована позже при помощи функции closePath или strokePath. См. также функцию moveTo.
+
+
Важно: если положение пера не было задано, то линия не намечается, вместо этого просто задаётся начальное положение пера.
+
+
void resetPath();
+
+
Убрать все намеченные функцией lineTo или arcPath линии и отменить их рисование. Положение пера также забывается.
+
+
void closePath();
+
+
Завершить контур соединив начальную и конечную точки линией и нарисовать заполненную фигуру с контуром. Цвета заполнения и контура задаются функциями fill и stroke. См. также функции moveTo и lineTo. После вывода фигуры на экран положение пера и все намеченные линии забываются.
+
+
void strokePath();
+
+
Нарисовать ранее намеченные линии. В отличии от функции closePath, данная функция не соединяет начальную и конечную точки, а просто рисует только те линии которые были намечены. Цвет контура задаётся функцией stroke, а вот заполнение цветом не производится. После вывода намеченных линий на экран, их расположение и позиция пера забываются.
+
+
void rect(double x, double y, double width, double height);
+
+
Нарисовать прямоугольник. Цвета заполнения и контура задаются заранее функциями fill и stroke.
+
+
Параметры:
+
+
x, y — координаты левого верхнего угла прямоугольника;
+width — ширина прямоугольника;
+height — высота прямоугольника.
+
+
void ellipse(double x, double y, double width, double height);
+
+
Нарисовать эллипс. Эллипс рисуется таким чтобы от вписался в ограничивающий прямоугольник (см. функцию rect). Следовательно для того чтобы нарисовать окружность нужно передать одинаковую ширину и высоту ограничивающего прямоугольника. Цвета заполнения и контура задаются заранее функциями fill и stroke.
+
+
Параметры:
+
+
x, y — координаты левого верхнего угла ограничивающего прямоугольника;
+width — ширина ограничивающего прямоугольника;
+height — высота ограничивающего прямоугольника.
Наметить дугу эллипса заданного ограничивающим прямоугольником так как если бы она рисовалась функциями moveTo и lineTo. Дуга задаётся значением начального и конечного угла. Окончательное рисование будет выполнено после вызова функции closePath или strokePath.
+
+
Параметры:
+
+
x, y — координаты левого верхнего угла ограничивающего прямоугольника;
+width — ширина ограничивающего прямоугольника;
+height — высота ограничивающего прямоугольника;
+start — начальный угол в градусах;
+end — конечный угол в градусах.
Провести прямую линию от первой указанной точки до второй. Цвет линии задаётся функцией stroke.
+
+
Параметры:
+
+
x1, y1 — координаты первой точки;
+x2, y2 — координаты второй точки.
+
+
void point(double x, double y);
+
+
Нарисовать точку в указанных координатах. Цвет задаётся функцией stroke. Диаметр точки задаётся функцией strokeWeight.
+
+
Параметры:
+
+
x, y — координаты точки.
+
+
void regularPolygon(double x, double y, int sides, double size);
+
+
Нарисовать правильный многоугольник заданного размера с центром в указанной точке. Цвета заполнения и контура задаются функциями fill и stroke.
+
+
Параметры:
+
+
x, y — координаты центра многоугольника;
+sides — количество сторон;
+size — размер многоугольника — диаметр описанной окружности.
+
+
void text(const char *text, double x, double y);
+
+
Вывести текст в заданной точке. Расположение текста относительно указанной точки задаётся функцией textAlign. Шрифи и размер задаются функциями textFont и textSize. Цвет текста задаётся функцией stroke.
+
+
Параметры:
+
+
text — текст для вывода;
+x, y — координаты начальной точки.
+
+
void textAlign(HAlign hor, VAlign vert);
+
+
Установить расположение текста относительно начальной точки (см. функцию text)
+
+
Параметры:
+
+
hor — горизонтальное расположение начальной точки текста, может принимать значения:
+ HALIGN_LEFT — начальная точка находится по левому краю текста;
+ HALIGN_CENTER — начальная точка находится в середине текста;
+ HALIGN_RIGHT — начальная точка находится по правому краю текста.
+vert — вертикальное расположение начальной точки текста, может принимать значения:
+ VALIGN_TOP — начальная точка находится по верхнему краю текста;
+ VALIGN_CENTER — начальная точка находится в середине текста;
+ VALIGN_BOTTOM — начальная точка находится по нижнему краю текста.
+
+
void textFont(const char *font);
+
+
Установить шрифт для текста (см. функцию text). Указанный шрифт должен быть установлен в системе. Можете посмотреть списки шрифтов в любом установленном на вашем компьютере текстовом редакторе.
Вы можете объединять спрайты в группы. Группы помогут вам если вам нужно выполнять одинаковый действия со множеством спрайтов. Вы можете одной командой задать одинаковую скорость сразу всем спрайтам в группе, либо включить/выключить видимость спрайтов в группу и прочее.
+
+
Создать группу можно функцией createGroup, которая возвращает значение типа Group, которое по сути является адресом в памяти — указателем на описание группы внутри библиотеки Helianthus.
+
+
Для добавления спрайта в группу используйте функцию groupAdd, для удаления из группы - groupRemove.
+
+
Все функции работы с группами повторяют функции работы с одиночными спрайтами, только применяются они одновременно ко всем спрайтам в группе. Поэтому заглядывайте и в раздел «Спрайты».
+
+
Функции:
+
+
Group createGroup();
+
+
Создать пустую группу. В дальнейшем вы можете добавить в неё спрайты функцией groupAdd.
+
+
Group createEdgesGroup();
+
+
Создать группу спрайтов ограничивающих края экрана. Используйте эту группу если вам нужно сделать так чтобы спрайт отталкивался от краёв экрана. Смотрите описание физической модели в разделе «Спрайты».
Создать группу спрайтов ограничивающих прямоугольник. Функция аналогична функции createEdgesGroup, только рамка создаётся не вокруг краёв экрана, а вокруг заданного вами прямоугольника.
+
+
Параметры:
+
+
x1, y1 — координаты верхнего левого угла прямоугольника;
+x2, y2 — координаты нижнего правого угла прямоугольника;
+borderWidth — толщина рамки.
+
+
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);
destroySprites — если TRUE, то спрайты вместо исключения из группы будут полностью удалены.
+
+
int groupContains(Group group, Sprite sprite);
+
+
Возвращает TRUE, если спрайт содержится в группе, иначе возвращает FALSE.
+
+
Параметры:
+
+
sprite — спрайт для проверки.
+
+
int groupGetCount(Group group);
+
+
Возвращает количество спрайтов в группе.
+
+
Sprite groupGet(Group group, int i);
+
+
Возвращает содержащийся в группе спрайт по указанному номеру.
+
+
Параметры:
+
+
i — номер спрайта в группе.
+
+
int groupOverlap(Group group, Sprite sprite);
+
int groupCollide(Group group, Sprite sprite, double bounciness);
+
int groupBounceOff(Group group, Sprite sprite, double bounciness);
+
int groupPush(Group group, Sprite sprite, double bounciness);
+
int groupCollideEx(Group group, Sprite sprite, int keepVelocityGroup, int keepVelocitySprite, double bounciness);
+
+
Функции обнаружения и решения столкновений между группой и спрайтом. Смотрите аналогичные функции из раздела «Спрайты». Каждый спрайт из группы будет взаимодействовать с указанным в параметрах функции спрайтом.
+
+
int groupOverlapGroup(Group a, Group b);
+
int groupCollideGroup(Group a, Group b, double bounciness);
+
int groupBounceOffGroup(Group group, Group other, double bounciness);
+
int groupPushGroup(Group group, Group other, double bounciness);
+
int groupCollideGroupEx(Group a, Group b, int keepVelocityA, int keepVelocityB, double bounciness);
+
+
Функции обнаружения и решения столкновений между группой и группой. Смотрите аналогичные функции из раздела «Спрайты». Каждый спрайт из первой группы будет взаимодействовать с каждым спрайтом из второй группы.
+
+
int groupOverlapBetween(Group group);
+
int groupCollideBetween(Group group, double bounciness);
+
int groupCollideBetweenEx(Group group, int keepVelocity, double bounciness);
+
+
Функции обнаружения и решения столкновений между спрайтами в группе. Смотрите аналогичные функции из раздела «Спрайты». Каждый спрайт в группе взаимодействует со всеми другими спрайтами в группе.
+
+
double groupGetMinDepth(Group group);
+
+
Возвращает минимальную глубину среди всех спрайтов в группе.
+
+
double groupGetMaxDepth(Group group);
+
+
Возвращает максимальную глубину среди всех спрайтов в группе.
+
+
void groupDestroyEach(Group group);
+
+
Полностью удалить каждый спрайт в данной группе. Группа станет пустой. См. также groupClearEx, spriteDestroy.
Во время работы программы вы можете узнавать положение мыши и состояние клавиш. Координаты указателя мыши можно получить функциями mouseX и mouseY. Узнать состояние клавиш клавиатуры и кнопок мыши можно функциями keyDown и mouseDown соответственно.
+
+
Для указания клавиши нужно написать её текстовое наименование, например: "a", "1", "left", "right", "up", "down", "return" (для Enter), "escape" и и.д.
+
+
Названия клавиш взяты из библиотеки GTK, их полный список вы можете посмотреть в файле (для Linux), список очень большой:
+ file:///usr/include/gtk-3.0/gdk/gdkkeysyms.h
+или в интернете:
+ https://gitlab.gnome.org/GNOME/gtk/-/blob/master/gdk/gdkkeysyms.h
+Обратите внимание, что наименование нужно писать маленькими (строчными) буквами и приставку GTK_KEY_ нужно убрать. Например, если вы нашли в большом списке клавишу GDK_KEY_BackSpace — значит в вашей программе вам нужно написать "backspace".
+
+
Наименований для кнопок мыши всего три: "left", "middle" и "right".
+
+
Кроме этого существуют функции для определения момента нажатия и отпускания клавиш и кнопок. На тот случай когда некоторые действия нужно выполнить только один раз в момент нажатия (или отпускания) клавиши. Смотрите функции keyWentDown, keyWentUp, mouseWentDown, mouseWentUp.
+
+
Функции:
+
+
int keyDown(const char *code);
+
+
Функция возвращает TRUE (число 1) если указанная клавиша в нажата (и удерживается) в данный момент и FALSE (число 0) если клавиша отпущена.
+
+
Параметры:
+
+
code — текстовое наименование клавиши.
+
+
int keyWentDown(const char *code);
+
+
Функция возвращает TRUE (число 1) если указанная клавиша стала нажатой в момент времени между предыдущим и текущим кадром. В последующих кадрах, даже если клавиша остаётся нажатой, функция возвращает FALSE (число 0).
+
+
Важно: Примерно через секунду после нажатия и удержания клавиши, keyWentDown всё таки сработает ещё раз — так будто клавиша была повторно нажата. Другими словами поведение функции такое же как и у текстового редактора: если удерживать клавишу некоторое время редактор повторяет печать символа несколько раз.
+
+
Параметры:
+
+
code — текстовое наименование клавиши.
+
+
int keyWentUp(const char *code);
+
+
Функция возвращает TRUE (число 1) если указанная клавиша перестала быть нажатой в момент времени между предыдущим и текущим кадром. Во всех других случаях возвращает FALSE (число 0).
+
+
Параметры:
+
+
code — текстовое наименование клавиши.
+
+
int mouseDown(const char *code);
+
+
Функция возвращает TRUE (число 1) если указанная кнопка мыши в нажата (и удерживается) в данный момент и FALSE (число 0) если кнопка отпущена.
+
+
Параметры:
+
+
code — текстовое наименование кнопки мыши.
+
+
int mouseWentDown(const char *code);
+
+
Функция возвращает TRUE (число 1) если указанная кнопка мыши стала нажатой в момент времени между предыдущим и текущим кадром. Во всех последующих кадрах, даже если кнопка остаётся нажатой, функция возвращает FALSE (число 0).
+
+
Параметры:
+
+
code — текстовое наименование кнопки мыши.
+
+
int mouseWentUp(const char *code);
+
+
Функция возвращает TRUE (число 1) если указанная кнопка мыши перестала быть нажатой в момент времени между предыдущим и текущим кадром. Во всех других случаях возвращает FALSE (число 0).
+
+
Параметры:
+
+
code — текстовое наименование кнопки мыши.
+
+
int mouseDidMove();
+
+
Функция возвращает TRUE (число 1) если с момента отрисовки предыдущего кадра положение мыши изменилось, и возвращает FALSE (число 0) ели мышь оставалась неподвижной.
Библиотека Helianthus позволяет вам воспроизводить звуки из файлов WAV, OGG, MP3 и FLAC.
+
+
Загрузить звук можно функцией createSound, которая возвращает значение типа Sound, которое по сути является адресом в памяти — указателем на описание звуковой волны внутри библиотеки Helianthus.
+
+
Для воспроизведения и остановки звука используйте функции soundPlay и soundStop.
+
+
Функции:
+
+
Sound createSound(const char *path);
+
+
Загрузить звук из указанного файла.
+
+
Параметры:
+
+
path — путь к звуковому файлу.
+
+
void soundDestroy(Sound sound);
+
+
Удалить звук.
+
+
Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на звук. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на звук, звук уже удалён. Вы можете занести в эту переменную другой звук, но использовать старое значение переменной больше нельзя это приведёт к ошибкам и непредсказуемому поведению программы.
+
+
void soundPlay(Sound sound, int loop);
+
+
Воспроизвести звук.
+
+
Параметры:
+
+
loop — если TRUE, то повторять воспроизведение звука до тех пор пока он не будет остановлем командой soundStop (подходит, например, для фоновой музыки). Если FALSE, то воспроизвести звук один раз.
Спрайт — это изображаемый на экране объект, который сохраняет свою позицию и изображения от кадра к кадру. Другими словами для рисования спрайта не нужно каждый раз указывать его координаты, цвет и расположение — он хранит эти параметры внутри себя, их достаточно задать только один раз.
+
+
Спрайты будут выводится на экран командой drawSprites, она рисует на экране сразу все спрайт. Её достаточно вызвать только один раз за кадр.
+
+
Спрайт может изображаться в виде прямоугольника выбранного вами цвета (spriteSetShapeColor), либо в виде картинки из выбранного вами файла (spriteSetAnimation). Кроме того спрайт может содержать анимацию, для этого вместо одного изображения в него можно загрузить папку с картинками — кадрами. Эти кадры могут переключаться автоматически (spritePlay) или по вашей команде (spriteSetFrame, spriteNextFrame).
Создать спрайт можно функции createSprite, которая возвращает значение типа Sprite, которое по сути является адресом в памяти — указателем на описание спрайта внутри библиотеки Helianthus.
+
+
Пример:
+
+
+#include <helianthus.h>
+
+Sprite mysprite;
+
+void init() {
+ // Создать новый спрайт с центром в точке (200, 200)
+ mysprite = createSprite(200, 200);
+
+ // Загрузить файл изображения.
+ spriteSetAnimation(mysprite, "picture.png");
+}
+
+void draw() {
+ // Повернуть спрайт на один 10 градусов перед рисованием.
+ spriteSetRotation(mysprite, 10);
+
+ // Вывести все спрайты на экран.
+ // Ввесь один спрайт, в данном случае.
+ drawSprites();
+}
+
+int main() {
+ worldSetInit(&init);
+ worldSetDraw(&draw);
+ worldRun();
+ return 0;
+}
+
+
+
+
Физика и обнаружение столкновений
+
+
Спрайты в библиотеке Helianthus имеют физическую модель. Они могут обладать скоростью и отталкиваться друг от друга.
+
+
Изначально физическое представление спрайта это прямоугольник соответствующий видимой форме спрайта. Но это может быть изменено, например, вы можете представить спрайт для физической модели в виде круга, при этом видимое изображение останется прежним (spriteSetCollider).
+
+
Физическое тело спрайта позволяет вам определять находится ли над спрайтом указатель мыши, см. функции mouseIsOver и mousePressedOver.
+
+
Помимо описания формы и размеров физического тела спрайта вам, скорее всего, понадобится задать и его скорость (spriteSetVelocityXY).
+
+
Для обнаружения столкновений и расчёта скоростей и позиций объектов после столкновения необходимо запустить одну из специальных функций. Они представлены в таблице ниже. Каждая из этих функций работает с двумя выбранными вами спрайтами и рассчитывает столкновения только между ними.
Это универсальная функция, которая вмещает в себя возможности предыдущих четырёх функций.
+
+
+
+
+
Также указанные функции (кроме spriteOverlap) имеют параметр bounciness — это показатель энергии столкновения.
+
+
Если bounciness меньше 1, то взаимная скорость спрайтов после столкновения уменьшится, как если бы столкнулись мешки с песком.
+
+
Если больше 1, то скорости после столкновения увеличатся. Можете представить себе супер-упругий волшебный мячик, который после падения на пол подпрыгивает выше чем падал.
+
+
Параметр bounciness есть и у каждого спрайта (spriteSetBounciness). При расчёте параметры bounciness от обоих спрайтов и параметр bounciness из функции перемножаются и получается окончательное значение bounciness для расчётов.
+
+
Таким образом запустив, например, функцию spritePush для двух ваших спрайтов вы тем самым инициируете расчёт физического взаимодействия межу ними. И кроме того вы одновременно с этим указываете какую роль в физической модели занимает ваш объект. Например для spritePush первый спрайт будет представлять из себя какую-то тяжёлую мощную платформу, сдвинуть которую второй спрайт не может — он просто отталкивается от неё сам, а платформа двигается (или стоит) как ни в чём ни бывало.
+
+
Однако работы всего лишь с двумя спрайтами мало для полноценной физической модели. В помощь вам Helianthus предлагает группы спрайтов. Поместив свои спрайты в различные группы (или в одну группу) вы можете одной командой вызвать расчёт столкновений между всеми спрайтами в группе или между спрайтами одной группы со спрайтами другой группы или между группой и одиночным спрайтом.
+
+
Также функция createEdgesGroup поможет вам создать группу спрайтов обозначающую границы экрана, чтобы ваши объекты отталкивались от краёв экрана.
+
+
Подробнее о группах и их функциях смотрите в разделе «Группы спрайтов».
+
+
Функции:
+
+
Sprite createSprite(double x, double y);
+
+
Создаёт спрайт с центром в указанной точке. См. также createSpriteEx.
+
+
Параметры:
+
+
x, y — координаты центра нового спрайта.
+
+
Sprite createSpriteEx(double x, double y, double width, double height);
+
+
Создаёт спрайт заданного размера с центром в указанной точке. См. также createSprite.
+
+
Параметры:
+
+
x, y — координаты центра нового спрайта;
+width — ширина нового спрайта;
+height — высота нового спрайта.
+
+
void spriteDestroy(Sprite sprite);
+
+
Удаляет спрайт. Спрайт удаляется также из всех групп в которые он был включён.
+
+
Если же вы просто хотите спрятать спрайт не удаляя его, чтобы он просто больше не отображался на экране, то обратите внимание на функцию spriteSetVisible.
+
+
Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на спрайт. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на спрайт, спрайт удалён. Вы можете занести в эту переменную другой спрайт, но использовать старое значение переменной больше нельзя это приведёт у ошибкам и непредсказуемому поведению программы.
Задаёт таймер для удаления спрайта через определённое время. Рекомендуется больше не обращаться в к этому спрайту из вашей программы и не хранить указатель на него. Так как неизвестно существует ли спрайт ещё или уже сработал таймер удаления. Смотрите также функцию spriteDestroy и примечание к ней.
+
+
Параметры:
+
+
lifetime — время в секундах по истечении которого спрайт должен быть удалён. Если 0 или меньше, то спрайт будет удалён немедленно. Если больше 0, то спрайт будет в один из промежутков между вызовами функции перерисовки кадра.
+
+
double spriteGetX(Sprite sprite);
+
double spriteGetY(Sprite sprite);
+
void spriteSetX(Sprite sprite, double x);
+
void spriteSetY(Sprite sprite, double y);
+
+
Получить (Get) либо задать (Set) координаты центра спрайта.
Задать скорость спрайта через угол направления и абсолютное значение скорости. Если вы не понимаете смысла слов «абсолютное значение», то в здесь подразумевается обычное бытовое значение смысла слова скорость. В данном случае она измеряется в пикселях в секунду.
+
+
Параметры:
+
+
speed — абсолютное значение скорости;
+angle — угол направления движения в градусах. Не путайте, пожалуйста, с отображаемым поворотом спрайта (spriteSetRotation, spriteSetRotateToDirection).
Получить (Get) либо задать (Set) масштабирование спрайта. Вы можете увеличить ли уменьшить весь спрайт и его физическое тело с сохранением всех пропорций. См. также spriteGetScaledWidth, spriteGetScaledHeight.
+
+
double spriteGetScaledWidth(Sprite sprite);
+
+
Возвращает ширину спрайта с учётом масштабирования. См. также spriteSetScale.
+
+
double spriteGetScaledHeight(Sprite sprite);
+
+
Возвращает высоту спрайта с учётом масштабирования. См. также spriteSetScale.
Получить (Get) или задать (Set) скорость вращения спрайта. Да, спрайт имеет ещё и скорость вращения. Вы можете её задать в градусах в секунду и спрайт будет вращаться сам. См. также spriteSetRotation.
+
+
int spriteGetRotateToDirection(Sprite sprite);
+
void spriteSetRotateToDirection(Sprite sprite, int rotateToDirection);
+
+
Получить (Get) или задать (Set) автоматический поворот спрайта вдоль направления движения. rotateToDirection может принимать значение TRUE (число 1) или FALSE (число 0).
+
+
Когда rotateToDirection равно TRUE, спрайт будет автоматически поворачиваться в направлении своего движения (вектора скорости). См. также spriteSetSpeedAndDirection, spriteSetRotation.
+
+
int spriteGetMirrorX(Sprite sprite);
+
void spriteSetMirrorX(Sprite sprite, int mirrorX);
+
+
Получить (Get) или задать (Set) отражение спрайта по оси X.
+Если mirrorX больше или равно 0, то спрайт рисуется как обычно.
+Если mirrorX меньше нуля то рисуется зеркальное отражение спрайта по горизонтали.
+
+
int spriteGetMirrorY(Sprite sprite);
+
void spriteSetMirrorY(Sprite sprite, int mirrorY);
+
+
Получить (Get) или задать (Set) отражение спрайта по оси Y.
+Если mirrorY больше или равно 0, то спрайт рисуется как обычно.
+Если mirrorY меньше нуля то рисуется зеркальное отражение спрайта по вертикали.
+
+
double spriteGetDepth(Sprite sprite);
+
void spriteSetDepth(Sprite sprite, double depth);
+
+
Получить (Get) или задать (Set) показатель глубины спрайта. На переднем плане рисуются спрайты с наименьшим значением глубины, на заднем — с наибольшим. Таким образом задавая глубину спрайтов вы определяете порядок их отрисовки.
+
+
int spriteGetVisible(Sprite sprite);
+
void spriteSetVisible(Sprite sprite, int visible);
+
+
Получить (Get) или задать (Set) видимость спрайта. Может принимать значение TRUE (число 1) — спрайт видно, или FALSE (число 0) — спрайт спрятан.
+
+
int spriteGetTag(Sprite sprite);
+
void spriteSetTag(Sprite sprite, int tag);
+
+
Получить (Get) или задать (Set) метку спрайта. Этот параметр не используется внутри спрайта — заносите сюда любое число которое хотите связать с данным спрайтом.
+
+
int spriteGetDebug(Sprite sprite);
+
void spriteSetDebug(Sprite sprite, int debug);
+
+
Получить (Get) или задать (Set) отображение отладочной информации для данного спрайта. Может принимать значение TRUE (число 1) — включено, или FALSE (число 0) — выключено.
+
+
Когда включено, для данного спрайта рисуется его рамка, центр и значение глубины, даже если спрайт невидим.
+
+
Если в вашей программе что-то пошло не так, включите эту опцию для ваших спрайтов, возможно вы увидите причину ошибки.
+
+
int spriteOverlap(Sprite a, Sprite b);
+
+
Возвращает TRUE если спрайты касаются или накладываются друг на друга. В противном случае возвращает FALSE.
+
+
int spriteCollide(Sprite a, Sprite b, double bounciness);
+
+
Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новые скорости и позиции для указанных спрайтов и возвращает TRUE. В противном случае возвращает FALSE. См. описание физической модели в разделе «Спрайты».
+
+
Параметры:
+
+
bounciess — показатель энергии столкновения.
+
+
int spriteBounceOff(Sprite sprite, Sprite other, double bounciness);
+
+
Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новую скорость и позицию для спрайта sprite (спрайт other не меняет своих параметров) и возвращает TRUE. В противном случае возвращает FALSE. См. описание физической модели в разделе «Спрайты».
+
+
Параметры:
+
+
bounciess — показатель энергии столкновения.
+
+
int spritePush(Sprite sprite, Sprite other, double bounciness);
+
+
Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новую скорость и позицию для спрайта other (спрайт sprite не меняет своих параметров) и возвращает TRUE. В противном случае возвращает FALSE. См. описание физической модели в разделе «Спрайты».
+
+
Параметры:
+
+
bounciess — показатель энергии столкновения.
+
+
int spriteCollideEx(Sprite a, Sprite b, int keepVelocityA, int keepVelocityB, double bounciness);
+
+
Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новые скорости и позиции для указанных спрайтов и возвращает TRUE. В противном случае возвращает FALSE. См. описание физической модели в разделе «Спрайты».
+
+
Параметры:
+
+
bounciess — показатель энергии столкновения;
+keepVelocityA — если TRUE то спрайт a не меняет своих параметров и продолжает движение, так будто столкновения не было;
+keepVelocityB — если TRUE то спрайт b не меняет своих параметров и продолжает движение, так будто столкновения не было.
Устанавливает параметры физического тела спрайта. Размеры тела определяются размерами самого спрайта. Для круга диаметр равен ширине спрайта.
+
+
Параметры:
+
+
type — форма COLLIDER_CIRCLE (круг) или COLLIDER_RECTANGLE (прямоугольник);
+xOffset, yOffset — смещение центра физического тела относительно центра спрайта;
+rotationOffset — поворот физического тела относительно спрайта.
xOffset, yOffset — смещение центра физического тела относительно центра спрайта;
+radius — радиус круга, если меньше 0, то будет использоваться половина от ширины спрайта.
Задать физическое тела спрайта в виде прямоугольника. Прямоугольник может быть со скруглёнными углами.
+
+
Параметры:
+
+
xOffset, yOffset — смещение центра физического тела относительно центра спрайта;
+rotationOffset — поворот физического тела относительно спрайта;
+width — ширина прямоугольника, если меньше 0, то будет использоваться ширина спрайта;
+height — высота прямоугольника, если меньше 0, то будет использоваться высота спрайта;
+cornersRadius — радиус скругления углов.
Устанавливает полный набор параметров физического тела спрайта.
+
+
Параметры:
+
+
type — форма COLLIDER_CIRCLE (круг) или COLLIDER_RECTANGLE (прямоугольник);
+xOffset, yOffset — смещение центра физического тела относительно центра спрайта;
+rotationOffset — поворот физического тела относительно спрайта;
+width — ширина, используется только для прямоугольника, если меньше 0, то будет использоваться ширина спрайта;
+height — высота, используется только для прямоугольника, если меньше 0, то будет использоваться высота спрайта;
+radius — для круга — его радиус, для прямоугольника — радиус скругления углов.
Задать файл изображения или анимации спрайта. Поддерживаются изображения в формате PNG. Если вместо файла указана папка, то из неё загружаются все файлы PNG в алфавитном порядке — анимация спрайта.
+
+
Параметры:
+
+
path — путь к файлу PNG или к папке с фалами PNG для анимации.
+
+
void spriteSetNoAnimation(Sprite sprite);
+
+
Убрать анимацию и изображение со спрайта — спрайт будет рисоваться в виде простого прямоугольника.
+
+
void spritePlay(Sprite sprite);
+
+
Включить воспроизведение анимации для спрайта. При каждом вызове функции перерисовки окна будет переключаться кадр. Частоту перерисовки окна, а следовательно и частоту кадров для анимации спрайтов, можно задать функцией worldSetFrameRate. См. также spritePause.
+
+
void spritePause(Sprite sprite);
+
+
Остановить анимацию спрайта. См. также spritePlay.
+
+
void spriteNextFrame(Sprite sprite);
+
+
Перейти к следующему кадру анимации. Если это был последний кадр, то перейти к первому (точнее к нулевому).
+
+
void spriteSetFrame(Sprite sprite, int frame);
+
+
Перейти к кадру с заданным номером.
+
+
Параметры:
+
+
frame - номер кадра, кадры нумеруются начиная с нуля.
Установить цвет подкрашивания спрайта. Компоненты указанного цвета умножаются на компоненты цвета изображения (или базового прямоугольника) спрайта. Таким образом вы можете немного менять цвета в спрайте, а также устанавливать общую прозрачность спрайта.
+
+
Параметры:
+
+
color — текстовое наименование цвета, см. раздел «Рисование».
Повернуть спрайт по направлению к указанной точке. См. также spriteSetRotation.
+
+
Параметры:
+
+
x, y — координаты точки.
+
+
int mouseIsOver(Sprite sprite);
+
+
Функция возвращает TRUE (число 1) если указатель мыши находится над указанным спрайтом, иначе возвращает FALSE (число 0). См. также раздел «Спрайты».
+
+
int mousePressedOver(Sprite sprite);
+
+
Функция возвращает TRUE (число 1) если любая кнопка мыши нажата (и удерживается) в то время как указатель мыши находится над указанным спрайтом, иначе возвращает FALSE (число 0). См. также раздел «Спрайты».
+
+
int worldGetSpriteCount();
+
+
Возвращает количество спрайтов существующих в программе в данный момент. См. также worldGetSprite.