diff --git a/doc/ru/animation.html b/doc/ru/animation.html new file mode 100644 index 0000000..6b7e0e8 --- /dev/null +++ b/doc/ru/animation.html @@ -0,0 +1,536 @@ + + + + +Текстуры и анимация - Helianthus + + + +
+ +

Текстуры и анимация

+ +

Библиотека Helianthus позволяет вам загружать и использовать в ваших программах различные изображения (текстуры) из файлов PNG. Также вы можете использовать анимированные текстуры — для создания анимации нужно все кадры в формате PNG разместить в одной папке и указать эту папку в качестве имени файла для загрузки. Для вашего удобства и сокращения количества используемых функций и одиночная текстура и анимация представлены в Helianthus в качестве одного и того же типа объектов — это всё анимации. Просто для одиночной текстуры количество кадров анимации равно одному. Количество кадров для загруженной анимации можно узнать при помощи функции animationGetFramesCount.

+ +

Чтобы загрузить текстуру используйте функцию createAnimation, которая возвращает значение типа Animation, которое по сути является адресом в памяти — указателем на описание текстуры внутри библиотеки Helianthus. Библиотека запоминает пути к загружаемым файлам, и, в случае многократной загрузки одного и того же файла не расходует лишнюю память, а работает лишь с одной копией изображения. Это изображение будет выгружено из памяти в тот момент когда будет удалена (animationDestroy) последняя использующая его анимация.

+ +

Помимо загрузки анимации из папки вы можете скомпоновать анимацию из отдельных кадров при помощи функций createAnimationEmpty, animationInsert, animationRemove, animationClear.

+ +

Анимация загружается установленной на паузу — то есть по-умолчанию она не воспроизводится. Запустить воспроизведение можно функцией animationPlay, снова поставить на паузу — animationPause. Кроме того анимация по-умолчанию зациклена, то есть когда она проиграет до конца — она сразу же начинается сначала. Вы можете это изменить используя функцию animationSetLoop.

+ +

Ещё один важный параметр анимации это скорость её воспроизведения. По-умолчанию она равна общей частоте перерисовки кадров (см. worldSetFrameRate), но если задан диапазон частоты — переменная частота кадров (worldSetFrameRateEx), то берётся значение из этого диапазона ближайшее к 24 кадрам в секунду. Если вас это не устраивает, задайте свою частоту смены кадров функцией animationSetFps.

+ +

Вы можете и вручную управлять воспроизведением анимации — используйте функции animationNextFrame, animationSetFrame, animationAddTime и animationSetPos.

+ +

Текстуры и анимации описанные выше — это уже загруженные на видеокарту данные и читать или менять пиксели в них нельзя. Для того чтобы работать с пикселями напрямую вам нужно загрузить их в оперативную память из файла — imageLoad, из текстуры — imageFromGLTexture и animationGetGLTexId или из пикселей на экране — imageFromViewport.

+ +

В отличие от анимации данные изображения не сгруппированы в структуру, а представлены в виде трёх отдельных переменных: ширина изображения, высота изображения и указатель на данные — массив пикселей. Данные это простая последовательность байтов — пикселив них записаны по строкам сверху вниз слева направо. Каждый пиксель — это четыре байта в формате RGBA — красный, зелёный, синий и непрозрачность (alpha). Для хранения этих данных выделяется оперативная память и прежде чем закончить с ними работу и забыть нужно эту память освободить функцией free из стандартного модуля <stdlib.h>. Сложновато? Да. Но ведь это низкоуровневые функции и прибегать к ним вам придётся только в редких случаях — если вам не хватило базового функционала.

+ +

Читать и записывать отдельные пиксели можно либо вручную высчитав номера отдельных байтов или при помощи функций imageGetPixel, imageSetPixel — которые сделают эти вычисления за вас.

+ +

Полученное изображение можно сохранить в файл — imageSave, отправить на видеокарту в виде текстуры OpenGL — imageToGLTexture или создать из изображения однокадровую анимацию — createAnimationFromImage.

+ +

Вот пример работы с изображениями:

+
+
+// Все три переменные представленные ниже
+// необходимы для работы с одним единственным изображением.
+// Если вы захотите работать одновременно с двумя изображениями,
+// то вам придётся завести дополнительную
+// тройку аналогичных переменных.
+int width = 0, height = 0; // Сюда будут записаны
+                           // ширина и высота изображения.
+void *data = NULL;         // Это указатель на данные изображения,
+                           // пока он указывает в никуда.
+
+// Попытаемся загрузить изображения
+// будьте готовы к тому, что это не всегда удастся -
+// вдруг кто-то удалит файл, например.
+if (imageLoad("image.png", &width, &height, &data)) {
+    // Ура! Файл существует и нам даже удалось его загрузить.
+    // Поставим синий пиксель в координатах 10, 2.
+    // Если, конечно, в загруженном изображении
+    // есть эти координаты.
+    if (width > 10 && height > 2)
+        imageSetPixel(data, 10, 2, colorByName("blue"));
+    
+    // Сохраним изображение в другой файлы
+    // будьте осторожны если такой файл уже существует,
+    // то он будет перезапиан!
+    imageSave("image2.png", width, heigh, data);
+    
+    // Мы закончили работу с изображением -
+    // нужно освободить выделенную для его данных память.
+    free(data);
+    
+    // Обнулим указатель на данные. Это необязательно,
+    // просто на всякий случай. Это немножко защитит нас
+    // от наших ошибок. Если мы вдруг попытаемся использовать
+    // нулевой указатель, то в большинстве случаев увидим
+    // явную ошибку и её источник. И сможем её исправить.
+    // Использование же ненулевого указателя на уже
+    // освобождённую память приведёт к совершенно
+    // не предсказуемым ошибкам в совсем других
+    // частях программы.
+    data = NULL;
+} else {
+    // Не удалось загрузить изображение,
+    // возможно файла нет или он есть, но повреждён,
+    // или ещё что-то случилось.
+    // Сообщим-ка пользователю об этой проблеме.
+    printf("Ничего не получилось, увы :(");
+}
+
+
+ +

Есть ещё несколько функций, которые могут вас заинтересовать — создание однокадровой анимации прямо из пикселей экрана или буфера кадра: createAnimationFromViewport, createAnimationFromFramebuffer. Сохранить снимок экрана (окна программы) в файл — viewportSave.

+ +

Функции:

+ +

Animation createAnimation(const char *path);

+ +

Загрузить текстуру из файла PNG или цепочку кадров в формате PNG из папки. Эквивалентно вызову createAnimationEx. со включенным сглаживанием (smooth) и отключенными повторами (horWrap, vertWrap).

+ +

Параметры:

+ +

path — путь к файлу или папке.

+ +

Animation createAnimationEx(const char *path, int smooth, int horWrap, int vertWrap);

+ +

Загрузить текстуру из файла PNG или цепочку кадров анимации в формате PNG из папки.

+ +

Если в качестве пути указана папка, из неё будут загружены все изображения и отсортированы в алфавитном порядке. Частота кадров для вновь созданной анимации будет равна частоте перерисовки экрана (worldSetFrameRate). Если задан диапазон частоты (worldSetFrameRateEx), то из этого диапазона будет выбрана частота ближайшая к 24-м кадрам в секунду.

+ +

Если файл не удалось загрузить файл(ы), то функция вернёт анимацию с нулевым количеством кадров.

+ +

Helianthus запоминает пути к загружаемым файлам, и, в случае многократной загрузки одного и того же файла не расходует лишнюю память, а работает лишь с одной копией изображения. Это изображение будет выгружено из памяти в тот момент когда будет удалена (animationDestroy) последняя использующая его анимация.

+ +

Если параметр smooth равен TRUE, то загруженная текстура будет отображаться сглаженной — вы не увидите резких переходов между пикселями (трилинейная фильтрация).

+ +

Параметры horWrap и vertWrap включают (TRUE) или выключают (FALSE) бесконечное повторение узора текстуры по горизонтали и вертикали соответственно.

+ +

См. также createAnimation, createAnimationFromImage, createAnimationFromViewport, createAnimationFromGLTexId, createAnimationEmpty, animationClone.

+ +

Параметры:

+ +

path — путь к файлу или папке;
+smooth — включить сглаживание (TRUE или FALSE);
+horWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE);
+vertWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE).

+ +

Animation createAnimationFromGLTexId(unsigned int texid);

+ +

Создать однокадровую анимацию из текстуры OpenGL. Будьте внимательны, не удаляйте текстуру из OpenGL (glDeteteTextures) до тех пор пока существует хотя бы одна анимация её использующая. И более того анимация при своём удалении сама удалит эту текстуру из OpenGL. Если вы создали несколько анимаций с одной и той же текстурой, то текстура будет удалена при удалении последней использующей её анимации. Вы можете отключить автоматическое удаление текстуры обратившись к функции animationGLTexIdSetOwnership.

+ +

Настройки повторения узора текстуры и сглаживания уже содержатся в текстуре OpenGL.

+ +

См.также animationGetGLTexId.

+ +

Параметры:

+ +

texid — идентификатор текстуры из OpenGL.

+ +

Animation createAnimationFromImage(int width, int height, const void *pixels, int wrap);

+ +

Создать однокадровую анимацию из изображения в памяти. Пиксели должны идти один за другим по строкам сверху вниз, слева на право. По 4 байта на пиксель, по одному байту на каждый из каналов: красный, зелёный, синий, альфа каналы, именно в таком порядке. При загрузке создаётся копия текстуры в видеопамяти, и исходные данные больше не требуются, их можно выгрузить из памяти.

+ +

Текстура загружается со включенным сглаживанием (smooth). См. также createAnimationFromImageEx, createAnimationEx, imageLoad.

+ +

Параметры:

+ +

width — ширина изображения;
+height — высота изображения;
+pixels — указатель на первый байт первого пикселя в формате RGBA32;
+wrap — включить бесконечное повторение узора текстуры во всех направлениях (TRUE или FALSE).

+ +

Animation createAnimationFromImageEx(int width, int height, const void *pixels, int horWrap, int vertWrap, int smooth, int mipMap);

+ +

Создать однокадровую анимацию из изображения в памяти. Пиксели должны идти один за другим по строкам сверху вниз, слева на право. По 4 байта на пиксель, по одному байту на каждый из каналов: красный, зелёный, синий, альфа каналы, именно в таком порядке. При загрузке создаётся копия текстуры в видеопамяти, и исходные данные больше не требуются, их можно выгрузить из памяти.

+ +

Вы можете включить или выключить бесконечное повторение узора текстуры по горизонтали и/или вертикали (параметры horWrap и vertWrap соответственно).

+ +

Также вы можете включить сглаживание пикселей изображения (smooth) и включить построение mip-уровней (mipMap). Если вы пока не знаете, что такое mip-уровни, то просто включайте их всегда, когда нужно сглаживание и выключайте, когда сглаживание не нужно. Если же вы не знаете требуется или нет вам сглаживание текстуры, то ответ один — требуется — включайте и сглаживание и mip-уровни.

+ +

См. также createAnimationFromImage, createAnimationFromImageEx, createAnimationEx, imageLoad.

+ +

Параметры:

+ +

width — ширина изображения;
+height — высота изображения;
+pixels — указатель на первый байт первого пикселя в формате RGBA32;
+horWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE);
+vertWrap — включить бесконечное повторение узора текстуры по вертикали (TRUE или FALSE);
+smooth — включить сглаживание (TRUE или FALSE);
+mipMap — включить построение mip-уровней (TRUE или FALSE).

+ +

Animation createAnimationFromFramebuffer(Framebuffer framebuffer);

+ +

Создать новую динамическую текстуру связанную с заданным буфером кадра. Содержимое этой текстуры будет изменяться всякий раз когда вы рисуете в этом буфере кадра. Мгновенно, без каких либо дополнительных затрат на копирование. Дополнительную информацию смотрите в разделе «Буфер кадра».

+ +

Не удаляйте буфер кадра пока не удалите все связанные с ним анимации.

+ +

Если вам нужно зафиксировать именно копию текущего состояния буфера кадра, то используйте функцию createAnimationFromViewport в сочетании с функцией target.

+ +

Параметры:

+ +

framebuffer — буфер кадра.

+ +

Animation createAnimationFromViewport();

+ +

Создать новую текстуру (однокадровую анимацию) скопировав изображение с экрана.

+ +

Если точнее — из текущей области вывода OpenGL (glViewport) — обычно это и есть вся площадь окна. Но если вы переключили буфер кадра функцией target, то текстура будет взята из этого буфера кадра.

+ +

Текстура создаётся с выключенным повтором узора, но со включенным сглаживанием и mip-уровнями.

+ +

См. также createAnimationFromViewportEx, createAnimationFromFramebuffer, viewportByWindow, viewportByFramebuffer и раздел «Буфер кадра».

+ +

Animation createAnimationFromViewportEx(int horWrap, int vertWrap, int smooth, int mipMap);

+ +

Функция работает аналогично функции createAnimationFromViewport, но позволяет вам задать повторения узора текстуры по горизонтали и/или вертикали (параметры horWrap, vertWrap) и включить или выключить сглаживание (smooth) и mip-уровни. Подробнее обо всех этих параметрах смотрите в описании функции createAnimationFromImageEx.

+ +

Параметры:

+ +

horWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE);
+vertWrap — включить бесконечное повторение узора текстуры по вертикали (TRUE или FALSE);
+smooth — включить сглаживание (TRUE или FALSE);
+mipMap — включить построение mip-уровней (TRUE или FALSE).

+ +

Animation createAnimationEmpty();

+ +

Создать пустую анимацию — анимацию с нулевым количеством кадров. См. также animationInsert.

+ +

void animationDestroy(Animation animation);

+ +

Удалить анимацию.

+ +

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на анимацию. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на анимацию, анимацию уже удалена. Вы можете занести в эту переменную другую анимацию, но использовать старое значение переменной больше нельзя это приведёт к ошибкам и непредсказуемому поведению программы.

+ +

Animation animationClone(Animation animation);

+ +

Создать копию анимации, которая будет иметь собственные параметрами позиции воспроизведения и частоты кадров. Функция не размножает копии изображений в оперативной памяти — все клоны ссылаются на одни те же изображения. Библиотека Helianthus контролирует сколько анимаций используют конкретный кадр в данный момент времени и выгружают этот кадр из памяти только тогда, когда удалена последняя анимация его использовавшая.

+ +

См.также animationCloneEx, animationInsert.

+ +

Animation animationCloneEx(Animation animation, int start, int count);

+ +

Создать копию анимации, которая будет иметь собственные параметрами позиции воспроизведения и частоты кадров. При помощи параметров start и count вы выбираете какие именно кадры из заданной анимации будут скопированы в новую анимацию. См. также animationClone, animationInsert.

+ +

Параметры:

+ +

start — порядковый номер кадра с которого нужно начать копирование (нумерация от нуля);
+count — количество кадров, которое нужно скопировать.

+ +

unsigned int animationGetGLTexId(Animation animation);

+ +

Функция возвращает внутренний идентификатор текстуры OpenGL для текущего кадра анимации. См.также animationGetFrameGLTexId, animationGetFrame, createAnimationFromGLTexId.

+ +

unsigned int animationGetFrameGLTexId(Animation animation, int frame);

+ +

Функция возвращает внутренний идентификатор текстуры OpenGL для заданного кадра анимации. См.также animationGetGLTexId, createAnimationFromGLTexId.

+ +

Параметры:

+ +

frame — порядковый номер кадра с для которого нужно получить идентификатор (нумерация от нуля);

+ +

void animationGLTexIdSetOwnership(unsigned int texid, int own);

+ +

Функция задаёт правила удаления текстуры с заданным идентификатором из OpenGL. Определяет кто является владельцем текстуры — библиотека Helianthus или ваша собственная программа. Если текстурой владеет Helianthus (own — TRUE), то текстуру из OpenGL удалит Helianthus сам в том момент когда ни одна анимация больше не будет на неё ссылаться. В противном случае вы сами должны позаботиться об удалении текстуры, проконтролировав при этом, что ни одна анимация больше эту текстуру не использует.

+ +

Используйте эту функцию если, например, вы не хотите чтобы Helianthus удалил из памяти вашу собственную текстуру, которую вы ему передали через функцию createAnimationFromGLTexId.

+ +

Параметры:

+ +

texid — внутренный идентификатор текстуры OpenGL;
+own — если TRUE, то об удалении текстуры из видео-памяти позаботится Helianthus, если FALSE, то удалить текстуру должена будет ваша программа.

+ +

int animationGetFramesCount(Animation animation);

+ +

Возвращает количество кадров в данной анимации.

+ +

void animationInsert(Animation animation, int index, Animation other);

+ +

Вставить все кадры из анимации other в заданную анимацию, таким образом, что бы вновь вставленные кадры начинались с номера index.

+ +

Функция не затирает старые кадры, а вставляет новые прямо в середину анимации, сдвигая при этом последние кадры.

+ +

См. также animationInsertEx, animationCloneEx.

+ +

Параметры:

+ +

index — определяет место (номер кадра, нумерация от нуля) в текущей анимации куда нужно вставить новые кадры;
+other — другая анимация кадры из которой нужно вставить в текущую.

+ +

void animationInsertEx(Animation animation, int index, Animation other, int start, int count);

+ +

Вставить некоторое количество подряд идущих кадров из анимации other в заданную анимацию, таким образом, что бы вновь вставленные кадры начинались с номера index.

+ +

Функция не затирает старые кадры, а вставляет новые прямо в середину анимации, сдвигая при этом последние кадры.

+ +

См. также animationInsert, animationCloneEx.

+ +

Параметры:

+ +

index — определяет место (номер кадра, нумерация от нуля) в текущей анимации куда нужно вставить новые кадры;
+other — другая анимация кадры из которой нужно вставить в текущую;
+start — номер вставляемого первого кадра из другой анимации;
+count — количество кадров для вставки.

+ +

void animationRemove(Animation animation, int start, int count);

+ +

Удалить некоторое количество (count) кадров из анимации начиная с кадра номер start.
+См. также animationInsert, animationClear.

+ +

Параметры:

+ +

start — номер первого удаляемого кадра (нумерация с нуля);
+count — количество кадров для вставки.

+ +

void animationClear(Animation animation);

+ +

Удалить все кадры из анимации. См. также animationRemove, animationInsert, createAnimationEmpty.

+ +

double animationGetFps(Animation animation);

+ +

Возвращает скорость воспроизведения анимации в кадрах в секунду. См. также animationSetFps, animationPlay.

+ +

void animationSetFps(Animation animation, double fps);

+ +

Устанавливает скорость воспроизведения анимации в кадрах в секунду. См. также animationGetFps, animationPlay.

+ +

int animationIsPlaying(Animation animation);

+ +

Возвращает TRUE если воспроизведение в данный момент включено и FALSE если выключено. См. также animationPlay, animationPause.

+ +

void animationPlay(Animation animation);

+ +

Включает воспроизведение анимации. Внутренний счётчик времени будет автоматически обновляться библиотекой Helianthus между вызовами функции перерисовки кадра (worldSetDraw).

+ +

Если вы хотите управлять анимацией вручную, то не вызывайте эту функцию, а воспользуйтесь функциями animationAddTime, animationSetPos, animationNextFrame, animationSetFrame.

+ +

См. также animationPause, animationIsPlaying, animationSetFps, animationSetLoop.

+ +

void animationPause(Animation animation);

+ +

Остановить воспроизведение анимации. См. также animationPlay, animationIsPlaying.

+ +

void animationAddTime(Animation animation, double time);

+ +

Увеличить позицию анимации на время time (в секундах). См. также animationPlay, animationSetLoop, animationSetPos, animationNextFrame, animationSetFrame.

+ +

int animationGetLoop(Animation animation);

+ +

Возвращает TRUE если анимация зациклена и FALSE если нет. См. также animationSetLoop.

+ +

void animationSetLoop(Animation animation, int loop);

+ +

Функция включает (loop - TRUE) и отключает (loop - FALSE) циклическое воспроизведение анимации, когда анимация повторяется снова и снова, вместо того чтобы остановиться на последнем кадре. См. также animationGetLoop, animationPlay.

+ +

double animationGetPos(Animation animation);

+ +

Возвращает текущую позицию анимации в секундах. См. также animationSetPos.

+ +

void animationSetPos(Animation animation, double pos);

+ +

Функция задаёт текущую позицию анимации в секундах. См. также animationGetPos, animationAddTime, animationSetFrame, animationPlay.

+ +

int animationGetFrame(Animation animation);

+ +

Возвращает номер текущего кадра анимации, нумерация от нуля. См. также animationSetFrame.

+ +

void animationSetFrame(Animation animation, int frame);

+ +

Функция перематывает анимацию к кадру с заданным номером (нумерация от нуля). См. также animationGetFrame, animationGetFramesCount, animationNextFrame, animationSetPos, animationSetLoop, animationPlay.

+ +

void animationNextFrame(Animation animation);

+ +

Переключает анимацию на следующий кадр. См. также animationPlay, animationSetLoop, animationSetFrame, animationAddTime, animationSetPos.

+ +

int imageLoad(const char *path, int *outWidth, int *outHeight, unsigned char **outPixels);

+ +

Функция загружает изображение из файла PNG. Возвращает TRUE если загрузка прошла успешно и FALSE если загрузить файл не удалось.

+ +

В результате загрузки в переменные по адресам outWidth и outHeight будут помещены соответственно ширина и высота картинки. В переменную по адресу outPixels будет помещён указатель на пиксели картинки. Пиксели записываются в формате RGBA32 — для каждого пикселя последовательно идут 4 байта отвечающие за интенсивность каждой цветовой составляющей — красный, зелёный, синий, непрозрачность (alpha) — именно в таком порядке. Пиксели записаны по строкам сверху вниз, слева на право.

+ +

В работе с пикселями вам помогут функции imageGetPixel, imageSetPixel.

+ +

Функция, в случае успешной загрузки изображения, динамически выделяет память под пиксели, и, вам после использования нужно эту память освободить обратившись к стандартной функции free.

+ +

В случае если загрузка не удалась в качестве ширины и высоты будет записан ноль, в качестве указателя на пиксели будет записан нулевой указатель — NULL.

+ +

См. также imageSave, imageLoadFromMemory, imageFromViewport, imageToGLTexture.

+ +

Параметры:

+ +

path — путь к файлу изображения;
+outWidth — указатель на переменную куда будет записана ширина загруженного изображения в пикселях;
+outHeight — указатель на переменную куда будет записана высота загруженного изображения в пикселях;
+outPixels — указатель на переменную куда будет записан указатель на массив пикселей изображения.

+ +

int imageLoadFromMemory(const void *data, int size, int *outWidth, int *outHeight, unsigned char **outPixels);

+ +

Загрузить изображение из данных файла PNG ранее загруженных в оперативную память.

+ +

Эта функция может быть вам полезна если вы хотите хранить все ваши изображения прямо внутри исполняемого файла. Например, при помощи утилиты xxd (в Linux) или подобной ей для вашей операционной системы, вы можете сгенерировать файл на языке Си с массивом содержащим все байты файла изображения. Данная функция позволит вам распаковать изображения из этого массива и получить доступ к его пикселям.

+ +

Возвращает TRUE если загрузка прошла успешно и FALSE если распаковать изображение не удалось.

+ +

См. также imageLoad.

+ +

Параметры:

+ +

data — указатель на первый байт данных PNG;
+size — количество байт данных PNG;
+outWidth — указатель на переменную куда будет записана ширина загруженного изображения в пикселях;
+outHeight — указатель на переменную куда будет записана высота загруженного изображения в пикселях;
+outPixels — указатель на переменную куда будет записан указатель на массив пикселей изображения.

+ +

int imageSave(const char *path, int width, int height, const void *pixels);

+ +

Функция сохраняет изображение в файл PNG по заданному пути. Возвращает TRUE при успешном сохранении и FALSE если сохранить изображение не удалось.

+ +

См. также imageLoad, viewportSave.

+ +

Важно: Если файл по указанному пути уже существует, то он будет перезаписан. Вы может проверить существование файла функцией fileExists.

+ +

Параметры:

+ +

path — путь к файлу в который нужно записать изображение;
+width — ширина изображения в пикселях;
+height — высота изображения в пикселях;
+pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad.

+ +

unsigned int imageToGLTexture(int width, int height, const void *pixels, int wrap);

+ +

Загрузить изображение в текстуру OpenGL. В случае успешной функция возвращает идентификатор текстуры OpenGL, и возвращает ноль если загрузка не удалась.

+ +

Во время загрузки создаётся копия данных изображения в видео-памяти и оригинальное изображение можно выгрузить из памяти.

+ +

См. также imageToGLTextureEx, imageToExistingGLTexture, imageLoad.

+ +

Параметры:

+ +

width — ширина изображения в пикселях;
+height — высота изображения в пикселях;
+pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad;
+wrap — если TRUE то узор текстуры будет повторяющимся по горизонтали и вертикали.

+ +

unsigned int imageToGLTextureEx(int width, int height, const void *pixels, int horWrap, int vertWrap, int smooth, int mipMap);

+ +

Загрузить изображение в текстуру OpenGL. В случае успешной функция возвращает идентификатор текстуры OpenGL, и возвращает ноль если загрузка не удалась.

+ +

Во время загрузки создаётся копия данных изображения в видео-памяти и оригинальное изображение можно выгрузить из памяти.

+ +

Вы можете включить или выключить бесконечное повторение узора текстуры по горизонтали и/или вертикали (параметры horWrap и vertWrap соответственно). Также вы можете включить сглаживание пикселей изображения (smooth, билинейная или трилинейная фильтрация) и включить построение mip-уровней (mipMap).

+ +

См. также imageToGLTexture, imageToExistingGLTexture, imageLoad.

+ +

Параметры:

+ +

width — ширина изображения в пикселях;
+height — высота изображения в пикселях;
+pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad;
+horWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE);
+vertWrap — включить бесконечное повторение узора текстуры по вертикали (TRUE или FALSE);
+smooth — включить сглаживание (TRUE или FALSE);
+mipMap — включить построение mip-уровней (TRUE или FALSE).

+ +

int imageToExistingGLTexture(unsigned int texid, int width, int height, const void *pixels);

+ +

Заменить пиксели существующей текстуры. Возвращает TRUE в случае успеха, иначе FALSE.

+ +

См. также imageToGLTexture, imageToGLTextureEx.

+ +

Параметры:

+ +

texid — идентификатор существующей текстуры OpenGL;
+width — ширина изображения в пикселях;
+height — высота изображения в пикселях;
+pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad.

+ +

int imageFromGLTexture(unsigned int texid, int *outWidth, int *outHeight, unsigned char **outPixels);

+ +

Получить пиксели из текстуры OpenGL. Пиксели копируются в новый массив, память для которого выделяется динамически. Поэтому вам, также как при работе с imageLoad, нужно после использования освободить выделенную под пиксели память при помощи стандартной функции free.

+ +

Функция возвращает TRUE в случае успеха, иначе FALSE.

+ +

См. также imageLoad.

+ +

Параметры:

+ +

texid — идентификатор текстуры OpenGL;
+outWidth — указатель на переменную куда будет записана ширина загруженного изображения в пикселях;
+outHeight — указатель на переменную куда будет записана высота загруженного изображения в пикселях;
+outPixels — указатель на переменную куда будет записан указатель на массив пикселей изображения.

+ +

int imageFromViewport(int *outWidth, int *outHeight, unsigned char **outPixels);

+ +

Получить пиксели изображения из текущей области вывода OpenGL. Пиксели копируются в новый массив, память для которого выделяется динамически. Поэтому вам, также как при работе с imageLoad, нужно после использования освободить выделенную под пиксели память при помощи стандартной функции free.

+ +

Функция возвращает TRUE в случае успеха, иначе FALSE.

+ +

См. также imageLoad.

+ +

Параметры:

+ +

outWidth — указатель на переменную куда будет записана ширина загруженного изображения в пикселях;
+outHeight — указатель на переменную куда будет записана высота загруженного изображения в пикселях;
+outPixels — указатель на переменную куда будет записан указатель на массив пикселей изображения.

+ +

int viewportSave(const char *path);

+ +

Сохранить изображение из текущей области рисования OpenGL в файл. Обычно используется чтобы сделать снимок экрана (сохраняется только внутренняя область окна программы).

+ +

Функция возвращает TRUE в случае успеха, иначе FALSE.

+ +

См. также imageSave, imageFromViewport.

+ +

Важно: Если файл по указанному пути уже существует, то он будет перезаписан. Вы может проверить существование файла функцией fileExists.

+ +

unsigned int pixelGet(const void *pixel);

+ +

Сконвертировать пиксель в формате RGBA32, который используется в функции imageLoad в код цвета Helianthus. См. также pixelSet, imageGetPixel.

+ +

void pixelSet(void *pixel, unsigned int colorCode);

+ +

Записать цвет в пиксель в формате RGBA32, который используется в функции imageLoad. См. также pixelGet, imageSetPixel.

+ +

unsigned int imageGetPixel(int width, int height, const void *pixels, int x, int y);

+ +

Получить цвет пикселя изображения. См. также imageSetPixel, pixelGet, imageLoad.

+ +

Параметры:

+ +

width — ширина изображения в пикселях;
+height — высота изображения в пикселях;
+pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad;
+x, y — координаты пикселя.

+ +

void imageSetPixel(int width, int height, void *pixels, int x, int y, unsigned int colorCode);

+ +

Установить цвет пикселя изображения. См. также imageGetPixel, pixelSet, imageLoad.

+ +

Параметры:

+ +

width — ширина изображения в пикселях;
+height — высота изображения в пикселях;
+pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad;
+x, y — координаты пикселя,
+colorCode — код цвета.

+ +
+ + diff --git a/doc/ru/camera.html b/doc/ru/camera.html index d3a65d7..9ce1a24 100644 --- a/doc/ru/camera.html +++ b/doc/ru/camera.html @@ -2,7 +2,7 @@ -Камера - Helianthus +Буфер кадра - Helianthus
-

Камера

+

Буфер кадра

-

Камера позволяет вам перемещать позицию обзора и масштаб при рисовании спрайтов. При использовании камеры вам не надо изменять позицию всех спрайтов чтобы имитировать смену точки обзора.

+

Буфер кадра позволяет вам рисовать не только на экране, но и прямо на текстуре в видео-памяти применяя при этом те же функции рисования.

-

Для работы с камерой её нужно включить функцией cameraOn,

+

Создать буфер кадра можно функцией createFramebuffer, которая возвращает значение типа Framebuffer, которое по сути является адресом в памяти — указателем на описание буфера кадра внутри библиотеки Helianthus. Количество буферов кадра с которыми вы можете одновременно работать и их максимальные размеры зависят от вашего видео-драйвера.

-

Затем используя функции cameraSetX, cameraSetY, cameraSetZoom задать положение и масштаб вашей камеры.

+

После создания буфера кадра в можете создать связанную с ним однокадровую анимацию при помощи функции createAnimationFromFramebuffer. Это будет не простая анимация — изображение в ней анимации будет изменяться как только вы что-либо нарисуете на вашем буфере кадра.

-

Камера действует только на отображение спрайтов, на прочие функции рисования она не влияет.

+

Для того чтобы начать рисовать на буфере кадра вам нужно вызвать функцию target. После завершение рисования вы можете снова вернуться к рисованию на экране обратившись к функции noTarget.

Функции:

-

void cameraOn();

+

Framebuffer createFramebuffer(int width, int height);

-

Включить камеру. Спрайты будут рисоваться с учётом положения камеры.

+

Создаёт буфер кадра заданных размеров со включенным сглаживанием, но с выключенным повторением текстуры по горизонтали и вертикали. См. также createFramebufferEx, createAnimationFromFramebuffer, target.

-

void cameraOff();

+

Параметры:

-

Выключить камеру. Спрайты будут рисоваться как обычно — без учёта положения камеры.

+

width — ширина нового буфера кадра в пикселях;
+height — высота нового буфера кадра в пикселях.

-

int cameraIsActive();

+

Framebuffer createFramebufferEx(int width, int height, const void *pixels, int horWrap, int vertWrap, int smooth);

-

Возвращает TRUE если камера включена или FALSE если выключена. См. также cameraOn, cameraOff.

+

Создать буфер кадра с расширенным набором настроек. См. также createFramebuffer, createFramebufferFromFile, createAnimationFromFramebuffer, target.

-

double cameraMouseX();

-

double cameraMouseY();

+

Параметры:

-

Данные функции возвращают координаты мыши с учётом текущего положения камеры. См. также mouseX, mouseY.

+

width — ширина нового буфера кадра в пикселях;
+height — высота нового буфера кадра в пикселях;
+pixels — указатель на массив пикселей (смотрите формат в описании функции imageLoad), которые зададут начальное изображение буфера кадра; этот параметр может быть NULL, буфер будет заполнен прозрачными писелями;
+horWrap — включить горизонтальное повторение для текстуры созданной на основе буфера кадра (TRUE или FALSE);
+vertWrap — включить вертикальное повторение для текстуры созданной на основе буфера кадра (TRUE или FALSE);
+smooth — включить сглаживание (билинейная фильтрация) для текстуры созданной на основе буфера кадра (TRUE или FALSE).

-

double cameraGetX();

-

double cameraGetY();

-

void cameraSetX(double x);

-

void cameraSetY(double y);

+

Framebuffer createFramebufferFromFile(const char *path);

-

Получить (Get) и задать (Set) координаты камеры.

+

Создать буфер кадра на основе изображения загруженного из файла. Размеры буфера будут соответствовать размеру изображения и само изображение будет загружено в буфер кадра в качестве его начального состояния. Будет включено сглаживание, но отключено повторение узора текстуры по горизонтали и вертикали.

-

double cameraGetZoom();

-

void cameraSetZoom(double zoom);

+

Параметры:

-

Получить (Get) и задать (Set) масштаб камеры.

+

path — путь к файлу изображения.

+ +

void framebufferDestroy(Framebuffer framebuffer);

+ +

Удалить буфер кадра. См. также createFramebuffer.

+ +

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на буфер кадра. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на буфер кадра, буфер удалён. Вы можете занести в эту переменную другой буфер кадра, но использовать старое значение переменной больше нельзя это приведёт у ошибкам и непредсказуемому поведению программы.

+ +

void framebufferFlush(Framebuffer framebuffer);

+ +

Видео-драйвер обычно выполняет рисование не в тот момент, когда вы отправляете соответствующую команду, а откладывает этот процесс до тех под пока операционная система не затребует отобразить результат рисования на экране.

+ +

Данная функция заставляет видео-драйвер завершить все операции немедленно. Обычно вам не нужно будет её использовать, везде где это требуется Helianthus сделает это за вас. Однако, эта функция вам может понадобиться если вы используете функции OpenGL напрямую, минуя функции рисования библиотеки Helianthus.

+ +

int framebufferGetWidth(Framebuffer framebuffer);

+ +

Возвращает ширину буфера кадра в пикселях. См. также framebufferGetHeight.

+ +

int framebufferGetHeight(Framebuffer framebuffer);

+ +

Возвращает высоту буфера кадра в пикселях. См. также framebufferGetWidth.

+ +

unsigned int framebufferGetGLTexId(Framebuffer framebuffer);

+ +

Возвращает внутренний идентификатор текстуры OpenGL связанной с буфером кадра. См. также framebufferGetGLId, framebufferFlush.

+ +

unsigned int framebufferGetGLId(Framebuffer framebuffer);

+ +

Возвращает внутренний идентификатор буфера кадра OpenGL. См. также framebufferGetGLTexId, framebufferFlush.

+ +

void projectionByViewport();

+ +

Устанавливает матрицу проекции OpenGL таким образом, чтобы начало координат было в верхнем левом углу области вывода OpenGL, а единичный отрезок соответствовал размеру пикселя. См. также targetEx.

+ +

void viewportByFramebuffer(Framebuffer framebuffer);

+ +

Устанавливает область вывода OpenGL на всю площадь заданного буфера кадра. См. также targetEx.

+ +

void viewportByWindow();

+ +

Устанавливает область вывода OpenGL на всю площадь окна. См. также targetEx.

+ +

void targetEx(Framebuffer framebuffer, int updateViewport, int updateProjection);

+ +

Устанавливает текущую область рисования. Если framebuffer не NULL, то рисование будет производиться на буфере кадра, иначе на окне. Параметры updateViewport и updateProjection позволяют вам отключить изменение области вывода OpenGL и матрици проекции соответственно. См. также target, noTarget, viewportByFramebuffer, viewportByWindow, projectionByViewport.

+ +

Параметры:

+ +

framebuffer — буфер кадра, если NULL, то окно программы будет выбрано в качестве целевого холста для рисования;
+updateViewport — задать область вывода OpenGL соответствующую новому целевому холсту (TRUE или FALSE, см. viewportByFramebuffer, viewportByWindow);
+updateProjection — задать матрицу проекции OpenGL соответствующую новой области вывода (TRUE или FALSE, см. projectionByViewport), игнорируется если updateViewport выключен.

+ +

void target(Framebuffer framebuffer);

+ +

Функция выбирает буфер кадра в качестве целевого холста для рисования. Последующие операции рисование будет проводиться на данном буфере кадра. Если вы будете работать с функциями OpenGL напрямую, минуя функции рисования Helianthus, то вам необходимо знать, что данная функция меняет область вывода (glViewport) и матрицу проекции OpenGL.

+ +

См. также noTarget, targetEx, saveState, restoreState.

+ +

Параметры:

+ +

framebuffer — буфер кадра, если NULL, то окно программы будет выбрано в качестве целевого холста для рисования

+ +

void noTarget();

+ +

Выбрать окно программы в качестве целевого холста для рисования. См. также target, saveState, restoreState.

diff --git a/doc/ru/common.html b/doc/ru/common.html index ebed65c..839ddfd 100644 --- a/doc/ru/common.html +++ b/doc/ru/common.html @@ -10,9 +10,11 @@

Запуск и общие функции

Клавиатура и мышь

Рисование

+

Шрифты и текст

+

Текстуры и анимация

+

Буфер кадра

Спрайты

Группы спрайтов

-

Камера

Звук


Все функции

@@ -43,37 +45,31 @@ void draw() {     // несколько раз в секунду. } -void deinit() { -    // Команды внутри этой функции запустятся -    // только один раз в самом конце при завершении -    // работы программы. -} - int main() {     worldSetInit(&init);     worldSetDraw(&draw); -    worldSetDeinit(&deinit);     worldRun();     return 0; } -

После завершения работы Helianthus (при окончании выполнения функции worldRun) все созданные вами объекты библиотеки будут удалены автоматически. Если вы хотите удалить что-то вручную, смотрите функции удаления для соответствующих объектов (spriteDestroy, groupDestroy, soundDestroy, fontDestroy, closeDirectory).

+

После завершения работы Helianthus (при окончании выполнения функции worldRun) все созданные вами объекты библиотеки будут удалены автоматически. Если вы хотите удалить что-то вручную, смотрите функции удаления для соответствующих объектов (spriteDestroy, groupDestroy, soundDestroy, fontDestroy, textLayoutDestroy, animationDestroy, framebufferDestroy, closeDirectory).

-

Вы можете задать размер окна программы функциями worldSetWidth, worldSetHeight и задать заголовок окна функцией worldSetTitle.

+

Вы можете задать размер окна программы функциями worldSetSize, worldSetWidth, worldSetHeight и задать заголовок окна функцией worldSetTitle. В отличие от большинства функций Helianthus эти функции можно вызывать до запуска worldRun.

Изначально окно имеет фиксированный размер, который вы можете менять только из программы, командами указанными выше. Однако вы можете это изменить и разрешить пользователю изменять размер окна, смотрите функцию worldSetResizable.

Окно программы непрерывно перерисовывается с частотой 24 кадра в секунду. Частоту перерисовки вы можете поменять при помощи функции worldSetFrameRate.

-

Программа ведёт отсчёт времени и кадров с момента запуска вы можете получить значение этих счётчиков пи помощи функций worldGetSeconds и worldGetFrameCount. Длительность одного кадра можно узнать вызвав функцию worldGetTimeStep.

+

Программа ведёт отсчёт времени и кадров с момента запуска вы можете получить значение этих счётчиков пи помощи функций worldGetSeconds и worldGetFrameCount. Длительность одного кадра (длительность предыдущего отрисованного кадра) можно узнать вызвав функцию worldFrameTime.

Также Helianthus предоставляет некоторые общие функции которые не представлены в стандартном я зыке C:
- помощники в генерации случайных чисел (randomNumber, randomFloat);
+- функция поворота вектора rotateVector;
- функции для чтения папок (см. openDirectory);
- функции проверки существования файлов и папок — fileExists, directoryExists.
-- функции для создания всплывающие окна с текстовыми сообщениями (messageBox) и окон для ввода текста (askText, askTextEx).

+- функции для создания всплывающих окон с текстовыми сообщениями (messageBox, questionBox, questionBox3) и окон для ввода текста (askText, askTextEx).

Функции:

@@ -112,7 +108,7 @@ int main() {
 void draw() {
     …
-    if (keyWentPressed("escape")) {
+    if (keyWentDown("escape")) {
         worldStop()
     }
     …
@@ -126,7 +122,7 @@ void draw() {
 
 

void worldSetWidth(int width);

-

Установить ширину окна. См. также worldGetWidth.

+

Установить ширину окна. Эту функцию можно вызывать до вызова worldRun. См. также worldGetWidth, worldSetHeight, worldSetSize.

Параметры:

@@ -138,11 +134,20 @@ void draw() {

void worldSetHeight(int height);

-

Установить высоту окна. См. также worldGetHeight.

+

Установить высоту окна. Эту функцию можно вызывать до вызова worldRun. См. также worldGetHeight, worldSetWidth, worldSetSize.

+ +

Параметры:

+ +

height — новая высота окна.

+ +

void worldSetSize(int width, int height);

+ +

Установить сразу и ширину и высоту окна. Эту функцию можно вызывать до вызова worldRun. См. также worldSetWidth, worldSetHeight.

Параметры:

-

height — новая ширина окна.

+

width — новая ширина окна;
+height — новая высота окна.

int worldGetResizable();

@@ -150,7 +155,7 @@ void draw() {

void worldSetResizable(int resizable);

-

Включает или выключает возможность измерения размеров окна пользователем. Когда включено пользователь может менять размер окна растягивая его, хватаясь за границы, и, появляется кнопка для разворачивания окна на весь экран.

+

Включает или выключает возможность измерения размеров окна пользователем. Когда включено пользователь может менять размер окна растягивая его, хватаясь за границы, и, появляется кнопка для разворачивания окна на весь экран. Эту функцию можно вызывать до вызова worldRun.

Параметры:

@@ -162,27 +167,48 @@ void draw() {

void worldSetTitle(const char *title);

-

Установить заголовок окна.

+

Установить заголовок окна. Эту функцию можно вызывать до вызова worldRun.

Параметры:

title — новый заголовок окна.

-

double worldGetFrameRate();

- -

Возвращает частоту перерисовки окна, количество кадров в секунду. См. также worldSetFrameRate.

-

void worldSetFrameRate(double frameRate);

-

Установить частоту перерисовки окна. См. также worldGetFrameRate.

+

Установить фиксированную частоту перерисовки окна. Эту функцию можно вызывать до вызова worldRun. См. также: worldSetFrameRateEx, worldSetVariableFrameRate.

Параметры:

frameRate — количество кадров в секунду, от 1 до 100.

-

double worldGetTimeStep();

+

void worldSetVariableFrameRate();

+ +

Установить переменную частоту перерисовки окна в диапазоне от 1 до 100 кадров в секунду. См. также: worldSetFrameRateEx.

+ +

double worldGetMinFrameRate();

+ +

Возвращает ранее установленную минимальную частоту перерисовки окна. См. также: worldSetFrameRateEx.

+ +

double worldGetMaxFrameRate();

+ +

Возвращает ранее установленную максимальную частоту перерисовки окна. См. также: worldSetFrameRateEx().

+ +

double worldSetFrameRateEx(double minFrameRate, double maxFrameRate);

+ +

Установить переменную частоту перерисовки окна. В этом режиме Helianthus будет стараться перерисовать окно как можно быстрее — но не быстрее заданной максимальной частоты. Реальная частота кадров будет зависеть от скорости компьютера. Если скорость компьютера и сложность рисуемой сцены не позволяют обеспечить даже минимальной частоты перерисовки, то Helianthus будет подменять реальное время имитируя для вашего приложения работу на скорости соответствующей минимальной частоте кадров — как результат происходящее на экране движение замедлится.

+ +

Казалось бы это очевидное поведение, но нет. В большинству программ, и, наверное, в вашей будущей программе тоже, скорость движения объектов связана со счётчиком времени. И если кадр будет рисоваться очень медленно — более секунды, то за время одного кадра движущийся объект может пройти очень большое расстояние. При этом пользователь будет лишён возможности как-то наблюдать за движением или повлиять на него. Будет лучше в этой ситуации замедлить движение объекта, но за то нарисовать несколько дополнительных кадров, показывающих промежуточные точки движения. Для этого и устанавливается минимальная частота кадров.

+ +

См. также: worldGetMinFrameRate, worldGetMaxFrameRate, worldSetVariableFrameRate.

+ +

Параметры:

-

Возвращает длительность одного кадра в секундах. См. также worldGetFrameRate.

+

minFrameRate — минимальная частота кадров;
+maxFrameRate — максимальная частота кадров.

+ +

double worldGetFrameTime();

+ +

Возвращает длительность отрисовки предыдущего кадра в секундах. Для первого кадра возвращается расчётное значение длительности. См. также worldSetFrameRateEx.

int worldGetFrameCount();

@@ -190,7 +216,7 @@ void draw() {

double worldGetSeconds();

-

Возвращает количество секунд прошедшее с момента запуска программы (с момента вызова функции worldRun. См. также worldGetFrameCount.

+

Возвращает количество секунд прошедшее с момента запуска программы (с момента вызова функции worldRun. Это время может отставать от реального, если компьютер слишком медленно рисовал кадры. См. также worldSetFrameRateEx, worldGetFrameCount.

int randomNumber(int min, int max);

@@ -205,6 +231,16 @@ void draw() {

Возвращает случайное дробное число в диапазоне от 0 до 1.

+

void rotateVector(double *x, double *y, double angle);

+ +

Повернуть вектор (x, y) на угол angle. Функция принимает два указателя на координаты вектора, повёрнутый вектор записывается по указанным адресам вместо старого.

+ +

Параметры:

+ +

x — указатель на переменную хранящую координату x;
+y — указатель на переменную хранящую координату y;
+angle — угол поворота в градусах.

+

Directory openDirectory(const char *path);

Если папка существует, то функция читает список файлов в папке и сохраняет этот список в памяти. Возвращает значение типа Directory, которое является адресом в памяти — указателем на описание списка внутри библиотеки Helianthus.

@@ -272,9 +308,32 @@ if (dir) {

message — текстовое сообщение.

-

void askText(const char *question, char *answer, int maxAnswerSize);

+

int questionBox(const char *question, const char *answer0, const char *answer1);

+ +

Функция показывает на экране окно вопроса с двумя вариантами ответа. Работа программы будет приостановлена до тех пор пока пользователь не выберет один из вариантов или не закроет окно вопроса (что равносильно выбору варианта номер 0). Функция возвращает номер выбранного ответа — 0 или 1. См. также: messageBox, questionBox3.

+ +

Параметры:

+ +

question — текст задаваемого вопроса;
+answer0 — такст варианта ответа номер 0, этот вариант выбирается если пользователь закрывает окно вопроса или нажимает клавишу Esc. Удобно использовать с текстом «Нет» или «Отмена»;
+answer1 — текст варианта ответа номер 1, этот вариант выбирается по-умолчанию если пользователь нажимает клавишу Enter. Удобно использовать с текстом «Да» или «OK».

+ +

int questionBox3(const char *question, const char *answer0, const char *answer1, const char *answer2);

+ +

Функция показывает на экране окно вопроса с тремя вариантами ответа. Работа программы будет приостановлена до тех пор пока пользователь не выберет один из вариантов или не закроет окно вопроса (что равносильно выбору варианта номер 0). Функция возвращает номер выбранного ответа — 0, 1 или 2. См. также: messageBox, questionBox.

+ +

Параметры:

+ +

question — текст задаваемого вопроса;
+answer0 — такст варианта ответа номер 0, этот вариант выбирается если пользователь закрывает окно вопроса или нажимает клавишу Esc. Удобно использовать с текстом «Отмена» в наборе Да/Нет/Отмена;
+answer1 — такст варианта ответа номер 1. Удобно использовать с текстом «Нет» в наборе Да/Нет/Отмена;
+answer2 — текст варианта ответа номер 2, этот вариант выбирается по-умолчанию если пользователь нажимает клавишу Enter. Удобно использовать с текстом «Да» в наборе Да/Нет/Отмена.

+ + + +

int askText(const char *question, char *answer, int maxAnswerSize);

-

Создаёт окно для ввода текста. Пользователю будет предоставлена для редактирования строка текста из параметра answer. Работа программы будет приостановлена, до тех пор пока пользователь не закончит ввод и не закроет окно. См. также askTextEx.

+

Создаёт окно для ввода текста. Пользователю будет предоставлена для редактирования строка текста из параметра answer. Работа программы будет приостановлена, до тех пор пока пользователь не закончит ввод и не закроет окно. Возвращает TRUE (число 1) при успешном вводе и FALSE (число 0) если пользователь отменил ввод. См. также askTextEx.

Параметры:

@@ -282,9 +341,9 @@ if (dir) { answer — указатель на строку куда будет сохранён ответ, также этот параметр используется чтобы задать начальное значение для текстового поля;
maxAnswerSize — максимальный размер для строки ответа в байтах включая ограничивающий нулевой байт.

-

void askTextEx(const char *question, char *answer, int maxAnswerSize, int multiline, int password);

+

int askTextEx(const char *question, char *answer, int maxAnswerSize, int multiline, int password);

-

Создаёт окно для ввода текста. Пользователю будет предоставлен для редактирования текст из параметра answer. Позволяет работать с многострочным текстом и прятать вводимые символы (для ввода пароля). Работа программы будет приостановлена, до тех пор пока пользователь не закончит ввод и не закроет окно. См. также askText.

+

Создаёт окно для ввода текста. Пользователю будет предоставлен для редактирования текст из параметра answer. Позволяет работать с многострочным текстом и прятать вводимые символы (для ввода пароля). Работа программы будет приостановлена, до тех пор пока пользователь не закончит ввод и не закроет окно. Возвращает TRUE (число 1) при успешном вводе и FALSE (число 0) если пользователь отменил ввод. См. также askText.

Параметры:

diff --git a/doc/ru/drawing.html b/doc/ru/drawing.html index b165cf9..7790fbb 100644 --- a/doc/ru/drawing.html +++ b/doc/ru/drawing.html @@ -10,9 +10,11 @@

Запуск и общие функции

Клавиатура и мышь

Рисование

+

Шрифты и текст

+

Текстуры и анимация

+

Буфер кадра

Спрайты

Группы спрайтов

-

Камера

Звук


Все функции

@@ -21,10 +23,56 @@

Рисование

-

Перечисленные ниже функцию позволяют рисовать на экране различные фигуры и текст.

+

Перечисленные ниже функции позволяют рисовать на экране различные фигуры и текст.

-

Для указания цвета используется его текстовое наименование.
-Вот список наименований:
+

Для указания цвета используется его числовой код. Код можно записать в виде шестнадцатеричного числа, например: 0xFF0000AA — это полупрозрачный красный (также как #FF0000AA в формате web). Однако проще всего получить код используя вспомогательные функции: colorByName, colorByRGB, colorByHSV, colorByYUV, а также их аналоги с альфа-каналом: colorByNameA, colorByRGBA, colorByHSVA, colorByYUVA.

+ +

Вы можете также провести и обратную операцию — извлечь данные отдельных цветовых каналов из кода цвета, см. функции: colorGetRed, colorGetGreen, colorGetBlue, colorGetAlpha, colorGetHue, colorGetSaturation, colorGetValue, colorGetYLuminance, colorGetUChromanance, colorGetVChromanance.

+ +

Для рисования линий и многоугольников используются функции moveTo, lineTo, closePath, strokePath. При этом функции stroke и fill задают цвет линий и заливки. Функция strokeWeight задаёт толщину линий. Вот пример рисования красного треугольника с чёрным контуром:

+ +
+fill("red");
+stroke("black");
+strokeWeight(10);
+moveTo(100, 300);
+lineTo(300, 300);
+lineTo(50, 200);
+closePath();
+
+ + +

Также существуют отдельные функции для рисования точек (point), линий (line), прямоугольников (rect), правильных многоугольников (regularPolygon), эллипсов (ellipse) и дуг окружности (arc), смотрите описания функций ниже.

+ +

Для очистки экрана используйте функцию clear. Функция background задаёт цвет фона — функция clear закрасит все пиксели именно этим цветом. Обратите внимание, что перед рисованием очередного кадра картинка полностью затирается цветом фона. Если вам необходимо сохранять картинку, то вам либо придётся повторить все операции рисования выполненные ранее или обратиться к разделам «Буфер кадра» и «Текстуры и анимация», чтобы узнать, как можно рисовать не на экран, а в текстуру.

+ +

Для рисования текста см. раздел «Шрифты и текст».

+ +

Трансформации и прочие преобразования

+ +

Перед рисованием вы можете сместить, повернуть или растянуть выводимое изображение при помощи функций соответственно: translate, rotate и scale. Таким образом вы можете как бы изменить позицию камеры. Отменить все вышеуказанные трансформации можно вызвав функцию noTransform. Указанные функции меняют текущую матрицу OpenGL, если вы знакомы с OpenGL, то можете менять матрицы напрямую — на работу Helianthus это не повлияет.

+ +

Также вы можете ограничить область рисования задав прямоугольник отсечения — cliprect.

+ +

Также обратите внимание на функции saveState и restoreState. Они позволяют соответственно сохранить действующие в данный момент преобразование и затем вернуться к сохранённому состоянию.

+ +

Функция resetState отменяет все преобразования.

+ +

Фукнции saveState, restoreState и resetState затрагивают также выбранный шрифт (см. textFont), выбранный буфер кадра (см. target), матрицу проекции (см. projectionByVireport) и координаты области рисования (см. viewportByFramebuffer, viewportByWindow).

+ +

Взаимодействие с OpenGL

+ +

Helianthus использует библиотеку OpenGL для рисования. Вы тоже можете использовать функции OpenGL в своих программах. Helianthus спроектирована так чтобы минимально влиять на состояние OpenGL, так чтобы вы могли полноценно использовать все функции библиотеки OpenGL, если вы того захотите. Например, если вы вызвали функцию translate, то изменится только текущая матрица OpenGL, обычно, это матрица модели.

+ +

Вы можете также использовать рисование в 3D, в этом случае, если вы обратитесь к 2D функциям Helianthus — они будут выполнены в плоскости XY и координата Z будет принята равной нулю.

+ +

Функции:

+ +

unsigned int colorByName(const char *colorName);

+ +

Функция генерирует код цвета по его текстовому наименованию.

+ +

Вот список наименований:
    "transparent",
    "black",
    "white",
@@ -46,89 +94,191 @@     #0000ff — синий;
    #00ff00aa — зелёный полупрозрачный.

-

Вы можете сгенерировать текстовое наименования для любого цвета по его числовым составляющим при помощи функций rgb и rgba.

+

Параметры:

-

Для рисования линий и многоугольников используются функции moveTo, lineTo, closePath, strokePath. При этом функции stroke и fill задают цвет линий и заливки. Функция strokeWeight задаёт толщину линий. Вот пример рисования красного треугольника с чёрным контуром:

+

colorName — текстовое наименование цвета.

-
-fill("red");
-stroke("black");
-strokeWeight(10);
-moveTo(100, 300);
-lineTo(300, 300);
-lineTo(50, 200);
-closePath();
-
+

unsigned int colorByNameA(const char *colorName, double a);

+

Генерирует код цвета по его текстовому наименованию с применением прозрачности (alpha). См. также colorByName. Если в текстовом наименовании уже заключён цвет с прозрачностью (alpha) то значения альфа-канала будут перемножены.

-

Также существуют отдельные функции для рисования прямоугольников, линий, эллипсов и дуг окружности, смотрите описания функций ниже.

+

Параметры:

-

Для вывода текста используются функции text, textAlign, textFontFamily и textSize. Смотрите их описание ниже. Вы можете загружать собственные шрифты из файлов (TrueType или OpenType) при помощи функций createFont и textFont.

+

colorName — текстовое наименование цвета;
+a — альфа-канал, степень непрозрачности от 0 до 1, где 0 — полностью прозрачный, 1 — полностью непрозрачный.

-

Функции:

+

unsigned int colorByRGB(double r, double g, double b);

+ +

Генерирует код цвета по трём цветовым составляющим — красный, зелёный, синий. Генерируется полностью непрозрачный цвет (альфа-канал равен 1). См. также colorByRGBA.

+ +

Параметры:

+ +

r — красная составляющая, от 0 до 1;
+g — зелёная составляющая, от 0 до 1;
+b — синяя составляющая, от 0 до 1.

-

void background(const char *color);

+

unsigned int colorByRGBA(double r, double g, double b, double a);

-

Установить цвет фона. Начиная со следующего все кадры будут рисоваться на выбранном фоне.

+

Генерирует код цвета по трём цветовым составляющим — красный, зелёный, синий — и прозрачности — альфа-канал. См. также colorByRGB.

Параметры:

-

color — текстовое наименование цвета.

+

r — красная составляющая, от 0 до 1;
+g — зелёная составляющая, от 0 до 1;
+b — синяя составляющая, от 0 до 1;
+a — альфа-канал, степень непрозрачности от 0 до 1, где 0 — полностью прозрачный, 1 — полностью непрозрачный.

-

void fill(const char *color);

+

unsigned int colorByHSV(double h, double s, double v);

-

Установить цвет заливки. После вызова этой функции все фигуры будут заполняться выбранным цветом. См. также noFill.

+

Генерирует код цвета по трём составляющим в системе HSV — оттенок (hue), цветность (saturation), яркость (value). Генерируется полностью непрозрачный цвет (альфа-канал равен 1). См. также colorByHSVA.

Параметры:

-

color — текстовое наименование цвета.

+

h — оттенок (hue) в градусах на цветовом круге, обычно от 0 до 360;
+s — цветность (saturation), от 0 до 1;
+v — яркость, от 0 до 1.

-

void noFill();

+

unsigned int colorByHSVA(double h, double s, double v, double a);

+ +

Генерирует код цвета по трём составляющим в системе HSV — оттенок (hue), цветность (saturation), яркость (value) — и прозрачности (alpha). См. также colorByHSV.

-

Отключить заливку фигур. После вызова этой функции все фигуры будут рисоваться без заполнения. См. также fill.

+

Параметры:

-

void stroke(const char *color);

+

h — оттенок (hue) в градусах на цветовом круге, обычно от 0 до 360;
+s — цветность (saturation), от 0 до 1;
+v — яркость, от 0 до 1;
+a — альфа-канал, степень непрозрачности от 0 до 1, где 0 — полностью прозрачный, 1 — полностью непрозрачный.

-

Установить цвет контура. После вызова этой функции все фигуры будут рисоваться с контуром выбранного цвета. Также эта функция задаёт цвет рисования текста См. также noStroke.

+

unsigned int colorByYUV(double y, double u, double v);

+ +

Генерирует код цвета по трём составляющим в системе YUV. Генерируется полностью непрозрачный цвет (альфа-канал равен 1). См. также colorByYUVA.

Параметры:

-

color — текстовое наименование цвета.

+

y — яркость, от 0 до 1;
+u — цветоразностный компонент U, от -1 до 1;
+v — цветоразностный компонент V, от -1 до 1.

-

void noStroke();

+

unsigned int colorByYUVA(double y, double u, double v, double a);

-

Отключить рисование контура. После вызова этой функции все фигуры будут рисоваться без прорисовки контура. См. также stroke.

+

Генерирует код цвета по трём составляющим в системе YUV и прозрачности. См. также colorByYUV.

-

Важно: Так как текст рисуется цветом контура, эта функция полностью отключает вывод текста.

+

Параметры:

+ +

y — яркость, от 0 до 1;
+u — цветоразностный компонент U, от -1 до 1;
+v — цветоразностный компонент V, от -1 до 1;
+a — альфа-канал, степень непрозрачности от 0 до 1, где 0 — полностью прозрачный, 1 — полностью непрозрачный.

+ +

double colorGetRed(unsigned int colorCode);

+ +

Возвращает красную составляющую цвета. См. также colorByRGBA.

+ +

double colorGetGreen(unsigned int colorCode);

+ +

Возвращает зелёную составляющую цвета. См. также colorByRGBA.

+ +

double colorBlueRed(unsigned int colorCode);

+ +

Возвращает синюю составляющую цвета. См. также colorByRGBA.

+ +

double colorGetAlpha(unsigned int colorCode);

+ +

Возвращает степень непрозрачности цвета — альфа-канал. См. также colorByRGBA.

+ +

double colorGetHue(unsigned int colorCode);

+ +

Возвращает цветовой оттенок в градусах на цветовом круге, от 0 до 360 в системе HSV. См. также colorByHSV.

+ +

double colorGetSaturation(unsigned int colorCode);

+ +

Возвращает цветность (цветовую насыщенность) для выбранного цвета в системе HSV. См. также colorByHSV.

+ +

double colorGetValue(unsigned int colorCode);

+ +

Возвращает яркость для выбранного цвета в системе HSV. См. также colorByHSV.

+ +

double colorGetYLuminance(unsigned int colorCode);

+ +

Возвращает яркость для выбранного цвета в системе YUV. См. также colorByYUV.

+ +

double colorGetUChromanance(unsigned int colorCode);

+ +

Возвращает цветоразностный компонент U для выбранного цвета в системе YUV. См. также colorByYUV.

+ +

double colorGetVChromanance(unsigned int colorCode);

-

void strokeWeight(double weight);

+

Возвращает цветоразностный компонент V для выбранного цвета в системе YUV. См. также colorByYUV.

-

Установить толщину линий и контуров. После вызова этой функции все линии и контуры будут рисоваться с заданной толщиной.

+

void background(unsigned int colorCode);

+ +

Установить цвет фона. Начиная со следующего все кадры будут рисоваться на выбранном фоне. Также влияет на поведение функции clear.

Параметры:

-

weight — толщина линии.

+

colorCode — код цвета.

+ +

void clear();

-

const char* rgb(double r, double g, double b);

+

Заполняет все пиксели цветом фона. См. также background.

-

Функция возвращает текстовое наименование цвета для заданных числовых значений яркости красной, зелёной и синей составляющих.

+

void fill(unsigned int colorCode);

-

Параметры:

+

Установить цвет заливки. После вызова этой функции все фигуры будут заполняться выбранным цветом. См. также stroke, noFill и fillTexture.

-

r — яркость красной составляющей цвета, дробное число от 0 до 1;
-g — яркость зелёной составляющей цвета, дробное число от 0 до 1;
-b — яркость синей составляющей цвета, дробное число от 0 до 1.

+

Параметры:

-

const char* rgba(double r, double g, double b, double a);

+

colorCode — код цвета.

-

Функция возвращает текстовое наименование цвета для заданных числовых значений яркости красной, зелёной и синей составляющих, а также прозрачности.

+

void fillTexture(Animation animation, double x, double y, double width, diuble height, int fixed);

+ +

Установить заливку текстурой. После вызова этой функции все фигуры будут заполняться выбранной текстурой. Для заливки текстурой определяется базовый прямоугольник (по координатам x, y, width, height) в который будет смасштабировано изображение текстуры. Если текстура повторяющаяся, то её копии будут распространяться и за пределами базового прямоугольника. При помощи параметра fixed вы можете зафиксировать базовый прямоугольник текстуры в текущих координатах так, что на них в не будут влиять последующие трансформации перемещения (translate), вращения (rotate) и масштабирования (scale и zoom). См. также fill, noFill и раздел «Текстуры и анимация».

Параметры:

-

r — яркость красной составляющей цвета, дробное число от 0 до 1;
-g — яркость зелёной составляющей цвета, дробное число от 0 до 1;
-b — яркость синей составляющей цвета, дробное число от 0 до 1;
-a — прозрачность, дробное число от 0 до 1, при этом 0 — цвет полностью прозрачный, 1 — цвет непрозрачный.

+

animation — анимированная или статическая текстура;
+x, y — координаты верхнего левого угла базового прямоугольника текстуры;
+width — ширина базового прямоугольника текстуры;
+height — ширина базового прямоугольника текстуры;
+fixed — если TRUE (1 или любое другое число кроме 0), то фиксирует прямоугольник текстуры в текущих координатах — операции трансформации на него не влияют.

+ +

void noFill();

+ +

Отключить заливку фигур. После вызова этой функции все фигуры будут рисоваться без заполнения. См. также fill, fillTexture, saveState и restoreState.

+ +

void stroke(unsigned int colorCode);

+ +

Установить цвет контура. После вызова этой функции все фигуры будут рисоваться с контуром выбранного цвета. Также эта функция задаёт цвет рисования текста. См. также fill, noStroke. и раздел «Шрифты и текст».

+ +

Параметры:

+ +

colorCode — код цвета.

+ +

void strokeTexture(Animation animation, double x, double y, double width, diuble height, int fixed);

+ +

Установить заливку текстурой для контура. После вызова этой функции все фигуры будут заполняться выбранной текстурой. Для заливки текстурой определяется базовый прямоугольник (по координатам x, y, width, height) в который будет смасштабировано изображение текстуры. Если текстура повторяющаяся, то её копии будут распространяться и за пределами базового прямоугольника. При помощи параметра fixed вы можете зафиксировать базовый прямоугольник текстуры в текущих координатах так, что на них в не будут влиять последующие трансформации перемещения (translate), вращения (rotate) и масштабирования (scale и zoom). См. также stroke, noStroke и раздел «Текстуры и анимация».

+ +

Параметры:

+ +

animation — анимированная или статическая текстура;
+x, y — координаты верхнего левого угла базового прямоугольника текстуры;
+width — ширина базового прямоугольника текстуры;
+height — ширина базового прямоугольника текстуры;
+fixed — если TRUE (1 или любое другое число кроме 0), то фиксирует прямоугольник текстуры в текущих координатах — операции трансформации на него не влияют.

+ +

void noStroke();

+ +

Отключить рисование контура. После вызова этой функции все фигуры будут рисоваться без прорисовки контура. См. также stroke, strokeTexture, saveState и restoreState.

+ +

Важно: Так как текст рисуется цветом контура, эта функция полностью отключает вывод текста.

+ +

void strokeWidth(double width);

+ +

Установить толщину линий и контуров. После вызова этой функции все линии и контуры будут рисоваться с заданной толщиной. Изначально толщина равна 1.

+ +

Параметры:

+ +

width — толщина линии.

void moveTo(double x, double y);

@@ -166,6 +316,17 @@ closePath(); width — ширина прямоугольника;
height — высота прямоугольника.

+

void rectTextured(Animation animation, double x, double y, double width, double height);

+ +

Нарисовать прямоугольник и заполнить его выбранной текстурой. Цвет контура задаётся заранее функцией stroke. См. также функции rect, fillTexture, strokeTexture и раздел «Текстуры и анимация».

+ +

Параметры:

+ +

animation — анимированная или статическая текстура;
+x, y — координаты левого верхнего угла прямоугольника;
+width — ширина прямоугольника;
+height — высота прямоугольника.

+

void ellipse(double x, double y, double width, double height);

Нарисовать эллипс. Эллипс рисуется таким чтобы от вписался в ограничивающий прямоугольник (см. функцию rect). Следовательно для того чтобы нарисовать окружность нужно передать одинаковую ширину и высоту ограничивающего прямоугольника. Цвета заполнения и контура задаются заранее функциями fill и stroke.

@@ -180,7 +341,7 @@ closePath();

Нарисовать дугу эллипса заданного ограничивающим прямоугольником. Дуга задаётся значением начального и конечного угла. Цвет линии задаётся функцией stroke.

-

Параметры:

+

Параметры:

x, y — координаты левого верхнего угла ограничивающего прямоугольника;
width — ширина ограничивающего прямоугольника;
@@ -204,14 +365,14 @@ closePath();

Провести прямую линию от первой указанной точки до второй. Цвет линии задаётся функцией stroke.

-

Параметры:

+

Параметры:

x1, y1 — координаты первой точки;
x2, y2 — координаты второй точки.

void point(double x, double y);

-

Нарисовать точку в указанных координатах. Цвет задаётся функцией stroke. Диаметр точки задаётся функцией strokeWeight.

+

Нарисовать точку в указанных координатах. Цвет задаётся функцией stroke. Диаметр точки задаётся функцией strokeWidth.

Параметры:

@@ -221,81 +382,147 @@ closePath();

Нарисовать правильный многоугольник заданного размера с центром в указанной точке. Цвета заполнения и контура задаются функциями 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 textSize(double size);

- -

Установить размер текста (см. функцию text).

- -

Параметры:

- -

size — размер текста в пикселях.

- -

void textFontFamily(const char *family);

- -

Задать один из установленных в системе шрифтов для вывода текста (см. функцию text). Можете посмотреть списки установленных шрифтов в любом установленном на вашем компьютере текстовом редакторе. Вернуть стандартный шрифт можно командой textFontDefault. Для загрузки шрифтов из фала смотрите функции createFont и textFont.

- -

Параметры:

- -

family — текстовое наименование шрифта.

- -

void textFontDefault();

- -

Вернуть стандартный шрифт для вывода текста. Отменяет действие функций textFont и textFontFamily.

- -

Font createFont(const char *path);

- -

Загрузить шрифт из файла. Функция возвращает значение типа Font, которое является адресом в памяти — указателем на описание шрифта внутри библиотеки Helianthus.

- -

Данная функция только загружает шрифт в память, для того чтобы писать текст этим шрифтом на экране вам нужно вызвать ещё и функцию textFont. Вы может иметь множество загруженных шрифтов в программе и переключать их функцией textFont.

- -

См. также fontDestroy.

- -

Параметры:

- -

path — путь к файлу шрифта.

- -

void fontDestroy(Font font);

- -

Выгрузить шрифт из памяти.

- -

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на шрифт. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на шрифт. Вы можете занести в эту переменную другой шрифт, но использовать старое значение переменной больше нельзя это приведёт у ошибкам и непредсказуемому поведению программы.

- -

void textFont(Font font);

- -

Выбрать ранее загруженный из файла шрифт для вывода текста (см. функции createFont и text). Вернуть стандартный шрифт можно командой textFontDefault. Для загрузки системных шрифтов смотрите функцию textFontFamily.

- -

Параметры:

- -

font — шрифт загруженный функцией createFont.

+

void translate(double x, double y);

+ +

Задать смещение системы координат. После вызова этой функции все объекты будут рисоваться с заданным смещением. Смещение производится относительно действующей в данный момент системы координат. См. также rotate, scale и noTransform.

+ +

void rotate(double angle);

+ +

Повернуть текущую систему координат на заданный угол (angle) в градусах. См. также translate, scale и noTransform.

+ + +

void zoom(double z);

+ +

Смасштабировать текущую систему координат на заданный коэффициент (z). Эквивалентно вызову scale(z, z). См. также translate, rotate, scale и noTransform.

+ +

void scale(double x, double y);

+ +

Смасштабировать (растянуть) текущую систему координат на заданные коэффициенты по осям x и y. См. также translate, rotate и noTransform.

+ +

void noTransform();

+ +

Отменяет все преобразования системы координат заданные функциями translate, rotate, scale и zoom. См. также saveState и restoreState.

+ +

void clipRect(double x, double y, double width, double height);

+ +

Задаёт прямоугольник отсечения. Все последующие операции рисования будут выполнены только внутри заданного прямоугольника. Всё что было нарисовано ранее за его пределами останется неизменным. Повторный вызов функции заменяет (а не дополняет) ранее заданную область отсечения. Если вы знакомы с OpenGL, вам будет полезно знать, что данная функция просто задаёт четыре плоскости отсечения (glClipPlane). Область отсечения применяется со всеми действующими в момент вызова функции преобразованиями системы координат, таким образом она может быть на экране не прямоугольной, а, например, иметь форму параллелограмма. См. также noClip.

+ +

void noClip();

+ +

Отменяет область отсечения заданную функцией clipRect. См. также saveState и restoreState.

+ +

void resetState();

+ +

Сбрасывает состояние инструментов рисования к их начальным значениям. Эквивалентно вызову resetStateEx(STATE_ALL). См. также saveState и restoreState.

+ +

void resetStateEx(unsigned int flags);

+ +

Сбрасывает выбранные состояния инструментов рисования к их начальным значениям. Аргумент flags определяет перечень состояний которые необходимо сбросить. Значение для него можно вычислить объединив операцией побитового «или» (вертикальная черта: |) несколько флагов из следующего списка:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
STATE_FILL_COLORцвет заполнения, см. fill
STATE_FILL_TEXTUREтекстура заполнения, см. fillTexture
STATE_STROKE_COLORцвет обводки, см. stroke
STATE_STROKE_TEXTUREтекстура обводки, см. strokeTexture
STATE_STROKE_WIDTHтолщина обводки, см. strokeWidth
STATE_TEXT_ALIGNрасположение текста, см. textAlign
STATE_TEXT_SIZEразмер шрифта, см. textSize
STATE_TEXT_FONTшрифт, см. textFont
STATE_TARGET_FRAMEBUFFERвыбранный буфер кадра, см. target
STATE_TARGET_VIEWPORTтекущая область рисования, см. viewportByFramebuffer, viewportByWindow
STATE_TARGET_PROJECTIONтекущая матрица проекции, см. projectionByViewport
STATE_BACKGROUNDцвет очистки экрана (цвет фона), см. baclground
STATE_TRANSFORMпреобразования системы координат, см. translate, rotate, scale, zoom
STATE_CLIPобласть отсечения, см. clipRect
STATE_FILLобъединение флагов STATE_FILL_*
STATE_STROKEобъединение флагов STATE_STROKE_*
STATE_TEXTобъединение флагов STATE_TEXT_*
STATE_TARGETобъединение флагов STATE_TARGET_*
STATE_ALLобъединение всех флагов
+ + +

void saveState();

+ +

Запоминает состояние всех инструментов рисования для того чтобы впоследствии к ним вернуться вызвав функцию restoreState. Функция может быть вызвана несколько раз чтобы запомнить несколько состояний, при этом позже необходимо будет выполнить соответствующее количество вызовов функции restoreState. Обращение в данной функции эквивалентно вызову saveStateEx(STATE_ALL). См. также resetState.

+ +

void saveStateEx(unsigned int flags);

+ +

Запоминает выбранные состояния инструментов рисования для того чтобы впоследствии к ним вернуться вызвав функцию restoreState. Функция может быть вызвана несколько раз, при этом позже необходимо будет выполнить соответствующее количество вызовов функции restoreState. Аргумент flags определяет перечень состояний которые необходимо запомнить. Значение для него можно вычислить объединив операцией побитового «или» (вертикальная черта: |) несколько флагов из списка представленного в описании функции resetState.
+См. также saveState.

+ +

void restoreState();

+ +

Восстанавливает состояния инструментов рисования ранее сохранённые функцией saveState или saveStateEx. Если функция saveState (или saveStateEx) была вызвана несколько раз, то чтобы вернуться к первоначальному состоянию нужно вызвать restoreState аналогичное количество раз. См. также resetState.

+ +

Важно: следите за тем чтобы количество сохранений (saveState или saveStateEx) всегда совпадало с количеством восстановлений (restoreState).

diff --git a/doc/ru/font.html b/doc/ru/font.html new file mode 100644 index 0000000..7427acd --- /dev/null +++ b/doc/ru/font.html @@ -0,0 +1,163 @@ + + + + +Шрифты и текст - Helianthus + + + +
+ +

Шрифты и текст

+ +

Для вывода текста используются функции text, textAlign и textSize. Смотрите их описание ниже. Цвет выводимого теста определяется функцией stroke.

+ +

Вы можете загружать и использовать собственные шрифты из файлов (TrueType или OpenType) при помощи функций createFont и textFont.

+ +

Прежде чем выводить текст на экран формируется его разметка — определяются координаты и размеры каждого символа. Это делается автоматически и не требует никаких дополнительных действий. Однако для больших текстов эта операция может занять некоторое время. И если вы хотите увеличить производительность своей программы, то можете выполнить разметку текста заранее вызвав функцию createTextLayout и, затем, выводить её на экран функцией textLayoutDraw.

+ +

Функции:

+ +

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 textSize(double size);

+ +

Установить размер текста (см. функцию text).

+ +

Параметры:

+ +

size — размер текста в пикселях.

+ +

Font createFont(const char *path);

+ +

Загрузить шрифт из файла. Функция возвращает значение типа Font, которое является адресом в памяти — указателем на описание шрифта внутри библиотеки Helianthus.

+ +

Данная функция только загружает шрифт в память, для того чтобы писать текст этим шрифтом на экране вам нужно вызвать ещё и функцию textFont. Вы может иметь множество загруженных шрифтов в программе и переключать их функцией textFont.

+ +

См. также fontDestroy. и createFontFromMemory.

+ +

Параметры:

+ +

path — путь к файлу шрифта.

+ +

Font createFontFromMemory(const void *data, int size);

+ +

Создать шрифт из байтов файла шрифта уже загруженных в оперативную память. Функция возвращает значение типа Font, которое является адресом в памяти — указателем на описание шрифта внутри библиотеки Helianthus. См. также fontDestroy и createFont.

+ +

Параметры:

+ +

data — указатель на первый байт данных шрифта;
+size — количество байтов.

+ +

void fontClone(Font font);

+ +

Создать новый шрифт из ранее загруженного — сделать копию.

+ +

void fontDestroy(Font font);

+ +

Выгрузить шрифт из памяти.

+ +

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на шрифт. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на шрифт. Вы можете занести в эту переменную другой шрифт, но использовать старое значение переменной больше нельзя это приведёт у ошибкам и непредсказуемому поведению программы.

+ +

void textFont(Font font);

+ +

Выбрать ранее загруженный из файла шрифт для вывода текста (см. функции createFont и text). Вернуть стандартный шрифт можно командой textFontDefault.

+ +

Параметры:

+ +

font — шрифт загруженный функцией createFont.

+ +

void textFontDefault();

+ +

Вернуть стандартный шрифт для вывода текста. Отменяет действие функции textFont.

+ +

TextLayout createTextLayout(const char *text);

+ +

Создать разметку для заданного текста. Разметка определяет координаты и размер каждого символа текста. Разметка запоминает действующий на момент её создания шрифт (textFont) и выравнивание (textAlign), и, рисование данной разметки будет производиться только этим шрифтом. Однако, вы можете менять размер шрифта (textSize) и его цвет (stroke) непосредственно перед выводом данной разметки на экран. Вы можете узнать ширину (textLayoutGetWidth) и высоту (textLayoutGetHeight) текстового блока, а также выводить на экран весь текст (textLayoutDraw) или отдельные его части (textLayoutDrawSubstr) с применением разных способов заливки.

+ +

См. также textLayoutDestroy.

+ +

void textLayoutDestroy(TextLayout layout);

+ +

Удалить разметку из памяти. См. также createTextLayout.

+ +

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на разметку. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на разметку. Вы можете занести в эту переменную другую разметку, но использовать старое значение переменной больше нельзя это приведёт к ошибкам и непредсказуемому поведению программы.

+ +

void textLayoutDraw(TextLayout layout, double x, double y);

+ +

Вывести ранее созданную текстовую разметку на экран в заданных координатах. См. также createTextLayout и textLayoutDrawSubstr.

+ +

void textLayoutDrawFrom(TextLayout layout, double x, double y, int start);

+ +

Вывести в заданных координатах часть текста разметки начиная от заданного символа (параметр start) до конца текста. См. textLayoutDraw, textLayoutDrawSubstr, createTextLayout.

+ +

void textLayoutDrawSubstr(TextLayout layout, double x, double y, int start, int length);

+ +

Вывести в заданных координатах часть текста разметки длиной length начиная от start. См. textLayoutDraw, textLayoutDrawFrom, createTextLayout.

+ +

double textLayoutGetWidth(TextLayout layout);

+ +

Возвращает ширину текстового блока с учётом действующего в данный момент размера шрифта (textSize). См. также createTextLayout.

+ +

double textLayoutGetHeight(TextLayout layout);

+ +

Возвращает ширину текстового блока с учётом действующего в данный момент размера шрифта (textSize). См. также createTextLayout.

+ +

int textLayoutCursorUp(TextLayout layout, int cursor);

+ +

Возвращает порядковый номер символа находящегося в тексте непосредственно над заданным символом. См. также textLayoutCursorDown и createTextLayout.

+ +

int textLayoutCursorDown(TextLayout layout, int cursor);

+ +

Возвращает порядковый номер символа находящегося в тексте непосредственно под заданным символом. См. также textLayoutCursorUp и createTextLayout.

+ +

double textLayoutCursorGetX(TextLayout layout, int cursor);

+ +

Возвращает координату X левого нижнего края заданного символа. См. также textLayoutCursorGetY и createTextLayout.

+ +

double textLayoutCursorGetY(TextLayout layout, int cursor);

+ +

Возвращает координату Y левого нижнего края заданного символа. См. также textLayoutCursorGetX и createTextLayout.

+ +

double textLayoutCursorGetHeight(TextLayout layout, int cursor);

+ +

Возвращает высоту заданного символа. См. также textLayoutCursorGetX, textLayoutCursorGetY и createTextLayout.

+ +
+ + diff --git a/doc/ru/framebuffer.html b/doc/ru/framebuffer.html new file mode 100644 index 0000000..69c597f --- /dev/null +++ b/doc/ru/framebuffer.html @@ -0,0 +1,132 @@ + + + + +Буфер кадра - Helianthus + + + +
+ +

Буфер кадра

+ +

Буфер кадра позволяет вам рисовать не только на экране, но и прямо на текстуре в видео-памяти применяя при этом те же функции рисования.

+ +

Создать буфер кадра можно функцией createFramebuffer, которая возвращает значение типа Framebuffer, которое по сути является адресом в памяти — указателем на описание буфера кадра внутри библиотеки Helianthus. Количество буферов кадра с которыми вы можете одновременно работать и их максимальные размеры зависят от вашего видео-драйвера.

+ +

После создания буфера кадра в можете создать связанную с ним однокадровую анимацию при помощи функции createAnimationFromFramebuffer. Это будет не простая анимация — изображение в ней анимации будет изменяться как только вы что-либо нарисуете на вашем буфере кадра.

+ +

Для того чтобы начать рисовать на буфере кадра вам нужно вызвать функцию target. После завершение рисования вы можете снова вернуться к рисованию на экране обратившись к функции noTarget.

+ +

Функции:

+ +

Framebuffer createFramebuffer(int width, int height);

+ +

Создаёт буфер кадра заданных размеров со включенным сглаживанием, но с выключенным повторением текстуры по горизонтали и вертикали. См. также createFramebufferEx, createAnimationFromFramebuffer, target.

+ +

Параметры:

+ +

width — ширина нового буфера кадра в пикселях;
+height — высота нового буфера кадра в пикселях.

+ +

Framebuffer createFramebufferEx(int width, int height, const void *pixels, int horWrap, int vertWrap, int smooth);

+ +

Создать буфер кадра с расширенным набором настроек. См. также createFramebuffer, createFramebufferFromFile, createAnimationFromFramebuffer, target.

+ +

Параметры:

+ +

width — ширина нового буфера кадра в пикселях;
+height — высота нового буфера кадра в пикселях;
+pixels — указатель на массив пикселей (смотрите формат в описании функции imageLoad), которые зададут начальное изображение буфера кадра; этот параметр может быть NULL, буфер будет заполнен прозрачными писелями;
+horWrap — включить горизонтальное повторение для текстуры созданной на основе буфера кадра (TRUE или FALSE);
+vertWrap — включить вертикальное повторение для текстуры созданной на основе буфера кадра (TRUE или FALSE);
+smooth — включить сглаживание (билинейная фильтрация) для текстуры созданной на основе буфера кадра (TRUE или FALSE).

+ +

Framebuffer createFramebufferFromFile(const char *path);

+ +

Создать буфер кадра на основе изображения загруженного из файла. Размеры буфера будут соответствовать размеру изображения и само изображение будет загружено в буфер кадра в качестве его начального состояния. Будет включено сглаживание, но отключено повторение узора текстуры по горизонтали и вертикали.

+ +

Параметры:

+ +

path — путь к файлу изображения.

+ +

void framebufferDestroy(Framebuffer framebuffer);

+ +

Удалить буфер кадра. См. также createFramebuffer.

+ +

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на буфер кадра. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на буфер кадра, буфер удалён. Вы можете занести в эту переменную другой буфер кадра, но использовать старое значение переменной больше нельзя это приведёт у ошибкам и непредсказуемому поведению программы.

+ +

void framebufferFlush(Framebuffer framebuffer);

+ +

Видео-драйвер обычно выполняет рисование не в тот момент, когда вы отправляете соответствующую команду, а откладывает этот процесс до тех под пока операционная система не затребует отобразить результат рисования на экране.

+ +

Данная функция заставляет видео-драйвер завершить все операции немедленно. Обычно вам не нужно будет её использовать, везде где это требуется Helianthus сделает это за вас. Однако, эта функция вам может понадобиться если вы используете функции OpenGL напрямую, минуя функции рисования библиотеки Helianthus.

+ +

int framebufferGetWidth(Framebuffer framebuffer);

+ +

Возвращает ширину буфера кадра в пикселях. См. также framebufferGetHeight.

+ +

int framebufferGetHeight(Framebuffer framebuffer);

+ +

Возвращает высоту буфера кадра в пикселях. См. также framebufferGetWidth.

+ +

unsigned int framebufferGetGLTexId(Framebuffer framebuffer);

+ +

Возвращает внутренний идентификатор текстуры OpenGL связанной с буфером кадра. См. также framebufferGetGLId, framebufferFlush.

+ +

unsigned int framebufferGetGLId(Framebuffer framebuffer);

+ +

Возвращает внутренний идентификатор буфера кадра OpenGL. См. также framebufferGetGLTexId, framebufferFlush.

+ +

void projectionByViewport();

+ +

Устанавливает матрицу проекции OpenGL таким образом, чтобы начало координат было в верхнем левом углу области вывода OpenGL, а единичный отрезок соответствовал размеру пикселя. См. также targetEx.

+ +

void viewportByFramebuffer(Framebuffer framebuffer);

+ +

Устанавливает область вывода OpenGL на всю площадь заданного буфера кадра. См. также targetEx.

+ +

void viewportByWindow();

+ +

Устанавливает область вывода OpenGL на всю площадь окна. См. также targetEx.

+ +

void targetEx(Framebuffer framebuffer, int updateViewport, int updateProjection);

+ +

Устанавливает текущую область рисования. Если framebuffer не NULL, то рисование будет производиться на буфере кадра, иначе на окне. Параметры updateViewport и updateProjection позволяют вам отключить изменение области вывода OpenGL и матрици проекции соответственно. См. также target, noTarget, viewportByFramebuffer, viewportByWindow, projectionByViewport.

+ +

Параметры:

+ +

framebuffer — буфер кадра, если NULL, то окно программы будет выбрано в качестве целевого холста для рисования;
+updateViewport — задать область вывода OpenGL соответствующую новому целевому холсту (TRUE или FALSE, см. viewportByFramebuffer, viewportByWindow);
+updateProjection — задать матрицу проекции OpenGL соответствующую новой области вывода (TRUE или FALSE, см. projectionByViewport), игнорируется если updateViewport выключен.

+ +

void target(Framebuffer framebuffer);

+ +

Функция выбирает буфер кадра в качестве целевого холста для рисования. Последующие операции рисование будет проводиться на данном буфере кадра. Если вы будете работать с функциями OpenGL напрямую, минуя функции рисования Helianthus, то вам необходимо знать, что данная функция меняет область вывода (glViewport) и матрицу проекции OpenGL.

+ +

См. также noTarget, targetEx, saveState, restoreState.

+ +

Параметры:

+ +

framebuffer — буфер кадра, если NULL, то окно программы будет выбрано в качестве целевого холста для рисования

+ +

void noTarget();

+ +

Выбрать окно программы в качестве целевого холста для рисования. См. также target, saveState, restoreState.

+ +
+ + diff --git a/doc/ru/functions.html b/doc/ru/functions.html index da17081..73a736b 100644 --- a/doc/ru/functions.html +++ b/doc/ru/functions.html @@ -10,9 +10,11 @@

Запуск и общие функции

Клавиатура и мышь

Рисование

+

Шрифты и текст

+

Текстуры и анимация

+

Буфер кадра

Спрайты

Группы спрайтов

-

Камера

Звук


Все функции

@@ -29,17 +31,22 @@ worldSetWidth
worldGetHeight
worldSetHeight
+worldSetSize
worldGetResizable
worldSetResizable
worldGetTitle
worldSetTitle
-worldGetFrameRate
worldSetFrameRate
-worldGetTimeStep
+worldSetVariableFrameRate
+worldGetMinFrameRate
+worldGetMaxFrameRate
+worldSetFrameRateEx
+worldGetFrameTime
worldGetFrameCount
worldGetSeconds
randomNumber
randomFloat
+rotateVector
openDirectory
closeDirectory
directoryGetCount
@@ -47,6 +54,8 @@ fileExists
directoryExists
messageBox
+questionBox
+questionBox3
askText
askTextEx

Клавиатура и мышь

@@ -59,51 +68,169 @@ mouseDidMove
mouseX
mouseY
+transformedMouseX
+transformedMouseY
keyEventGetCount
keyEventGet

Рисование

+colorByName
+colorByNameA
+colorByRGB
+colorByRGBA
+colorByHSV
+colorByHSVA
+colorByYUV
+colorByYUVA
+colorGetRed
+colorGetGreen
+colorBlueRed
+colorGetAlpha
+colorGetHue
+colorGetSaturation
+colorGetValue
+colorGetYLuminance
+colorGetUChromanance
+colorGetVChromanance
background
+clear
fill
+fillTexture
noFill
stroke
+strokeTexture
noStroke
-strokeWeight
-rgb
-rgba
+strokeWidth
moveTo
lineTo
resetPath
closePath
strokePath
rect
+rectTextured
ellipse
arc
arcPath
line
point
regularPolygon
-text
-textAlign
-textSize
-textFontFamily
-textFontDefault
-createFont
-fontDestroy
-textFont
+translate
+rotate
+zoom
+scale
+noTransform
+clipRect
+noClip
+resetState
+resetStateEx
+saveState
+saveStateEx
+restoreState
+

Шрифты и текст

+text
+textAlign
+textSize
+createFont
+createFontFromMemory
+fontClone
+fontDestroy
+textFont
+textFontDefault
+createTextLayout
+textLayoutDestroy
+textLayoutDraw
+textLayoutDrawFrom
+textLayoutDrawSubstr
+textLayoutGetWidth
+textLayoutGetHeight
+textLayoutCursorUp
+textLayoutCursorDown
+textLayoutCursorGetX
+textLayoutCursorGetY
+textLayoutCursorGetHeight
+

Текстуры и анимация

+createAnimation
+createAnimationEx
+createAnimationFromGLTexId
+createAnimationFromImage
+createAnimationFromImageEx
+createAnimationFromFramebuffer
+createAnimationFromViewport
+createAnimationFromViewportEx
+createAnimationEmpty
+animationDestroy
+animationClone
+animationCloneEx
+animationGetGLTexId
+animationGetFrameGLTexId
+animationGLTexIdSetOwnership
+animationGetFramesCount
+animationInsert
+animationInsertEx
+animationRemove
+animationClear
+animationGetFps
+animationSetFps
+animationIsPlaying
+animationPlay
+animationPause
+animationAddTime
+animationGetLoop
+animationSetLoop
+animationGetPos
+animationSetPos
+animationGetFrame
+animationSetFrame
+animationNextFrame
+imageLoad
+imageLoadFromMemory
+imageSave
+imageToGLTexture
+imageToGLTextureEx
+imageToExistingGLTexture
+imageFromGLTexture
+imageFromViewport
+viewportSave
+pixelGet
+pixelSet
+imageGetPixel
+imageSetPixel
+

Буфер кадра

+createFramebuffer
+createFramebufferEx
+createFramebufferFromFile
+framebufferDestroy
+framebufferFlush
+framebufferGetWidth
+framebufferGetHeight
+framebufferGetGLTexId
+framebufferGetGLId
+projectionByViewport
+viewportByFramebuffer
+viewportByWindow
+targetEx
+target
+noTarget

Спрайты

createSprite
createSpriteEx
spriteDestroy
spriteDestroyTimer
+spriteClone
spriteGetX
spriteGetY
spriteSetX
spriteSetY
+spriteSetXY
spriteGetVelocityX
spriteGetVelocityY
spriteSetVelocityX
spriteSetVelocityY
spriteSetVelocityXY
+spriteGetAccelerationX
+spriteSetAccelerationX
+spriteGetAccelerationY
+spriteSetAccelerationY
+spriteSetAccelerationXY
spriteSetSpeedAndDirection
spriteGetSpeed
spriteGetDirection
@@ -111,14 +238,13 @@ spriteSetWidth
spriteGetHeight
spriteSetHeight
+spriteSetSize
spriteGetScale
spriteSetScale
spriteGetScaledWidth
spriteGetScaledHeight
spriteGetRotation
spriteSetRotation
-spriteGetRotationSpeed
-spriteSetRotationSpeed
spriteGetRotateToDirection
spriteSetRotateToDirection
spriteGetMirrorX
@@ -129,32 +255,52 @@ spriteSetDepth
spriteGetVisible
spriteSetVisible
-spriteGetTag
-spriteSetTag
+spriteGetFrozen
+spriteSetFrozen
+spriteGetUserTag
+spriteSetUserTag
+spriteGetUserText
+spriteSetUserText
+spriteGetUserData
+spriteSetUserData
spriteGetDebug
spriteSetDebug
spriteOverlap
spriteCollide
-spriteBounceOff
-spritePush
-spriteCollideEx
+spriteIsPointInside
+spriteGetTouchWeight
+spriteGetTouchWeightX
+spriteGetTouchWeightY
+spriteGetTouchFriction
+spriteResetTouch
spriteGetBounciness
spriteSetBounciness
+spriteGetBouncinessThreshold
+spriteSetBouncinessThreshold
+spriteGetFriction
+spriteSetFriction
+spriteGetAirFriction
+spriteSetAirFriction
+spriteGetMassLevel
+spriteSetMassLevel
+spriteGetColliderSensitiveDistance
+spriteSetColliderSensitiveDistance
spriteSetCollider
spriteSetColliderCircle
spriteSetColliderRectangle
spriteSetColliderEx
+spriteGetAnimation
spriteSetAnimation
spriteSetNoAnimation
-spritePlay
-spritePause
-spriteNextFrame
-spriteSetFrame
+spriteGetShapeColor
spriteSetShapeColor
+spriteGetTintColor
spriteSetTintColor
spritePointTo
-mouseIsOver
-mousePressedOver
+spriteMoveBy
+spriteMoveToDirection
+spriteSetDestroy
+spriteDraw
worldGetSpriteCount
worldGetSprite
drawSprites
@@ -171,63 +317,64 @@ groupContains
groupGetCount
groupGet
+groupSpriteByPoint
groupOverlap
groupCollide
-groupBounceOff
-groupPush
-groupCollideEx
groupOverlapGroup
groupCollideGroup
-groupBounceOffGroup
-groupPushGroup
-groupCollideGroupEx
groupOverlapBetween
groupCollideBetween
-groupCollideBetweenEx
groupGetMinDepth
groupGetMaxDepth
groupDestroyEach
groupDestroyTimerEach
groupSetVisibleEach
+groupSetFrozenEach
+groupSetDebugEach
groupSetWidthEach
groupSetHeightEach
groupSetDepthEach
+groupSetXEach
+groupSetYEach
+groupSetXYEach
groupSetVelocityXEach
groupSetVelocityYEach
groupSetVelocityEach
-groupSetLifetimeEach
+groupSetAccelerationXEach
+groupSetAccelerationYEach
+groupSetAccelerationEach
groupSetRotateToDirectionEach
groupSetRotationEach
groupSetRotationSpeedEach
groupSetScaleEach
groupSetMirrorXEach
groupSetMirrorYEach
-groupSetTagEach
groupPointToEach
groupSetSpeedAndDirectionEach
groupSetAnimationEach
groupSetNoAnimationEach
groupSetShapeColorEach
groupSetTintColorEach
+groupSetBouncinessEach
+groupSetBouncinessThresholdEach
+groupSetFrictionEach
+groupSetAirFrictionEach
+groupSetMassLevelEach
+groupSetUserTagEach
+groupSetUserTextEach
+groupSetUserDataEach
+groupSetDestroyEach
+groupSetColliderSensitiveDistance
groupSetColliderEach
groupSetColliderCircleEach
groupSetColliderRectangleEach
groupSetColliderEachEx
-

Камера

-cameraOn
-cameraOff
-cameraIsActive
-cameraMouseX
-cameraMouseY
-cameraGetX
-cameraGetY
-cameraSetX
-cameraSetY
-cameraGetZoom
-cameraSetZoom
+groupDraw

Звук

createSound
+createSoundFromMemory
soundDestroy
+soundClone
soundPlay
soundStop
diff --git a/doc/ru/groups.html b/doc/ru/groups.html index 44eaaa1..951a507 100644 --- a/doc/ru/groups.html +++ b/doc/ru/groups.html @@ -10,9 +10,11 @@

Запуск и общие функции

Клавиатура и мышь

Рисование

+

Шрифты и текст

+

Текстуры и анимация

+

Буфер кадра

Спрайты

Группы спрайтов

-

Камера

Звук


Все функции

@@ -21,13 +23,13 @@

Группы спрайтов

-

Вы можете объединять спрайты в группы. Группы помогут вам если вам нужно выполнять одинаковый действия со множеством спрайтов. Вы можете одной командой задать одинаковую скорость сразу всем спрайтам в группе, либо включить/выключить видимость спрайтов в группу и прочее.

+

Вы можете объединять спрайты в группы. Группы помогут вам если вам нужно выполнять одинаковые действия со множеством спрайтов. Вы можете одной командой задать одинаковую скорость сразу всем спрайтам в группе, либо включить/выключить видимость спрайтов в группу и прочее.

Создать группу можно функцией createGroup, которая возвращает значение типа Group, которое по сути является адресом в памяти — указателем на описание группы внутри библиотеки Helianthus.

Для добавления спрайта в группу используйте функцию groupAdd, для удаления из группы - groupRemove.

-

Все функции работы с группами повторяют функции работы с одиночными спрайтами, только применяются они одновременно ко всем спрайтам в группе. Поэтому заглядывайте и в раздел «Спрайты».

+

Все функции для групп повторяют функции работы с одиночными спрайтами, только применяются они одновременно ко всем спрайтам в группе. Поэтому заглядывайте ещё и в раздел «Спрайты».

Функции:

@@ -37,9 +39,9 @@

Group createEdgesGroup();

-

Создать группу спрайтов ограничивающих края экрана. Используйте эту группу если вам нужно сделать так чтобы спрайт отталкивался от краёв экрана. Смотрите описание физической модели в разделе «Спрайты».

+

Создать группу спрайтов ограничивающих края экрана. Уровень массы для спрайтов рамки равен 100 (см. spriteSetMassLevel). Используйте эту группу если вам нужно сделать так чтобы спрайт отталкивался от краёв экрана. Смотрите описание физической модели в разделе «Спрайты».

-

Group createEdgesGroupEx(double x1, double y1, double x2, double y2, double borderWidth);

+

Group createEdgesGroupEx(double x1, double y1, double x2, double y2, double borderWidth, int massLevel);

Создать группу спрайтов ограничивающих прямоугольник. Функция аналогична функции createEdgesGroup, только рамка создаётся не вокруг краёв экрана, а вокруг заданного вами прямоугольника.

@@ -47,7 +49,8 @@

x1, y1 — координаты верхнего левого угла прямоугольника;
x2, y2 — координаты нижнего правого угла прямоугольника;
-borderWidth — толщина рамки.

+borderWidth — толщина рамки;
+massLevel — уровень массы для рамки, см. spriteSetMassLevel.

void groupDestroy(Group group);

@@ -111,27 +114,29 @@

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, 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 groupCollide(Group group, Sprite sprite);

-

Функции обнаружения и решения столкновений между группой и спрайтом. Смотрите аналогичные функции из раздела «Спрайты». Каждый спрайт из группы будет взаимодействовать с указанным в параметрах функции спрайтом.

+

Функции обнаружения и решения столкновений между группой и спрайтом. Смотрите аналогичные функции из раздела «Спрайты»spriteOverlap и spriteCollide. Каждый спрайт из группы будет взаимодействовать с указанным в параметрах функции спрайтом.

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 groupCollideGroup(Group a, Group b);

-

Функции обнаружения и решения столкновений между группой и группой. Смотрите аналогичные функции из раздела «Спрайты». Каждый спрайт из первой группы будет взаимодействовать с каждым спрайтом из второй группы.

+

Функции обнаружения и решения столкновений между группой и группой. Смотрите аналогичные функции из раздела «Спрайты»spriteOverlap и spriteCollide. Каждый спрайт из первой группы будет взаимодействовать с каждым спрайтом из второй группы.

int groupOverlapBetween(Group group);

-

int groupCollideBetween(Group group, double bounciness);

-

int groupCollideBetweenEx(Group group, int keepVelocity, double bounciness);

+

int groupCollideBetween(Group group);

-

Функции обнаружения и решения столкновений между спрайтами в группе. Смотрите аналогичные функции из раздела «Спрайты». Каждый спрайт в группе взаимодействует со всеми другими спрайтами в группе.

+

Функции обнаружения и решения столкновений между спрайтами в группе. Смотрите аналогичные функции из раздела «Спрайты»spriteOverlap и spriteCollide. Каждый спрайт в группе взаимодействует со всеми остальными спрайтами в группе.

double groupGetMinDepth(Group group);

@@ -150,29 +155,45 @@

Задать таймер на удаление для каждого спрайта в группе. См. также 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 groupSetLifetimeEach(Group group, double lifetime);

+

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 groupSetTagEach(Group group, int tag);

void groupPointToEach(Group group, double x, double y);

void groupSetSpeedAndDirectionEach(Group group, double speed, double angle);

-

void groupSetAnimationEach(Group group, const char *path);

+

void groupSetAnimationEach(Group group, Animation animation);

void groupSetNoAnimationEach(Group group);

-

void groupSetShapeColorEach(Group group, const char *color);

-

void groupSetTintColorEach(Group group, const char *color);

+

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);

@@ -180,6 +201,10 @@

Установить параметры физического тела для каждого спрайта в группе. Смотрите аналогичные функции из раздела «Спрайты».

+

void groupDraw(Group group);

+ +

Нарисовать все спрайты в группе. См. также spriteDraw, drawSprites.

+ diff --git a/doc/ru/index.html b/doc/ru/index.html index 078f04e..12742a3 100644 --- a/doc/ru/index.html +++ b/doc/ru/index.html @@ -10,9 +10,11 @@

Запуск и общие функции

Клавиатура и мышь

Рисование

+

Шрифты и текст

+

Текстуры и анимация

+

Буфер кадра

Спрайты

Группы спрайтов

-

Камера

Звук


Все функции

diff --git a/doc/ru/input.html b/doc/ru/input.html index 749d3d7..4da9595 100644 --- a/doc/ru/input.html +++ b/doc/ru/input.html @@ -10,9 +10,11 @@

Запуск и общие функции

Клавиатура и мышь

Рисование

+

Шрифты и текст

+

Текстуры и анимация

+

Буфер кадра

Спрайты

Группы спрайтов

-

Камера

Звук


Все функции

@@ -25,11 +27,10 @@

Для указания клавиши нужно написать её текстовое наименование, например: "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".

+

Названия клавиш взяты из библиотеки SDL, их полный список вы можете посмотреть в документации к библиотеке SDL:
+    https://wiki.libsdl.org/SDL_Keycode

+ +

,Вы также можете использовать несколько групповых наименований: "any shift", "any ctrl", "any alt", "any gui" — обозначающих нажатие любой из парных клавиш (как левой так и правой). Группы "any /", "any *", "any -", "any +", "any return", "any 0", "any 1"… - отвечают за клавиши имеющие пару на дополнительной цифровой клавиатуре.

Наименований для кнопок мыши всего три: "left", "middle" и "right".

@@ -42,9 +43,9 @@
 void draw() {
     …
-    int count = keyEventCount(KEYEVENT_KEY_WENTDOWN);
+    int count = keyEventGetCount(KEYEVENT_KEY_WENTDOWN);
     for(int i = 0; i < count; ++i) {
-        printf( "pressed key: %s",
+        printf( "pressed key: %s\n",
             keyEventGet(KEYEVENT_KEY_WENTDOWN, i) );
     }
     …
@@ -110,11 +111,19 @@ void draw() {
 
 

double mouseX();

-

Возвращает координату X указателя мыши.

+

Возвращает координату X указателя мыши. Координаты считаются относительно верхнего левого угла окна. См. также: mouseY, transformedMouseX.

double mouseY();

-

Возвращает координату Y указателя мыши.

+

Возвращает координату Y указателя мыши. Координаты считаются относительно верхнего левого угла окна. См. также: mouseX, transformedMouseY.

+ +

double transformedMouseX();

+ +

Возвращает координату X указателя мыши в системе координат рисования с учётом применённых трансформаций. См. также transformedMouseY, mouseX, translate, rotate, zoom.

+ +

double transformedMouseY();

+ +

Возвращает координату Y указателя мыши в системе координат рисования с учётом применённых трансформаций. См. также transformedMouseX, mouseY, translate, rotate, zoom.

int keyEventGetCount(KeyEvent mode);

diff --git a/doc/ru/sound.html b/doc/ru/sound.html index 0a8bb64..368d670 100644 --- a/doc/ru/sound.html +++ b/doc/ru/sound.html @@ -10,9 +10,11 @@

Запуск и общие функции

Клавиатура и мышь

Рисование

+

Шрифты и текст

+

Текстуры и анимация

+

Буфер кадра

Спрайты

Группы спрайтов

-

Камера

Звук


Все функции

@@ -31,18 +33,31 @@

Sound createSound(const char *path);

-

Загрузить звук из указанного файла.

+

Загрузить звук из указанного файла. См. также createSoundFromMemory, soundClone, soundDestroy.

-

Параметры:

+

Параметры:

path — путь к звуковому файлу.

+

Sound createSoundFromMemory(const void *data, int size);

+ +

Загрузить звук из байтов звукового файла ранее загруженных в оперативную память. При загрузке создаётся копия звука и исходные данные больше не требуются. См. также createSound.

+ +

Параметры:

+ +

data — указатель на первый байт данных звукового файла;
+size — количество байт данных звукового файла.

+

void soundDestroy(Sound sound);

Удалить звук.

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на звук. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на звук, звук уже удалён. Вы можете занести в эту переменную другой звук, но использовать старое значение переменной больше нельзя это приведёт к ошибкам и непредсказуемому поведению программы.

+

Sound soundClone(Sound sound);

+ +

Создать копию звука. Вы сможете контролировать воспроизведение этих двух копий независимо друг от друга.

+

void soundPlay(Sound sound, int loop);

Воспроизвести звук.

diff --git a/doc/ru/sprites.html b/doc/ru/sprites.html index 4ddb58c..7de0f49 100644 --- a/doc/ru/sprites.html +++ b/doc/ru/sprites.html @@ -10,9 +10,11 @@

Запуск и общие функции

Клавиатура и мышь

Рисование

+

Шрифты и текст

+

Текстуры и анимация

+

Буфер кадра

Спрайты

Группы спрайтов

-

Камера

Звук


Все функции

@@ -23,11 +25,11 @@

Спрайт — это изображаемый на экране объект, который сохраняет свою позицию и изображения от кадра к кадру. Другими словами для рисования спрайта не нужно каждый раз указывать его координаты, цвет и расположение — он хранит эти параметры внутри себя, их достаточно задать только один раз.

-

Спрайты будут выводится на экран командой drawSprites, она рисует на экране сразу все спрайт. Её достаточно вызвать только один раз за кадр.

+

Спрайты будут выводится на экран командой drawSprites, она рисует на экране сразу все спрайты. Её достаточно вызвать только один раз за кадр.

-

Спрайт может изображаться в виде прямоугольника выбранного вами цвета (spriteSetShapeColor), либо в виде картинки из выбранного вами файла (spriteSetAnimation). Кроме того спрайт может содержать анимацию, для этого вместо одного изображения в него можно загрузить папку с картинками — кадрами. Эти кадры могут переключаться автоматически (spritePlay) или по вашей команде (spriteSetFrame, spriteNextFrame).

+

Спрайт может изображаться в виде прямоугольника выбранного вами цвета (spriteSetShapeColor), либо в виде картинки или анимации из выбранного вами файла (spriteSetAnimation).

-

Положение спрайта задаётся координатами его центра (spriteSetX, spriteSetY), и углом поворота (spriteSetRotation). Кроме того вы можете задать ширину и высоту спрайта (spriteSetWidth, spriteSetHeight)

+

Положение спрайта задаётся координатами его центра (spriteSetX, spriteSetY, spriteSetXY), и углом поворота (spriteSetRotation). Кроме того вы можете задать ширину и высоту спрайта (spriteSetWidth, spriteSetHeight, spriteSetSize).

Создать спрайт можно функцией createSprite, которая возвращает значение типа Sprite, которое по сути является адресом в памяти — указателем на описание спрайта внутри библиотеки Helianthus.

@@ -37,13 +39,15 @@ #include <helianthus.h> Sprite mysprite; +Animation myanimation; void init() {     // Создать новый спрайт с центром в точке (200, 200)     mysprite = createSprite(200, 200); -    // Загрузить файл изображения. -    spriteSetAnimation(mysprite, "picture.png"); +    // Загрузить файл изображения и назначить его нашему спрайту +    myanimation = createAnimation("picture.png"); +    spriteSetAnimation(mysprite, myanimation); } void draw() { @@ -71,63 +75,27 @@ int main() {

Изначально физическое представление спрайта это прямоугольник соответствующий видимой форме спрайта. Но это может быть изменено, например, вы можете представить спрайт для физической модели в виде круга, при этом видимое изображение останется прежним (spriteSetCollider).

-

Физическое тело спрайта позволяет вам определять находится ли над спрайтом указатель мыши, см. функции mouseIsOver и mousePressedOver.

- -

Помимо описания формы и размеров физического тела спрайта вам, скорее всего, понадобится задать и его скорость (spriteSetVelocityXY).

- -

Для обнаружения столкновений и расчёта скоростей и позиций объектов после столкновения необходимо запустить одну из специальных функций. Они представлены в таблице ниже. Каждая из этих функций работает с двумя выбранными вами спрайтами и рассчитывает столкновения только между ними.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Имя функцииПервый спрайт сохраняет свою скорость?Второй спрайт сохраняет свою скорость?Описание
spriteOverlapДа.Да.Спрайты проходят друг через друга, функция просто сообщает вам о факте касания.
spriteCollideНет.Нет.Спрайты отталкиваются друг от друга — обычное столкновение двух объектов
spriteBounceOffНет.Да.Первый спрайт отталкивается от второго, второй же продолжает своё движение так, словно ничего не было.
spritePushДа.Нет.Первый спрайт движется так будто и не было столкновения, второй же отталкивается от первого и меняет свою скорость и направление движения.
spriteCollideExЗадаётся параметрами функции.Задаётся параметрами функции.Это универсальная функция, которая вмещает в себя возможности предыдущих четырёх функций.
- - -

Также указанные функции (кроме spriteOverlap) имеют параметр bounciness — это показатель энергии столкновения.

- -

Если bounciness меньше 1, то взаимная скорость спрайтов после столкновения уменьшится, как если бы столкнулись мешки с песком.

- -

Если больше 1, то скорости после столкновения увеличатся. Можете представить себе супер-упругий волшебный мячик, который после падения на пол подпрыгивает выше чем падал.

- -

Параметр bounciness есть и у каждого спрайта (spriteSetBounciness). При расчёте параметры bounciness от обоих спрайтов и параметр bounciness из функции перемножаются и получается окончательное значение bounciness для расчётов.

- -

Таким образом запустив, например, функцию spritePush для двух ваших спрайтов вы тем самым инициируете расчёт физического взаимодействия межу ними. И кроме того вы одновременно с этим указываете какую роль в физической модели занимает ваш объект. Например для spritePush первый спрайт будет представлять из себя какую-то тяжёлую мощную платформу, сдвинуть которую второй спрайт не может — он просто отталкивается от неё сам, а платформа двигается (или стоит) как ни в чём ни бывало.

- -

Однако работы всего лишь с двумя спрайтами мало для полноценной физической модели. В помощь вам Helianthus предлагает группы спрайтов. Поместив свои спрайты в различные группы (или в одну группу) вы можете одной командой вызвать расчёт столкновений между всеми спрайтами в группе или между спрайтами одной группы со спрайтами другой группы или между группой и одиночным спрайтом.

+

Физическое тело спрайта позволяет вам определять находится ли какая-либо точка внутри спрайта, см. функцию spriteIsPointInside.

+ +

Помимо описания формы и размеров физического тела спрайта вам, скорее всего, понадобится задать и его скорость и ускорение (spriteSetVelocityXY, spriteSetAccelerationXY).

+ +

Также вы можете задать уровень массы спрайта. Спрайты имеют упрощённую физическую модель и считается что масса всех спрайтов с одинаковым уровнем массы одинакова. Однако, если уровень массы спрайтов отличается, то считается что масса объекта с большим уровнем настолько велика, что другой спрайт не может повлиять на скорость и направление движение первого. То есть для спрайта с меньшим уровнем массы, другой спрайт представляет из себя стену, он может оттолкнуться от неё, но сдвинуть не может.

+ +

Таким образом физическая модель либо рассчитывает столкновения двух спрайтов считая их массы равными и они на равных воздействуют друг на друга. Либо считает их массы считаются несоизмеримыми и спрайт с меньшим уровнем просто отталкивается от спрайта с большим уровнем ни как не влияя на его скорость. Всего два варианта, вот такая упрощенная модель.

+ +

Для обнаружения столкновений между двумя спрайтами и расчёта их скоростей и позиций после столкновения необходимо запустить функцию spriteCollide. Если вы хотите всего лишь определить касаются спрайты друг друга или нет, то вам достаточно вызвать функцию spriteOverlap.

+ +

Также вы можете задать коэффициент трения спрайта (spriteSetFriction), он будет использоваться когда один спрайт скользит по другому. Трение будет приводить к замедлению движения. По-умолчанию трения нет.

+ +

Функция spriteSetAirFriction задаёт силу трения о воздух (по умолчанию 0).

+ +

Физическая модель спрайта также имеет параметр отскок или bounciness (spriteSetBounciness), который показывает насколько сильно спрайты отскакивают друг от друга при столкновении. Если bounciness равен единице (значение по-умолчанию), то спрайты отталкиваются без потерь кинетической энергии, но и без её увеличения. Если bounciness меньше одного, то спрайты при столкновении теряют энергию и замедляются. Если bounciness больше одного, то спрайты отлетают друг от друга с увеличенными скоростями (как отталкивающие стержни в пинболе). Так как в столкновении участвуют два спрайта и у каждого из них своё значение bounciness, эти величины перемножаются при вычислении окончательной силы отскока.

+ +

Вы можете задать ещё и порог скорости отскакивания для спрайта - spriteSetBouncinessThreshold. Это значение будет вычтено из скорости спрайта после отскока, если точнее то будет применено среднее значение порога для двух столкнувшихся спрайтов. Таким образом столкновение может полностью поглотить энергию взаимного движения и спрайтов и они продолжат движение вместе с одинаковой скоростью в одном направлении или вовсе остановятся.

+ +

После расчёта столкновений вы можете узнать вектор веса действующего на спрайт и действующую силу трения (spriteGetTouchWeight, spriteGetTouchWeightX, spriteGetTouchWeightY, spriteGetTouchFriction). Эти параметры будут сброшены в нулевые значения автоматически в промежутке между вызовами функции перерисовки кадра. Вы можете сбросить их вручную функцией spriteResetTouch. Расчёт этих параметров зависит от порога касания спрайтов — это тонкая настройка физической модели и обычно вам не требуется её менять (см. функцию spriteSetColliderSensitiveDistance).

+ +

Однако, работы всего лишь с двумя спрайтами мало для полноценной физической модели. В помощь вам Helianthus предлагает группы спрайтов. Поместив свои спрайты в различные группы (или в одну группу) вы можете одной командой вызвать расчёт столкновений между всеми спрайтами в группе или между спрайтами одной группы со спрайтами другой группы или между группой и одиночным спрайтом.

Также функция createEdgesGroup поможет вам создать группу спрайтов обозначающую границы экрана, чтобы ваши объекты отталкивались от краёв экрана.

@@ -163,16 +131,21 @@ int main() {

void spriteDestroyTimer(Sprite sprite, double lifetime);

-

Задаёт таймер для удаления спрайта через определённое время. Рекомендуется больше не обращаться в к этому спрайту из вашей программы и не хранить указатель на него. Так как неизвестно существует ли спрайт ещё или уже сработал таймер удаления. Смотрите также функцию spriteDestroy и примечание к ней.

+

Задаёт таймер для удаления спрайта через определённое время. Рекомендуется больше не обращаться к этому спрайту из вашей программы и не хранить указатель на него. Так как неизвестно существует ли спрайт ещё или уже сработал таймер удаления. Смотрите также функцию spriteDestroy и примечание к ней.

Параметры:

lifetime — время в секундах по истечении которого спрайт должен быть удалён. Если 0 или меньше, то спрайт будет удалён немедленно. Если больше 0, то спрайт будет в один из промежутков между вызовами функции перерисовки кадра.

+

Sprite spriteClone(Sprite sprite);

+ +

Создать точную копию спрайта.

+

double spriteGetX(Sprite sprite);

double spriteGetY(Sprite sprite);

void spriteSetX(Sprite sprite, double x);

void spriteSetY(Sprite sprite, double y);

+

void spriteSetXY(Sprite sprite, double x, double y);

Получить (Get) либо задать (Set) координаты центра спрайта.

@@ -184,6 +157,14 @@ int main() {

Получить (Get) либо задать (Set) координаты вектора скорости спрайта. См. также spriteSetSpeedAndDirection.

+

double spriteGetAccelerationX(Sprite sprite);

+

void spriteSetAccelerationX(Sprite sprite, double x);

+

double spriteGetAccelerationY(Sprite sprite);

+

void spriteSetAccelerationY(Sprite sprite, double y);

+

void spriteSetAccelerationXY(Sprite sprite, double x, double y);

+ +

Получить (Get) либо задать (Set) координаты вектора ускорения спрайта.

+

void spriteSetSpeedAndDirection(Sprite sprite, double speed, double angle);

Задать скорость спрайта через угол направления и абсолютное значение скорости. Если вы не понимаете смысла слов «абсолютное значение», то в здесь подразумевается обычное бытовое значение смысла слова скорость. В данном случае она измеряется в пикселях в секунду.

@@ -211,6 +192,10 @@ int main() {

Получить (Get) либо задать (Set) высоту спрайта.

+

void spriteSetSize(Sprite sprite, double width, double height);

+ +

Задать ширину и высоту спрайта одной командой.

+

double spriteGetScale(Sprite sprite);

void spriteSetScale(Sprite sprite, double scale);

@@ -229,11 +214,6 @@ int main() {

Получить (Get) или задать (Set) поворот спрайта. Не путайте, пожалуйста, с направлением движения спрайта. См. также spriteSetSpeedAndDirection, spriteSetRotateToDirection, spritePointTo.

-

double spriteGetRotationSpeed(Sprite sprite);

-

void spriteSetRotationSpeed(Sprite sprite, double rotationSpeed);

- -

Получить (Get) или задать (Set) скорость вращения спрайта. Да, спрайт имеет ещё и скорость вращения. Вы можете её задать в градусах в секунду и спрайт будет вращаться сам. См. также spriteSetRotation.

-

int spriteGetRotateToDirection(Sprite sprite);

void spriteSetRotateToDirection(Sprite sprite, int rotateToDirection);

@@ -265,10 +245,27 @@ int main() {

Получить (Get) или задать (Set) видимость спрайта. Может принимать значение TRUE (число 1) — спрайт видно, или FALSE (число 0) — спрайт спрятан.

-

int spriteGetTag(Sprite sprite);

-

void spriteSetTag(Sprite sprite, int tag);

+

int spriteGetFrozen(Sprite sprite);

+

void spriteSetFrozen(Sprite sprite, int frozen);

+ +

Получить (Get) или задать (Set) «замороженность» спрайта. Может принимать значение TRUE (число 1) — спрайт заморожен, или FALSE (число 0) — спрайт в обычном состоянии.

+ +

Замороженный спрайт не двигается автоматически, к нему не будет автоматически применяться скорость и ускорение, как это делается для обычных спрайтов.

+ +

int spriteGetUserTag(Sprite sprite);

+

void spriteSetUserTag(Sprite sprite, int tag);

-

Получить (Get) или задать (Set) метку спрайта. Этот параметр не используется внутри спрайта — заносите сюда любое число которое хотите связать с данным спрайтом.

+

Получить (Get) или задать (Set) числовую метку спрайта. Этот параметр не используется внутри спрайта — заносите сюда любое число которое хотите связать с данным спрайтом.

+ +

const char* spriteGetUserText(Sprite sprite);

+

void spriteSetUserText(Sprite sprite, const char *text);

+ +

Получить (Get) или задать (Set) текстовую метку спрайта. Этот параметр не используется внутри спрайта — заносите сюда любой текст которые хотите связать с данным спрайтом. Спрайт создаёт и хранит внутри себя копию данного текста.

+ +

void* spriteGetUserData(Sprite sprite);

+

void spriteSetUserData(Sprite sprite, void *data);

+ +

Получить (Get) или задать (Set) пользовательские данные спрайта. Этот параметр не используется внутри спрайта — заносите сюда указатель на любые данные, которые хотите связать с данным спрайтом. Спрайт хранит в себе только указатель на данные, сами данные не копирует.

int spriteGetDebug(Sprite sprite);

void spriteSetDebug(Sprite sprite, int debug);

@@ -283,44 +280,64 @@ int main() {

Возвращает TRUE если спрайты касаются или накладываются друг на друга. В противном случае возвращает FALSE.

-

int spriteCollide(Sprite a, Sprite b, double bounciness);

+

int spriteCollide(Sprite a, Sprite b);

Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новые скорости и позиции для указанных спрайтов и возвращает TRUE. В противном случае возвращает FALSE. См. описание физической модели в разделе «Спрайты».

-

Параметры:

- -

bounciess — показатель энергии столкновения.

- -

int spriteBounceOff(Sprite sprite, Sprite other, double bounciness);

+

int spriteIsPointInside(Sprite sprite, double x, double y);

-

Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новую скорость и позицию для спрайта sprite (спрайт other не меняет своих параметров) и возвращает TRUE. В противном случае возвращает FALSE. См. описание физической модели в разделе «Спрайты».

+

Проверить попадает ли указанная точка в физическое тело спрайта. Функция возвращает TRUE если попадает и FALSE если нет.

Параметры:

-

bounciess — показатель энергии столкновения.

+

x, y — координаты точки.

-

int spritePush(Sprite sprite, Sprite other, double bounciness);

+

double spriteGetTouchWeight(Sprite sprite);

-

Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новую скорость и позицию для спрайта other (спрайт sprite не меняет своих параметров) и возвращает TRUE. В противном случае возвращает FALSE. См. описание физической модели в разделе «Спрайты».

+

Получить скалярное значение силы (веса) действующей на спрайт со стороны других толкающих его спрайтов. Так как используется упрощённая физическая модель и все массы либо равны либо несоизмеримы, то сила эквивалентна потенциальному ускорению и измеряется в единицах расстояния на секунду в квадрате. Это значение накапливается при вычислении столкновений в функции spriteCollide и сбрасывается в ноль в промежутке между вызовами функции перерисовки кадра. См. также spriteGetTouchWeightX, spriteGetTouchWeightY, spriteResetTouch.

-

Параметры:

+

double spriteGetTouchWeightX(Sprite sprite);

+

double spriteGetTouchWeightY(Sprite sprite);

-

bounciess — показатель энергии столкновения.

+

Получить вектор силы действующей на спрайт со стороны других толкающих его спрайтов. Так как используется упрощённая физическая модель и все массы либо равны либо несоизмеримы, то сила эквивалентна потенциальному ускорению и измеряется в единицах расстояния на секунду в квадрате. Это значение накапливается при вычислении столкновений в функции spriteCollide и сбрасывается в ноль в промежутке между вызовами функции перерисовки кадра. См. также spriteGetTouchWeight, spriteResetTouch.

-

int spriteCollideEx(Sprite a, Sprite b, int keepVelocityA, int keepVelocityB, double bounciness);

+

double spriteGetTouchFriction(Sprite sprite);

-

Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новые скорости и позиции для указанных спрайтов и возвращает TRUE. В противном случае возвращает FALSE. См. описание физической модели в разделе «Спрайты».

+

Получить значение силы трения спрайт о соприкасающиеся с ним спрайты. Возвращаемое значение эквивалентно ускорению и измеряется в единицах расстояния на секунду в квадрате. Это значение накапливается при вычислении столкновений в функции spriteCollide и сбрасывается в ноль в промежутке между вызовами функции перерисовки кадра. См. также spriteGetTouchWeight, spriteResetTouch.

-

Параметры:

+

void spriteResetTouch(Sprite sprite);

-

bounciess — показатель энергии столкновения;
-keepVelocityA — если TRUE то спрайт a не меняет своих параметров и продолжает движение, так будто столкновения не было;
-keepVelocityB — если TRUE то спрайт b не меняет своих параметров и продолжает движение, так будто столкновения не было.

+

Сбросить в ноль накопленные значения веса (spriteGetTouchWeight) и трения (spriteGetTouchFriction) столкновений. Эта функция вызывается автоматически между вызовами функции перерисовки кадра.

double spriteGetBounciness(Sprite sprite);

void spriteSetBounciness(Sprite sprite, double bounciness);

-

Получить (Get) или задать (Set) показатель энергии столкновения для данного спрайта. См. описание физической модели в разделе «Спрайты».

+

Получить (Get) или задать (Set) показатель энергии столкновения (силы отскока) для данного спрайта. См. описание физической модели в разделе «Спрайты».

+ +

double spriteGetBouncinessThreshold(Sprite sprite);

+

void spriteSetBouncinessThreshold(Sprite sprite, double bouncinessThreshold);

+ +

Получить (Get) или задать (Set) порог скорости отскакивания для спрайта. Это значение (среднее арифметическое для двух столкнувшихся спрайтов) будет вычтено из скорости спрайта после отскока. Таким образом столкновение может полностью поглотить энергию взаимного движения и спрайтов. См. описание физической модели в разделе «Спрайты».

+ +

double spriteGetFriction(Sprite sprite);

+

void spriteSetFriction(Sprite sprite, double friction);

+ +

Получить (Get) или задать (Set) порог коэффициент трения для спрайта. См. описание физической модели в разделе «Спрайты».

+ +

double spriteGetAirFriction(Sprite sprite);

+

void spriteSetAirFriction(Sprite sprite, double friction);

+ +

Получить (Get) или задать (Set) порог трения о воздух для спрайта. Определяет скорость замедления спрайта в единицах расстояния на секунду в квадрате. См. описание физической модели в разделе «Спрайты».

+ +

int spriteGetMassLevel(Sprite sprite);

+

void spriteSetMassLevel(Sprite sprite, int massLevel);

+ +

Получить (Get) или задать (Set) уровень массы спрайта. По-умолчанию — 0, может быть как отрицательным так и положительным. Это сравнительная характеристика, то есть не имеет значение насколько уровень одного спрайта превосходит уровень второго, а важен только сам факт превосходства. Больший уровень массы показывает, что спрайт с меньшим уровнем не может сдвинуть с места спрайт с большим уровнем — их масса считается несоизмеримой. См. описание физической модели в разделе «Спрайты».

+ +

double spriteGetColliderSensitiveDistance(Sprite sprite);

+

void spriteSetColliderSensitiveDistance(Sprite sprite, double distance);

+ +

Получить (Get) или задать (Set) порог касания для спрайта. Если спрайты находятся друг другу ближе чем на их суммарный порог касания, но при этом их физические тела не пересекаются, то считается что спрайты касаются друг друга. Это означает, что они создают друг другу силу трения и вес, но при этом не происходит отскакивания — скорости спрайтов не меняются. Значение по-умолчанию 0,001 — обычно этого хватает. Если размер ваших спрайтов меньше 0,01 или больше 1000, то вам нужно будет изменить значение порога касания. См. также описание физической модели в разделе «Спрайты».

void spriteSetCollider(Sprite sprite, Collider type, double xOffset, double yOffset, double rotationOffset);

@@ -338,8 +355,8 @@ int main() {

Параметры:

-

xOffset, yOffset — смещение центра физического тела относительно центра спрайта;
-radius — радиус круга, если меньше 0, то будет использоваться половина от ширины спрайта.

+

xOffset, yOffset — смещение центра физического тела относительно центра спрайта;
+radius — радиус круга, если меньше 0, то будет использоваться половина от ширины спрайта.

void spriteSetColliderRectangle(Sprite sprite, double xOffset, double yOffset, double rotationOffset, double width, double height, double cornersRadius);

@@ -366,69 +383,61 @@ radius — радиус круга, если меньше 0, то будет и height — высота, используется только для прямоугольника, если меньше 0, то будет использоваться высота спрайта;
radius — для круга — его радиус, для прямоугольника — радиус скругления углов.

-

void spriteSetAnimation(Sprite sprite, const char *path);

+

Animation spriteGetAnimation(Sprite sprite);

+

void spriteSetAnimation(Sprite sprite, Animation animation);

-

Задать файл изображения или анимации спрайта. Поддерживаются изображения в формате PNG. Если вместо файла указана папка, то из неё загружаются все файлы PNG в алфавитном порядке — анимация спрайта.

- -

Параметры:

- -

path — путь к файлу PNG или к папке с фалами PNG для анимации.

+

Получить (Get) или задать (Set) анимацию для спрайта. Значение NULL означает отсутствие анимации. См. также раздел «Текстуры и анимация».

void spriteSetNoAnimation(Sprite sprite);

-

Убрать анимацию и изображение со спрайта — спрайт будет рисоваться в виде простого прямоугольника.

- -

void spritePlay(Sprite sprite);

+

Убрать анимацию спрайта — спрайт будет рисоваться в виде простого прямоугольника. Эквивалентно вызову spriteSetAnimation(sprite, NULL).

-

Включить воспроизведение анимации для спрайта. При каждом вызове функции перерисовки окна будет переключаться кадр. Частоту перерисовки окна, а следовательно и частоту кадров для анимации спрайтов, можно задать функцией worldSetFrameRate. См. также spritePause.

+

unsigned int spriteGetShapeColor(Sprite sprite);

+

void spriteSetShapeColor(Sprite sprite, unsigned int colorCode);

-

void spritePause(Sprite sprite);

+

Получить (Get) или задать (Set) цвет прямоугольника спрайта. Применяется только если у спрайте нет анимации (см. spriteSetAnimation). Информацию о работе цветом смотрите в разделе «Рисование».

-

Остановить анимацию спрайта. См. также spritePlay.

+

unsigned int spriteGetTintColor(Sprite sprite);

+

void spriteSetTintColor(Sprite sprite, unsigned int colorCode);

-

void spriteNextFrame(Sprite sprite);

+

Получить (Get) или задать (Set) цвет подкрашивания спрайта. Компоненты указанного цвета умножаются на компоненты цвета изображения (анимации) или базового прямоугольника спрайта. Таким образом вы можете немного менять цвета в спрайте, а также устанавливать общую прозрачность спрайта. Информацию о работе цветом смотрите в разделе «Рисование».

-

Перейти к следующему кадру анимации. Если это был последний кадр, то перейти к первому (точнее к нулевому).

- -

void spriteSetFrame(Sprite sprite, int frame);

+

void spritePointTo(Sprite sprite, double x, double y);

-

Перейти к кадру с заданным номером.

+

Повернуть спрайт по направлению к указанной точке. См. также spriteSetRotation.

Параметры:

-

frame - номер кадра, кадры нумеруются начиная с нуля.

+

x, y — координаты точки.

-

void spriteSetShapeColor(Sprite sprite, const char *color);

+

void spriteMoveBy(Sprite sprite, double dx, double dy);

-

Установить цвет прямоугольника спрайта. Только для спрайтов у которых нет изображения или анимации.

+

Сдвинуть спрайт относительно его текущего положения на заданное расстояние по горизонтали и вертикали. См. также spriteSetXY, spriteMoveToDirection.

Параметры:

-

color — текстовое наименование цвета, см. раздел «Рисование».

+

dx, dy — координаты вектора перемещения.

-

void spriteSetTintColor(Sprite sprite, const char *color);

+

void spriteMoveToDirection(Sprite sprite, double distance, double angle);

-

Установить цвет подкрашивания спрайта. Компоненты указанного цвета умножаются на компоненты цвета изображения (или базового прямоугольника) спрайта. Таким образом вы можете немного менять цвета в спрайте, а также устанавливать общую прозрачность спрайта.

+

Сдвинуть спрайт на заданное расстояние в указанном направлении. См. также spriteMoveBy.

Параметры:

-

color — текстовое наименование цвета, см. раздел «Рисование».

+

distance — растояние;
+angle — угол в градусах указывающий направление перемещения.

-

void spritePointTo(Sprite sprite, double x, double y);

+

void spriteSetDestroy(Sprite sprite, SpriteCallback destroy);

-

Повернуть спрайт по направлению к указанной точке. См. также spriteSetRotation.

+

Установить указатель функцию, которая будет вызвана при удалении спрайта. Это может вам пригодиться когда спрайт удаляется автоматически функцией spriteDestroyTimer или когда к спрайту привязаны пользовательские данные (spriteSetUserData) которые нужно удалить вместе со спрайтом. Ваша функция должна принимать один аргумент типа Sprite и не возвращать значения (void). Чтобы отключить обратный вызов передайте NULL вместо указателя на функцию.

Параметры:

-

x, y — координаты точки.

- -

int mouseIsOver(Sprite sprite);

- -

Функция возвращает TRUE (число 1) если указатель мыши находится над указанным спрайтом, иначе возвращает FALSE (число 0). См. также раздел «Спрайты».

+

destroy — указатель на функцию; функция должна принимать один аргумент типа Sprite и ничего не возвращать (тип возвращаемого значения: void).

-

int mousePressedOver(Sprite sprite);

+

void spriteDraw(Sprite sprite);

-

Функция возвращает TRUE (число 1) если любая кнопка мыши нажата (и удерживается) в то время как указатель мыши находится над указанным спрайтом, иначе возвращает FALSE (число 0). См. также раздел «Спрайты».

+

Нарисовать выбранный спрайт. См. также drawSprites.

int worldGetSpriteCount();

@@ -440,7 +449,7 @@ radius — радиус круга, если меньше 0, то будет и

void drawSprites();

-

Вывести все спрайты на экран.

+

Вывести все спрайты на экран. См. также spriteDraw.