<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<title>Спрайты - Helianthus</title>
</head>
<body>
<div class="navigation">
<p><a href="https://coolbug.org/users/bw/helianthus/ru.html">Helianthus</a></p>
<hr />
<p><a href="index.html">Helianthus: Документация</a></p>
<p><a href="install.html">Установка</a></p>
<p><a href="common.html">Запуск и общие функции</a></p>
<p><a href="input.html">Клавиатура и мышь</a></p>
<p><a href="drawing.html">Рисование</a></p>
<p><a href="font.html">Шрифты и текст</a></p>
<p><a href="animation.html">Текстуры и анимация</a></p>
<p><a href="framebuffer.html">Буфер кадра</a></p>
<p><a href="sprites.html">Спрайты</a></p>
<p><a href="groups.html">Группы спрайтов</a></p>
<p><a href="sound.html">Звук</a></p>
<hr />
<p><a href="functions.html">Все функции</a></p>
</div>
<div class="content">
<h1>Спрайты</h1>
<p>Спрайт — это изображаемый на экране объект, который сохраняет свою позицию и изображения от кадра к кадру. Другими словами для рисования спрайта не нужно каждый раз указывать его координаты, цвет и расположение — он хранит эти параметры внутри себя, их достаточно задать только один раз.</p>
<p>Спрайты будут выводится на экран командой <a href="sprites.html#drawSprites">drawSprites</a>, она рисует на экране сразу все спрайты. Её достаточно вызвать только один раз за кадр.</p>
<p>Спрайт может изображаться в виде прямоугольника выбранного вами цвета (<a href="sprites.html#spriteSetShapeColor">spriteSetShapeColor</a>), либо в виде картинки или анимации из выбранного вами файла (<a href="sprites.html#spriteSetAnimation">spriteSetAnimation</a>).</p>
<p>Положение спрайта задаётся координатами его центра (<a href="sprites.html#spriteSetX">spriteSetX</a>, <a href="sprites.html#spriteSetY">spriteSetY</a>, <a href="sprites.html#spriteSetXY">spriteSetXY</a>), и углом поворота (<a href="sprites.html#spriteSetRotation">spriteSetRotation</a>). Кроме того вы можете задать ширину и высоту спрайта (<a href="sprites.html#spriteSetWidth">spriteSetWidth</a>, <a href="sprites.html#spriteSetHeight">spriteSetHeight</a>, <a href="sprites.html#spriteSetSize">spriteSetSize</a>).</p>
<p>Создать спрайт можно функцией <a href="sprites.html#createSprite">createSprite</a>, которая возвращает значение типа <i>Sprite</i>, которое по сути является адресом в памяти — указателем на описание спрайта внутри библиотеки Helianthus.</p>
<p>Пример:</p>
<pre>
#include <helianthus.h>
Sprite mysprite;
Animation myanimation;
void init() {
// Создать новый спрайт размером 100x100
// с центром в точке (200, 200)
mysprite = createSprite(200, 200, 100, 100);
// Загрузить файл изображения и назначить его нашему спрайту
myanimation = createAnimation("picture.png");
spriteSetAnimation(mysprite, myanimation);
}
void draw() {
// Повернуть спрайт на 10 градусов перед рисованием.
double r = spriteGetRotation(mysprite);
spriteSetRotation(mysprite, r + 10);
// Вывести все спрайты на экран.
// Весь один спрайт, в данном случае.
drawSprites();
}
int main() {
windowSetInit(&init);
windowSetDraw(&draw);
windowRun();
return 0;
}
</pre>
<h2>Физика и обнаружение столкновений</h2>
<p>Спрайты в библиотеке Helianthus имеют физическую модель. Они могут обладать скоростью и отталкиваться друг от друга.</p>
<p>Изначально физическое представление спрайта это прямоугольник соответствующий видимой форме спрайта. Но это может быть изменено, например, вы можете представить спрайт для физической модели в виде круга, при этом видимое изображение останется прежним (<a href="sprites.html#spriteSetCollider">spriteSetCollider</a>).</p>
<p>Физическое тело спрайта позволяет вам определять находится ли какая-либо точка внутри спрайта, см. функцию <a href="sprites.html#spriteIsPointInside">spriteIsPointInside</a>.</p>
<p>Помимо описания формы и размеров физического тела спрайта вам, скорее всего, понадобится задать и его скорость и ускорение (<a href="sprites.html#spriteSetVelocityXY">spriteSetVelocityXY</a>, <a href="sprites.html#spriteSetAccelerationXY">spriteSetAccelerationXY</a>).</p>
<p>Также вы можете задать уровень массы спрайта. Спрайты имеют упрощённую физическую модель и считается что масса всех спрайтов с одинаковым уровнем массы одинакова. Однако, если уровень массы спрайтов отличается, то считается что масса объекта с большим уровнем настолько велика, что другой спрайт не может повлиять на скорость и направление движение первого. То есть для спрайта с меньшим уровнем массы, другой спрайт представляет из себя стену, он может оттолкнуться от неё, но сдвинуть не может.</p>
<p>Таким образом физическая модель либо рассчитывает столкновения двух спрайтов считая их массы равными и они на равных воздействуют друг на друга. Либо считает их массы считаются несоизмеримыми и спрайт с меньшим уровнем просто отталкивается от спрайта с большим уровнем ни как не влияя на его скорость. Всего два варианта, вот такая упрощенная модель.</p>
<p>Для обнаружения столкновений между двумя спрайтами и расчёта их скоростей и позиций после столкновения необходимо запустить функцию <a href="sprites.html#spriteCollide">spriteCollide</a>. Если вы хотите всего лишь определить касаются спрайты друг друга или нет, то вам достаточно вызвать функцию <a href="sprites.html#spriteOverlap">spriteOverlap</a>.</p>
<p>Также вы можете задать коэффициент трения спрайта (<a href="sprites.html#spriteSetFriction">spriteSetFriction</a>), он будет использоваться когда один спрайт скользит по другому. Трение будет приводить к замедлению движения. По-умолчанию трения нет.</p>
<p>Функция <a href="sprites.html#spriteSetAirFriction">spriteSetAirFriction</a> задаёт силу трения о воздух (по умолчанию 0).</p>
<p>Физическая модель спрайта также имеет параметр <i>отскок</i> или <i>bounciness</i> (<a href="sprites.html#spriteSetBounciness">spriteSetBounciness</a>), который показывает насколько сильно спрайты отскакивают друг от друга при столкновении. Если <i>bounciness</i> равен единице (значение по-умолчанию), то спрайты отталкиваются без потерь кинетической энергии, но и без её увеличения. Если <i>bounciness</i> меньше одного, то спрайты при столкновении теряют энергию и замедляются. Если <i>bounciness</i> больше одного, то спрайты отлетают друг от друга с увеличенными скоростями (как отталкивающие стержни в пинболе). Так как в столкновении участвуют два спрайта и у каждого из них своё значение <i>bounciness</i>, эти величины перемножаются при вычислении окончательной силы отскока.</p>
<p>Вы можете задать ещё и порог скорости отскакивания для спрайта - <a href="sprites.html#spriteSetBouncinessThreshold">spriteSetBouncinessThreshold</a>. Это значение будет вычтено из скорости спрайта после отскока, если точнее то будет применено среднее значение порога для двух столкнувшихся спрайтов. Таким образом столкновение может полностью поглотить энергию взаимного движения и спрайтов и они продолжат движение вместе с одинаковой скоростью в одном направлении или вовсе остановятся.</p>
<p>После расчёта столкновений вы можете узнать вектор веса действующего на спрайт и действующую силу трения (<a href="sprites.html#spriteGetTouchWeight">spriteGetTouchWeight</a>, <a href="sprites.html#spriteGetTouchWeightX">spriteGetTouchWeightX</a>, <a href="sprites.html#spriteGetTouchWeightY">spriteGetTouchWeightY</a>, <a href="sprites.html#spriteGetTouchFriction">spriteGetTouchFriction</a>). Эти параметры будут сброшены в нулевые значения автоматически в промежутке между вызовами функции перерисовки кадра. Вы можете сбросить их вручную функцией <a href="sprites.html#spriteResetTouch">spriteResetTouch</a>. Расчёт этих параметров зависит от порога касания спрайтов — это тонкая настройка физической модели и обычно вам не требуется её менять (см. функцию <a href="sprites.html#spriteSetColliderSensitiveDistance">spriteSetColliderSensitiveDistance</a>).</p>
<p>Однако, работы всего лишь с двумя спрайтами мало для полноценной физической модели. В помощь вам Helianthus предлагает группы спрайтов. Поместив свои спрайты в различные группы (или в одну группу) вы можете одной командой вызвать расчёт столкновений между всеми спрайтами в группе или между спрайтами одной группы со спрайтами другой группы или между группой и одиночным спрайтом.</p>
<p>Также функция <a href="groups.html#createEdgesGroup">createEdgesGroup</a> поможет вам создать группу спрайтов обозначающую границы экрана, чтобы ваши объекты отталкивались от краёв экрана.</p>
<p>Подробнее о группах и их функциях смотрите в разделе <a href="groups.html" />«Группы спрайтов»</a>.</p>
<h2>Функции:</h2>
<h3 id="createSprite">Sprite createSprite(double x, double y, double width, double height);</h3>
<p>Создаёт спрайт заданного размера с центром в указанной точке. См. также <a href="sprites.html#createSpriteEx">createSpriteEx</a>.</p>
<h4>Параметры:</h4>
<p><i>x</i>, <i>y</i> — координаты центра нового спрайта;<br />
<i>width</i> — ширина нового спрайта;<br />
<i>height</i> — высота нового спрайта.</p>
<h3 id="createSpriteEx">Sprite createSpriteEx(double x, double y, double width, double height, Animation animation);</h3>
<p>Создаёт спрайт заданного размера с центром в указанной точке с указанием анимации (текстуры). См. также <a href="sprites.html#createSprite">createSprite</a>, <a href="sprites.html#spriteSetAnimation">spriteSetAnimation</a>, <a href="animation.html#createAnimation">createAnimation</a>.</p>
<h4>Параметры:</h4>
<p><i>x</i>, <i>y</i> — координаты центра нового спрайта;<br />
<i>width</i> — ширина нового спрайта;<br />
<i>height</i> — высота нового спрайта;<br />
<i>animation</i> — анимация для нового спрайта.</p>
<h3 id="spriteDestroy">void spriteDestroy(Sprite sprite);</h3>
<p>Удаляет спрайт. Спрайт удаляется также из всех групп в которые он был включён.</p>
<p>Если же вы просто хотите спрятать спрайт не удаляя его, чтобы он просто больше не отображался на экране, то обратите внимание на функцию <a href="sprites.html#spriteSetVisible">spriteSetVisible</a>.</p>
<p><b>Важно:</b> Скорее всего у вас в программе останется переменная в которой хранился указатель на спрайт. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на спрайт, спрайт удалён. Вы можете занести в эту переменную другой спрайт, но использовать старое значение переменной больше нельзя это приведёт у ошибкам и непредсказуемому поведению программы.</p>
<h3 id="spriteDestroyTimer">void spriteDestroyTimer(Sprite sprite, double lifetime);</h3>
<p>Задаёт таймер для удаления спрайта через определённое время. Рекомендуется больше не обращаться к этому спрайту из вашей программы и не хранить указатель на него. Так как неизвестно существует ли спрайт ещё или уже сработал таймер удаления. Смотрите также функцию <a href="sprites.html#spriteDestroy">spriteDestroy</a> и примечание к ней.</p>
<h4>Параметры:</h4>
<p><i>lifetime</i> — время в секундах по истечении которого спрайт должен быть удалён. Если 0 или меньше, то спрайт будет удалён немедленно. Если больше 0, то спрайт будет в один из промежутков между вызовами функции перерисовки кадра.</p>
<h3 id="spriteClone">Sprite spriteClone(Sprite sprite);</h3>
<p>Создать точную копию спрайта.</p>
<h3 id="spriteGetX">double spriteGetX(Sprite sprite);</h3>
<h3 id="spriteGetY">double spriteGetY(Sprite sprite);</h3>
<h3 id="spriteSetX">void spriteSetX(Sprite sprite, double x);</h3>
<h3 id="spriteSetY">void spriteSetY(Sprite sprite, double y);</h3>
<h3 id="spriteSetXY">void spriteSetXY(Sprite sprite, double x, double y);</h3>
<p>Получить (Get) либо задать (Set) координаты центра спрайта.</p>
<h3 id="spriteGetVelocityX">double spriteGetVelocityX(Sprite sprite);</h3>
<h3 id="spriteGetVelocityY">double spriteGetVelocityY(Sprite sprite);</h3>
<h3 id="spriteSetVelocityX">void spriteSetVelocityX(Sprite sprite, double x);</h3>
<h3 id="spriteSetVelocityY">void spriteSetVelocityY(Sprite sprite, double y);</h3>
<h3 id="spriteSetVelocityXY">void spriteSetVelocityXY(Sprite sprite, double x, double y);</h3>
<p>Получить (Get) либо задать (Set) координаты вектора скорости спрайта. См. также <a href="sprites.html#spriteSetSpeedAndDirection">spriteSetSpeedAndDirection</a>.</p>
<h3 id="spriteGetAccelerationX">double spriteGetAccelerationX(Sprite sprite);</h3>
<h3 id="spriteSetAccelerationX">void spriteSetAccelerationX(Sprite sprite, double x);</h3>
<h3 id="spriteGetAccelerationY">double spriteGetAccelerationY(Sprite sprite);</h3>
<h3 id="spriteSetAccelerationY">void spriteSetAccelerationY(Sprite sprite, double y);</h3>
<h3 id="spriteSetAccelerationXY">void spriteSetAccelerationXY(Sprite sprite, double x, double y);</h3>
<p>Получить (Get) либо задать (Set) координаты вектора ускорения спрайта.</p>
<h3 id="spriteSetSpeedAndDirection">void spriteSetSpeedAndDirection(Sprite sprite, double speed, double angle);</h3>
<p>Задать скорость спрайта через угол направления и абсолютное значение скорости. Если вы не понимаете смысла слов <i>«абсолютное значение»</i>, то в здесь подразумевается обычное бытовое значение смысла слова скорость. В данном случае она измеряется в пикселях в секунду.</p>
<h4>Параметры:</h4>
<p><i>speed</i> — абсолютное значение скорости;<br />
<i>angle</i> — угол направления <i>движения</i> в градусах. Не путайте, пожалуйста, с отображаемым поворотом спрайта (<a href="sprites.html#spriteSetRotation">spriteSetRotation</a>, <a href="sprites.html#spriteSetRotateToDirection">spriteSetRotateToDirection</a>).</p>
<h3 id="spriteGetSpeed">double spriteGetSpeed(Sprite sprite);</h3>
<p>Возвращает абсолютное значение скорости спрайта. См. также <a href="sprites.html#spriteSetSpeedAndDirection">spriteSetSpeedAndDirection</a>.</p>
<h3 id="spriteGetDirection">double spriteGetDirection(Sprite sprite);</h3>
<p>Возвращает направление <i>движения</i> в градусах. См. также <a href="sprites.html#spriteSetSpeedAndDirection">spriteSetSpeedAndDirection</a>. Не путайте, пожалуйста, с отображаемым поворотом спрайта (<a href="sprites.html#spriteGetRotation">spriteGetRotation</a>).</p>
<h3 id="spriteGetWidth">double spriteGetWidth(Sprite sprite);</h3>
<h3 id="spriteSetWidth">void spriteSetWidth(Sprite sprite, double width);</h3>
<p>Получить (Get) либо задать (Set) ширину спрайта.</p>
<h3 id="spriteGetHeight">double spriteGetHeight(Sprite sprite);</h3>
<h3 id="spriteSetHeight">void spriteSetHeight(Sprite sprite, double height);</h3>
<p>Получить (Get) либо задать (Set) высоту спрайта.</p>
<h3 id="spriteSetSize">void spriteSetSize(Sprite sprite, double width, double height);</h3>
<p>Задать ширину и высоту спрайта одной командой.</p>
<h3 id="spriteGetScale">double spriteGetScale(Sprite sprite);</h3>
<h3 id="spriteSetScale">void spriteSetScale(Sprite sprite, double scale);</h3>
<p>Получить (Get) либо задать (Set) масштабирование спрайта. Вы можете увеличить ли уменьшить весь спрайт и его физическое тело с сохранением всех пропорций. См. также <a href="sprites.html#spriteGetScaledWidth">spriteGetScaledWidth</a>, <a href="sprites.html#spriteGetScaledHeight">spriteGetScaledHeight</a>.</p>
<h3 id="spriteGetScaledWidth">double spriteGetScaledWidth(Sprite sprite);</h3>
<p>Возвращает ширину спрайта с учётом масштабирования. См. также <a href="sprites.html#spriteSetScale">spriteSetScale</a>.</p>
<h3 id="spriteGetScaledHeight">double spriteGetScaledHeight(Sprite sprite);</h3>
<p>Возвращает высоту спрайта с учётом масштабирования. См. также <a href="sprites.html#spriteSetScale">spriteSetScale</a>.</p>
<h3 id="spriteGetRotation">double spriteGetRotation(Sprite sprite);</h3>
<h3 id="spriteSetRotation">void spriteSetRotation(Sprite sprite, double rotation);</h3>
<p>Получить (Get) или задать (Set) поворот спрайта. Не путайте, пожалуйста, с направлением движения спрайта. См. также <a href="sprites.html#spriteSetSpeedAndDirection">spriteSetSpeedAndDirection</a>, <a href="sprites.html#spriteSetRotateToDirection">spriteSetRotateToDirection</a>, <a href="sprites.html#spritePointTo">spritePointTo</a>.</p>
<h3 id="spriteGetRotateToDirection">int spriteGetRotateToDirection(Sprite sprite);</h3>
<h3 id="spriteSetRotateToDirection">void spriteSetRotateToDirection(Sprite sprite, int rotateToDirection);</h3>
<p>Получить (Get) или задать (Set) автоматический поворот спрайта вдоль направления движения. <i>rotateToDirection</i> может принимать значение <i>TRUE</i> (число 1) или <i>FALSE</i> (число 0).</p>
<p>Когда <i>rotateToDirection</i> равно <i>TRUE</i>, спрайт будет автоматически поворачиваться в направлении своего движения (вектора скорости). См. также <a href="sprites.html#spriteSetSpeedAndDirection">spriteSetSpeedAndDirection</a>, <a href="sprites.html#spriteSetRotation">spriteSetRotation</a>.</p>
<h3 id="spriteGetMirrorX">int spriteGetMirrorX(Sprite sprite);</h3>
<h3 id="spriteSetMirrorX">void spriteSetMirrorX(Sprite sprite, int mirrorX);</h3>
<p>Получить (Get) или задать (Set) отражение спрайта по оси X.<br />
Если <i>mirrorX</i> больше или равно 0, то спрайт рисуется как обычно.<br />
Если <i>mirrorX</i> меньше нуля то рисуется зеркальное отражение спрайта по горизонтали.</p>
<h3 id="spriteGetMirrorY">int spriteGetMirrorY(Sprite sprite);</h3>
<h3 id="spriteSetMirrorY">void spriteSetMirrorY(Sprite sprite, int mirrorY);</h3>
<p>Получить (Get) или задать (Set) отражение спрайта по оси Y.<br />
Если <i>mirror</i><i>Y</i> больше или равно 0, то спрайт рисуется как обычно.<br />
Если <i>mirror</i><i>Y</i> меньше нуля то рисуется зеркальное отражение спрайта по вертикали.</p>
<h3 id="spriteGetDepth">double spriteGetDepth(Sprite sprite);</h3>
<h3 id="spriteSetDepth">void spriteSetDepth(Sprite sprite, double depth);</h3>
<p>Получить (Get) или задать (Set) показатель глубины спрайта. На переднем плане рисуются спрайты с наименьшим значением глубины, на заднем — с наибольшим. Таким образом задавая глубину спрайтов вы определяете порядок их отрисовки.</p>
<h3 id="spriteGetVisible">int spriteGetVisible(Sprite sprite);</h3>
<h3 id="spriteSetVisible">void spriteSetVisible(Sprite sprite, int visible);</h3>
<p>Получить (Get) или задать (Set) видимость спрайта. Может принимать значение <i>TRUE</i> (число 1) — спрайт видно, или <i>FALSE</i> (число 0) — спрайт спрятан.</p>
<h3 id="spriteGetFrozen">int spriteGetFrozen(Sprite sprite);</h3>
<h3 id="spriteSetFrozen">void spriteSetFrozen(Sprite sprite, int frozen);</h3>
<p>Получить (Get) или задать (Set) «замороженность» спрайта. Может принимать значение <i>TRUE</i> (число 1) — спрайт заморожен, или <i>FALSE</i> (число 0) — спрайт в обычном состоянии.</p>
<p>Замороженный спрайт не двигается автоматически, к нему не будет автоматически применяться скорость и ускорение, как это делается для обычных спрайтов.</p>
<h3 id="spriteGetUserTag">int spriteGetUserTag(Sprite sprite);</h3>
<h3 id="spriteSetUserTag">void spriteSetUserTag(Sprite sprite, int tag);</h3>
<p>Получить (Get) или задать (Set) числовую метку спрайта. Этот параметр не используется внутри спрайта — заносите сюда любое число которое хотите связать с данным спрайтом.</p>
<h3 id="spriteGetUserText">const char* spriteGetUserText(Sprite sprite);</h3>
<h3 id="spriteSetUserText">void spriteSetUserText(Sprite sprite, const char *text);</h3>
<p>Получить (Get) или задать (Set) текстовую метку спрайта. Этот параметр не используется внутри спрайта — заносите сюда любой текст которые хотите связать с данным спрайтом. Спрайт создаёт и хранит внутри себя копию данного текста.</p>
<h3 id="spriteGetUserData">void* spriteGetUserData(Sprite sprite);</h3>
<h3 id="spriteSetUserData">void spriteSetUserData(Sprite sprite, void *data);</h3>
<p>Получить (Get) или задать (Set) пользовательские данные спрайта. Этот параметр не используется внутри спрайта — заносите сюда указатель на любые данные, которые хотите связать с данным спрайтом. Спрайт хранит в себе только указатель на данные, сами данные не копирует.</p>
<h3 id="spriteGetDebug">int spriteGetDebug(Sprite sprite);</h3>
<h3 id="spriteSetDebug">void spriteSetDebug(Sprite sprite, int debug);</h3>
<p>Получить (Get) или задать (Set) отображение отладочной информации для данного спрайта. Может принимать значение <i>TRUE</i> (число 1) — включено, или <i>FALSE</i> (число 0) — выключено.</p>
<p>Когда включено, для данного спрайта рисуется его рамка, центр и значение глубины, даже если спрайт невидим.</p>
<p>Если в вашей программе что-то пошло не так, включите эту опцию для ваших спрайтов, возможно вы увидите причину ошибки.</p>
<h3 id="spriteOverlap">int spriteOverlap(Sprite a, Sprite b);</h3>
<p>Возвращает <i>TRUE</i> если спрайты касаются или накладываются друг на друга. В противном случае возвращает <i>FALSE</i>.</p>
<h3 id="spriteCollide">int spriteCollide(Sprite a, Sprite b);</h3>
<p>Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новые скорости и позиции для указанных спрайтов и возвращает <i>TRUE</i>. В противном случае возвращает <i>FALSE</i>. См. описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>
<h3 id="spriteIsPointInside">int spriteIsPointInside(Sprite sprite, double x, double y);</h3>
<p>Проверить попадает ли указанная точка в физическое тело спрайта. Функция возвращает <i>TRUE</i> если попадает и <i>FALSE</i> если нет.</p>
<h4>Параметры:</h4>
<p><i>x</i>, <i>y</i> — координаты точки.</p>
<h3 id="spriteGetTouchWeight">double spriteGetTouchWeight(Sprite sprite);</h3>
<p>Получить скалярное значение силы (веса) действующей на спрайт со стороны других толкающих его спрайтов. Так как используется упрощённая физическая модель и все массы либо равны либо несоизмеримы, то сила эквивалентна потенциальному ускорению и измеряется в единицах расстояния на секунду в квадрате. Это значение накапливается при вычислении столкновений в функции <a href="sprites.html#spriteCollide">spriteCollide</a> и сбрасывается в ноль в промежутке между вызовами функции перерисовки кадра. См. также <a href="sprites.html#spriteGetTouchWeightX">spriteGetTouchWeightX</a>, <a href="sprites.html#spriteGetTouchWeightY">spriteGetTouchWeightY</a>, <a href="sprites.html#spriteResetTouch">spriteResetTouch</a>.</p>
<h3 id="spriteGetTouchWeightX">double spriteGetTouchWeightX(Sprite sprite);</h3>
<h3 id="spriteGetTouchWeightY">double spriteGetTouchWeightY(Sprite sprite);</h3>
<p>Получить вектор силы действующей на спрайт со стороны других толкающих его спрайтов. Так как используется упрощённая физическая модель и все массы либо равны либо несоизмеримы, то сила эквивалентна потенциальному ускорению и измеряется в единицах расстояния на секунду в квадрате. Это значение накапливается при вычислении столкновений в функции <a href="sprites.html#spriteCollide">spriteCollide</a> и сбрасывается в ноль в промежутке между вызовами функции перерисовки кадра. См. также <a href="sprites.html#spriteGetTouchWeight">spriteGetTouchWeight</a>, <a href="sprites.html#spriteResetTouch">spriteResetTouch</a>.</p>
<h3 id="spriteGetTouchFriction">double spriteGetTouchFriction(Sprite sprite);</h3>
<p>Получить значение силы трения спрайт о соприкасающиеся с ним спрайты. Возвращаемое значение эквивалентно ускорению и измеряется в единицах расстояния на секунду в квадрате. Это значение накапливается при вычислении столкновений в функции <a href="sprites.html#spriteCollide">spriteCollide</a> и сбрасывается в ноль в промежутке между вызовами функции перерисовки кадра. См. также <a href="sprites.html#spriteGetTouchWeight">spriteGetTouchWeight</a>, <a href="sprites.html#spriteResetTouch">spriteResetTouch</a>.</p>
<h3 id="spriteResetTouch">void spriteResetTouch(Sprite sprite);</h3>
<p>Сбросить в ноль накопленные значения веса (<a href="sprites.html#spriteGetTouchWeight">spriteGetTouchWeight</a>) и трения (<a href="sprites.html#spriteGetTouchFriction">spriteGetTouchFriction</a>) столкновений. Эта функция вызывается автоматически между вызовами функции перерисовки кадра.</p>
<h3 id="spriteGetBounciness">double spriteGetBounciness(Sprite sprite);</h3>
<h3 id="spriteSetBounciness">void spriteSetBounciness(Sprite sprite, double bounciness);</h3>
<p>Получить (Get) или задать (Set) показатель энергии столкновения (силы отскока) для данного спрайта. См. описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>
<h3 id="spriteGetBouncinessThreshold">double spriteGetBouncinessThreshold(Sprite sprite);</h3>
<h3 id="spriteSetBouncinessThreshold">void spriteSetBouncinessThreshold(Sprite sprite, double bouncinessThreshold);</h3>
<p>Получить (Get) или задать (Set) порог скорости отскакивания для спрайта. Это значение (среднее арифметическое для двух столкнувшихся спрайтов) будет вычтено из скорости спрайта после отскока. Таким образом столкновение может полностью поглотить энергию взаимного движения и спрайтов. См. описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>
<h3 id="spriteGetFriction">double spriteGetFriction(Sprite sprite);</h3>
<h3 id="spriteSetFriction">void spriteSetFriction(Sprite sprite, double friction);</h3>
<p>Получить (Get) или задать (Set) порог коэффициент трения для спрайта. См. описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>
<h3 id="spriteGetAirFriction">double spriteGetAirFriction(Sprite sprite);</h3>
<h3 id="spriteSetAirFriction">void spriteSetAirFriction(Sprite sprite, double friction);</h3>
<p>Получить (Get) или задать (Set) порог трения о воздух для спрайта. Определяет скорость замедления спрайта в единицах расстояния на секунду в квадрате. См. описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>
<h3 id="spriteGetMassLevel">int spriteGetMassLevel(Sprite sprite);</h3>
<h3 id="spriteSetMassLevel">void spriteSetMassLevel(Sprite sprite, int massLevel);</h3>
<p>Получить (Get) или задать (Set) уровень массы спрайта. По-умолчанию — 0, может быть как отрицательным так и положительным. Это сравнительная характеристика, то есть не имеет значение насколько уровень одного спрайта превосходит уровень второго, а важен только сам факт превосходства. Больший уровень массы показывает, что спрайт с меньшим уровнем не может сдвинуть с места спрайт с большим уровнем — их масса считается несоизмеримой. См. описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>
<h3 id="spriteGetColliderSensitiveDistance">double spriteGetColliderSensitiveDistance(Sprite sprite);</h3>
<h3 id="spriteSetColliderSensitiveDistance">void spriteSetColliderSensitiveDistance(Sprite sprite, double distance);</h3>
<p>Получить (Get) или задать (Set) порог касания для спрайта. Если спрайты находятся друг другу ближе чем на их суммарный порог касания, но при этом их физические тела не пересекаются, то считается что спрайты <i>касаются</i> друг друга. Это означает, что они создают друг другу силу трения и вес, но при этом не происходит отскакивания — скорости спрайтов не меняются. Значение по-умолчанию 0,001 — обычно этого хватает. Если размер ваших спрайтов меньше 0,01 или больше 1000, то вам нужно будет изменить значение порога касания. См. также описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>
<h3 id="spriteSetCollider">void spriteSetCollider(Sprite sprite, Collider type, double xOffset, double yOffset, double rotationOffset);</h3>
<p>Устанавливает параметры физического тела спрайта. Размеры тела определяются размерами самого спрайта. Для круга диаметр равен ширине спрайта.</p>
<h4>Параметры:</h4>
<p><i>type</i> — форма <i>COLLIDER_CIRCLE</i> (круг) или <i>COLLIDER_RECTANGLE</i> (прямоугольник);<br />
<i>xOffset</i>, <i>yOffset</i> — смещение центра физического тела относительно центра спрайта;<br />
<i>rotationOffset</i> — поворот физического тела относительно спрайта.</p>
<h3 id="spriteSetColliderCircle">void spriteSetColliderCircle(Sprite sprite, double xOffset, double yOffset, double radius);</h3>
<p>Задать физическое тела спрайта в виде круга.</p>
<h4>Параметры:</h4>
<p><i>xOffset</i>, <i>yOffset</i> — смещение центра физического тела относительно центра спрайта;<br />
<i>radius</i> — радиус круга, если меньше 0, то будет использоваться половина от ширины спрайта.</p>
<h3 id="spriteSetColliderRectangle">void spriteSetColliderRectangle(Sprite sprite, double xOffset, double yOffset, double rotationOffset, double width, double height, double cornersRadius);</h3>
<p>Задать физическое тела спрайта в виде прямоугольника. Прямоугольник может быть со скруглёнными углами.</p>
<h4>Параметры:</h4>
<p><i>xOffset</i>, <i>yOffset</i> — смещение центра физического тела относительно центра спрайта;<br />
<i>rotationOffset</i> — поворот физического тела относительно спрайта;<br />
<i>width</i> — ширина прямоугольника, если меньше 0, то будет использоваться ширина спрайта;<br />
<i>height</i> — высота прямоугольника, если меньше 0, то будет использоваться высота спрайта;<br />
<i>cornersRadius</i> — радиус скругления углов.</p>
<h3 id="spriteSetColliderEx">void spriteSetColliderEx(Sprite sprite, Collider type, double xOffset, double yOffset, double rotationOffset, double width, double height, double radius);</h3>
<p>Устанавливает полный набор параметров физического тела спрайта.</p>
<h4>Параметры:</h4>
<p><i>type</i> — форма <i>COLLIDER_CIRCLE</i> (круг) или <i>COLLIDER_RECTANGLE</i> (прямоугольник);<br />
<i>xOffset</i>, <i>yOffset</i> — смещение центра физического тела относительно центра спрайта;<br />
<i>rotationOffset</i> — поворот физического тела относительно спрайта;<br />
<i>width</i> — ширина, используется только для прямоугольника, если меньше 0, то будет использоваться ширина спрайта;<br />
<i>height</i> — высота, используется только для прямоугольника, если меньше 0, то будет использоваться высота спрайта;<br />
<i>r</i><i>adius</i> — для круга — его радиус, для прямоугольника — радиус скругления углов.</p>
<h3 id="spriteGetAnimation">Animation spriteGetAnimation(Sprite sprite);</h3>
<h3 id="spriteSetAnimation">void spriteSetAnimation(Sprite sprite, Animation animation);</h3>
<p>Получить (Get) или задать (Set) анимацию для спрайта. Значение <i>NULL</i> означает отсутствие анимации. См. также раздел <a href="animation.html" />«Текстуры и анимация»</a>.</p>
<h3 id="spriteSetNoAnimation">void spriteSetNoAnimation(Sprite sprite);</h3>
<p>Убрать анимацию спрайта — спрайт будет рисоваться в виде простого прямоугольника. Эквивалентно вызову <a href="sprites.html#spriteSetAnimation">spriteSetAnimation</a>(<i>sprite</i>, <i>NULL</i>).</p>
<h3 id="spriteGetShapeColor">unsigned int spriteGetShapeColor(Sprite sprite);</h3>
<h3 id="spriteSetShapeColor">void spriteSetShapeColor(Sprite sprite, unsigned int colorCode);</h3>
<p>Получить (Get) или задать (Set) цвет прямоугольника спрайта. Применяется только если у спрайте нет анимации (см. <a href="sprites.html#spriteSetAnimation">spriteSetAnimation</a>). Информацию о работе цветом смотрите в разделе <a href="drawing.html" />«Рисование»</a>.</p>
<h3 id="spriteGetTintColor">unsigned int spriteGetTintColor(Sprite sprite);</h3>
<h3 id="spriteSetTintColor">void spriteSetTintColor(Sprite sprite, unsigned int colorCode);</h3>
<p>Получить (Get) или задать (Set) цвет подкрашивания спрайта. Компоненты указанного цвета умножаются на компоненты цвета изображения (анимации) или базового прямоугольника спрайта. Таким образом вы можете немного менять цвета в спрайте, а также устанавливать общую прозрачность спрайта. Информацию о работе цветом смотрите в разделе <a href="drawing.html" />«Рисование»</a>.</p>
<h3 id="spritePointTo">void spritePointTo(Sprite sprite, double x, double y);</h3>
<p>Повернуть спрайт по направлению к указанной точке. См. также <a href="sprites.html#spriteSetRotation">spriteSetRotation</a>.</p>
<h4>Параметры:</h4>
<p><i>x</i>, <i>y</i> — координаты точки.</p>
<h3 id="spriteMoveBy">void spriteMoveBy(Sprite sprite, double dx, double dy);</h3>
<p>Сдвинуть спрайт относительно его текущего положения на заданное расстояние по горизонтали и вертикали. См. также <a href="sprites.html#spriteSetXY">spriteSetXY</a>, <a href="sprites.html#spriteMoveToDirection">spriteMoveToDirection</a>.</p>
<h4>Параметры:</h4>
<p><i>dx</i>, <i>dy</i> — координаты вектора перемещения.</p>
<h3 id="spriteMoveToDirection">void spriteMoveToDirection(Sprite sprite, double distance, double angle);</h3>
<p>Сдвинуть спрайт на заданное расстояние в указанном направлении. См. также <a href="sprites.html#spriteMoveBy">spriteMoveBy</a>.</p>
<h4>Параметры:</h4>
<p><i>distance</i> — растояние;<br />
<i>angle</i> — угол в градусах указывающий направление перемещения.</p>
<h3 id="spriteSetDestroy">void spriteSetDestroy(Sprite sprite, SpriteCallback destroy);</h3>
<p>Установить указатель функцию, которая будет вызвана при удалении спрайта. Это может вам пригодиться когда спрайт удаляется автоматически функцией <a href="sprites.html#spriteDestroyTimer">spriteDestroyTimer</a> или когда к спрайту привязаны пользовательские данные (<a href="sprites.html#spriteSetUserData">spriteSetUserData</a>) которые нужно удалить вместе со спрайтом. Ваша функция должна принимать один аргумент типа <i>Sprite</i> и не возвращать значения (<i>void</i>). Чтобы отключить обратный вызов передайте <i>NULL</i> вместо указателя на функцию.</p>
<h4>Параметры:</h4>
<p><i>destroy</i> — указатель на функцию; функция должна принимать один аргумент типа <i>Sprite</i> и ничего не возвращать (тип возвращаемого значения: <i>void</i>).</p>
<h3 id="spriteDraw">void spriteDraw(Sprite sprite);</h3>
<p>Нарисовать выбранный спрайт. См. также <a href="sprites.html#drawSprites">drawSprites</a>.</p>
<h3 id="spriteUpdate">int spriteUpdate(Sprite sprite, double time);</h3>
<p>Рассчитать положение, скорость и ускорение спрайта за указанный отрезок времени. Обычно эта функция вызывается автоматически между вызовами функции перерисовки кадра. Однако вы можете «заморозить» выбранные спрайты функцией <a href="sprites.html#spriteSetFrozen">spriteSetFrozen</a> для того чтобы они не пересчитывались автоматически, но могли быть рассчитаны вручную с помощью данной функции. Кроме прочего эта функция обновляет таймер удаления спрайта (см. <i>spriteSetDestroyTimer</i>) и поэтому может удалить спрайт. Функция возвращает <i>FALSE</i> если спрайт был удалён, и <i>TRUE</i> если спрайт продолжает существовать.</p>
<h4>Параметры:</h4>
<p><i>time</i> — длительность отрезка времени для перерасчёта.</p>
<h3 id="spritesGetCount">int spritesGetCount();</h3>
<p>Возвращает количество спрайтов существующих в программе в данный момент. См. также <a href="sprites.html#spritesGet">spritesGet</a>.</p>
<h3 id="spritesGet">Sprite spritesGet(int i);</h3>
<p>Возвращает спрайт по указанному номеру. См. также <a href="sprites.html#spritesGetCount">spritesGetCount</a>.</p>
<h3 id="drawSprites">void drawSprites();</h3>
<p>Вывести все спрайты на экран. См. также <a href="sprites.html#spriteDraw">spriteDraw</a>.</p>
</div>
</body>
</html>