Blame doc/ru/sprites.html

Ivan Mahonin 7a004b
<html>
Ivan Mahonin 7a004b
<head>
Ivan Mahonin 7a004b
<meta charset="UTF-8" />
Ivan Mahonin 7a004b
<link rel="stylesheet" type="text/css" href="style.css" />
Ivan Mahonin 7a004b
<title>Спрайты - Helianthus</title>
Ivan Mahonin 7a004b
</head>
Ivan Mahonin 7a004b
<body>
Ivan Mahonin 7a004b
Ivan Mahonin 77a314
  

Helianthus

Ivan Mahonin 77a314
  
Ivan Mahonin 77a314
  

Helianthus: Документация

Ivan Mahonin 77a314
  

Установка

Ivan Mahonin 7a004b
  

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

Ivan Mahonin 7a004b
  

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

Ivan Mahonin 7a004b
  

Рисование

Ivan Mahonin cece70
  

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

Ivan Mahonin cece70
  

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

Ivan Mahonin cece70
  

Буфер кадра

Ivan Mahonin 7a004b
  

Спрайты

Ivan Mahonin 7a004b
  

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

Ivan Mahonin 7a004b
  

Звук

Ivan Mahonin 7a004b
  
Ivan Mahonin 7a004b
  

Все функции

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Спрайты

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin a32bcc

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Пример:

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
#include <helianthus.h>
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
Sprite mysprite;
Ivan Mahonin cece70
Animation myanimation;
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
void init() {
Ivan Mahonin 7a004b
    // Создать новый спрайт с центром в точке (200, 200)
Ivan Mahonin 7a004b
    mysprite = createSprite(200, 200);
Ivan Mahonin 7a004b
Ivan Mahonin cece70
    // Загрузить файл изображения и назначить его нашему спрайту
Ivan Mahonin cece70
    myanimation = createAnimation("picture.png");
Ivan Mahonin cece70
    spriteSetAnimation(mysprite, myanimation);
Ivan Mahonin 7a004b
}
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
void draw() {
Ivan Mahonin a32bcc
    // Повернуть спрайт на 10 градусов перед рисованием.
Ivan Mahonin a32bcc
    double r = spriteGetRotation(mysprite);
Ivan Mahonin a32bcc
    spriteSetRotation(mysprite, r + 10);
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
    // Вывести все спрайты на экран.
Ivan Mahonin a32bcc
    // Весь один спрайт, в данном случае.
Ivan Mahonin 7a004b
    drawSprites();
Ivan Mahonin 7a004b
}
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
int main() {
Ivan Mahonin 7a004b
    worldSetInit(&init);
Ivan Mahonin 7a004b
    worldSetDraw(&draw);
Ivan Mahonin 7a004b
    worldRun();
Ivan Mahonin 7a004b
    return 0;
Ivan Mahonin 7a004b
}
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Физика и обнаружение столкновений

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin acc470

Подробнее о группах и их функциях смотрите в разделе «Группы спрайтов».

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Функции:

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Sprite createSprite(double x, double y);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Создаёт спрайт с центром в указанной точке. См. также createSpriteEx.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

x, y — координаты центра нового спрайта.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Sprite createSpriteEx(double x, double y, double width, double height);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Создаёт спрайт заданного размера с центром в указанной точке. См. также createSprite.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

x, y — координаты центра нового спрайта;

Ivan Mahonin 7a004b
width — ширина нового спрайта;
Ivan Mahonin 7a004b
height — высота нового спрайта.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

void spriteDestroy(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Удаляет спрайт. Спрайт удаляется также из всех групп в которые он был включён.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

void spriteDestroyTimer(Sprite sprite, double lifetime);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

Sprite spriteClone(Sprite sprite);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin 7a004b

double spriteGetX(Sprite sprite);

Ivan Mahonin 7a004b

double spriteGetY(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetX(Sprite sprite, double x);

Ivan Mahonin 7a004b

void spriteSetY(Sprite sprite, double y);

Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetVelocityX(Sprite sprite);

Ivan Mahonin 7a004b

double spriteGetVelocityY(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetVelocityX(Sprite sprite, double x);

Ivan Mahonin 7a004b

void spriteSetVelocityY(Sprite sprite, double y);

Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

double spriteGetAccelerationX(Sprite sprite);

Ivan Mahonin cece70

void spriteSetAccelerationX(Sprite sprite, double x);

Ivan Mahonin cece70

double spriteGetAccelerationY(Sprite sprite);

Ivan Mahonin cece70

void spriteSetAccelerationY(Sprite sprite, double y);

Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

speed — абсолютное значение скорости;

Ivan Mahonin 7a004b
angle — угол направления движения в градусах. Не путайте, пожалуйста, с отображаемым поворотом спрайта (spriteSetRotation, spriteSetRotateToDirection).

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetSpeed(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Возвращает абсолютное значение скорости спрайта. См. также spriteSetSpeedAndDirection.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetDirection(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Возвращает направление движения в градусах. См. также spriteSetSpeedAndDirection. Не путайте, пожалуйста, с отображаемым поворотом спрайта (spriteGetRotation).

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetWidth(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetWidth(Sprite sprite, double width);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetHeight(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetHeight(Sprite sprite, double height);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin 7a004b

double spriteGetScale(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetScale(Sprite sprite, double scale);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Получить (Get) либо задать (Set) масштабирование спрайта. Вы можете увеличить ли уменьшить весь спрайт и его физическое тело с сохранением всех пропорций. См. также spriteGetScaledWidth, spriteGetScaledHeight.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetScaledWidth(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Возвращает ширину спрайта с учётом масштабирования. См. также spriteSetScale.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetScaledHeight(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Возвращает высоту спрайта с учётом масштабирования. См. также spriteSetScale.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetRotation(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetRotation(Sprite sprite, double rotation);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

int spriteGetRotateToDirection(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetRotateToDirection(Sprite sprite, int rotateToDirection);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Когда rotateToDirection равно TRUE, спрайт будет автоматически поворачиваться в направлении своего движения (вектора скорости). См. также spriteSetSpeedAndDirection, spriteSetRotation.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

int spriteGetMirrorX(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetMirrorX(Sprite sprite, int mirrorX);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Получить (Get) или задать (Set) отражение спрайта по оси X.

Ivan Mahonin 7a004b
Если  mirrorX больше или равно 0, то спрайт рисуется как обычно.
Ivan Mahonin 7a004b
Если  mirrorX меньше нуля то рисуется зеркальное отражение спрайта по горизонтали.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

int spriteGetMirrorY(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetMirrorY(Sprite sprite, int mirrorY);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Получить (Get) или задать (Set) отражение спрайта по оси Y.

Ivan Mahonin 7a004b
Если  mirrorY больше или равно 0, то спрайт рисуется как обычно.
Ivan Mahonin 7a004b
Если  mirrorY меньше нуля то рисуется зеркальное отражение спрайта по вертикали.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetDepth(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetDepth(Sprite sprite, double depth);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

int spriteGetVisible(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetVisible(Sprite sprite, int visible);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

int spriteGetFrozen(Sprite sprite);

Ivan Mahonin cece70

void spriteSetFrozen(Sprite sprite, int frozen);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

int spriteGetUserTag(Sprite sprite);

Ivan Mahonin cece70

void spriteSetUserTag(Sprite sprite, int tag);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

const char* spriteGetUserText(Sprite sprite);

Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

void* spriteGetUserData(Sprite sprite);

Ivan Mahonin cece70

void spriteSetUserData(Sprite sprite, void *data);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

int spriteGetDebug(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetDebug(Sprite sprite, int debug);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

int spriteOverlap(Sprite a, Sprite b);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

int spriteCollide(Sprite a, Sprite b);

Ivan Mahonin 7a004b
Ivan Mahonin acc470

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

double spriteGetTouchWeight(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

double spriteGetTouchWeightX(Sprite sprite);

Ivan Mahonin cece70

double spriteGetTouchWeightY(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

double spriteGetTouchFriction(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

void spriteResetTouch(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

double spriteGetBounciness(Sprite sprite);

Ivan Mahonin 7a004b

void spriteSetBounciness(Sprite sprite, double bounciness);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

double spriteGetBouncinessThreshold(Sprite sprite);

Ivan Mahonin cece70

void spriteSetBouncinessThreshold(Sprite sprite, double bouncinessThreshold);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

double spriteGetFriction(Sprite sprite);

Ivan Mahonin cece70

void spriteSetFriction(Sprite sprite, double friction);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

double spriteGetAirFriction(Sprite sprite);

Ivan Mahonin cece70

void spriteSetAirFriction(Sprite sprite, double friction);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

int spriteGetMassLevel(Sprite sprite);

Ivan Mahonin cece70

void spriteSetMassLevel(Sprite sprite, int massLevel);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

double spriteGetColliderSensitiveDistance(Sprite sprite);

Ivan Mahonin cece70

void spriteSetColliderSensitiveDistance(Sprite sprite, double distance);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Устанавливает параметры физического тела спрайта. Размеры тела определяются размерами самого спрайта. Для круга диаметр равен ширине спрайта.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

type — форма COLLIDER_CIRCLE (круг) или COLLIDER_RECTANGLE (прямоугольник);

Ivan Mahonin 7a004b
xOffset,  yOffset — смещение центра физического тела относительно центра спрайта;
Ivan Mahonin 7a004b
rotationOffset — поворот физического тела относительно спрайта.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

void spriteSetColliderCircle(Sprite sprite, double xOffset, double yOffset, double radius);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin cece70

xOffset, yOffset — смещение центра физического тела относительно центра спрайта;

Ivan Mahonin cece70
radius — радиус круга, если меньше 0, то будет использоваться половина от ширины спрайта.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

xOffset, yOffset — смещение центра физического тела относительно центра спрайта;

Ivan Mahonin 7a004b
rotationOffset — поворот физического тела относительно спрайта;
Ivan Mahonin 7a004b
width — ширина прямоугольника, если меньше 0, то будет использоваться ширина спрайта;
Ivan Mahonin 7a004b
height — высота прямоугольника, если меньше 0, то будет использоваться высота спрайта;
Ivan Mahonin 7a004b
cornersRadius — радиус скругления углов.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

void spriteSetColliderEx(Sprite sprite, Collider type, double xOffset, double yOffset, double rotationOffset, double width, double height, double radius);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Устанавливает полный набор параметров физического тела спрайта.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

type — форма COLLIDER_CIRCLE (круг) или COLLIDER_RECTANGLE (прямоугольник);

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

Animation spriteGetAnimation(Sprite sprite);

Ivan Mahonin cece70

void spriteSetAnimation(Sprite sprite, Animation animation);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

void spriteSetNoAnimation(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

unsigned int spriteGetShapeColor(Sprite sprite);

Ivan Mahonin cece70

void spriteSetShapeColor(Sprite sprite, unsigned int colorCode);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

unsigned int spriteGetTintColor(Sprite sprite);

Ivan Mahonin cece70

void spriteSetTintColor(Sprite sprite, unsigned int colorCode);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin cece70

distance — растояние;

Ivan Mahonin cece70
angle — угол в градусах указывающий направление перемещения.

Ivan Mahonin 7a004b
Ivan Mahonin cece70

void spriteSetDestroy(Sprite sprite, SpriteCallback destroy);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Параметры:

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin cece70

void spriteDraw(Sprite sprite);

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

int worldGetSpriteCount();

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Sprite worldGetSprite(int i);

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

Возвращает спрайт по указанному номеру. См. также worldGetSpriteCount.

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b

void drawSprites();

Ivan Mahonin 7a004b
Ivan Mahonin cece70

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

Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
Ivan Mahonin 7a004b
</body>
Ivan Mahonin 7a004b
</html>