Blob Blame Raw
<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="index.html">Helianthus</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="sprites.html">Спрайты</a></p>
  <p><a href="groups.html">Группы спрайтов</a></p>
  <p><a href="camera.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>). Кроме того спрайт может содержать анимацию, для этого вместо одного изображения в него можно загрузить папку с картинками — кадрами. Эти кадры могут переключаться автоматически (<a href="sprites.html#spritePlay">spritePlay</a>) или по вашей команде (<a href="sprites.html#spriteSetFrame">spriteSetFrame</a>, <a href="sprites.html#spriteNextFrame">spriteNextFrame</a>).</p>

<p>Положение спрайта задаётся координатами его центра (<a href="sprites.html#spriteSetX">spriteSetX</a>, <a href="sprites.html#spriteSetY">spriteSetY</a>), и углом поворота (<a href="sprites.html#spriteSetRotation">spriteSetRotation</a>). Кроме того вы можете задать ширину и высоту спрайта (<a href="sprites.html#spriteSetWidth">spriteSetWidth</a>, <a href="sprites.html#spriteSetHeight">spriteSetHeight</a>)</p>

<p>Создать спрайт можно функцией <a href="sprites.html#createSprite">createSprite</a>, которая возвращает значение типа <i>Sprite</i>, которое по сути является адресом в памяти — указателем на описание спрайта внутри библиотеки Helianthus.</p>

<p>Пример:</p>

<pre>
#include &lt;helianthus.h&gt;

Sprite mysprite;

void init() {
&nbsp;&nbsp;&nbsp;&nbsp;// Создать новый спрайт с центром в точке (200, 200)
&nbsp;&nbsp;&nbsp;&nbsp;mysprite = createSprite(200, 200);

&nbsp;&nbsp;&nbsp;&nbsp;// Загрузить файл изображения.
&nbsp;&nbsp;&nbsp;&nbsp;spriteSetAnimation(mysprite, "picture.png"); 
}

void draw() {
&nbsp;&nbsp;&nbsp;&nbsp;// Повернуть спрайт на 10 градусов перед рисованием.
&nbsp;&nbsp;&nbsp;&nbsp;double r = spriteGetRotation(mysprite);
&nbsp;&nbsp;&nbsp;&nbsp;spriteSetRotation(mysprite, r + 10);

&nbsp;&nbsp;&nbsp;&nbsp;// Вывести все спрайты на экран.
&nbsp;&nbsp;&nbsp;&nbsp;// Весь один спрайт, в данном случае.
&nbsp;&nbsp;&nbsp;&nbsp;drawSprites();
}

int main() {
&nbsp;&nbsp;&nbsp;&nbsp;worldSetInit(&init);
&nbsp;&nbsp;&nbsp;&nbsp;worldSetDraw(&draw);
&nbsp;&nbsp;&nbsp;&nbsp;worldRun();
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}
</pre>


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

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

<p>Изначально физическое представление спрайта это прямоугольник соответствующий видимой форме спрайта. Но это может быть изменено, например, вы можете представить спрайт для физической модели в виде круга, при этом видимое изображение останется прежним (<a href="sprites.html#spriteSetCollider">spriteSetCollider</a>).</p>

<p>Физическое тело спрайта позволяет вам определять находится ли над спрайтом указатель мыши, см. функции <a href="sprites.html#mouseIsOver">mouseIsOver</a> и <a href="sprites.html#mousePressedOver">mousePressedOver</a>.</p>

<p>Помимо описания формы и размеров физического тела спрайта вам, скорее всего, понадобится задать и его скорость (<a href="sprites.html#spriteSetVelocityXY">spriteSetVelocityXY</a>).</p>

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

<table>
  <tr>
    <th>Имя функции</th>
    <th>Первый спрайт сохраняет свою скорость?</th>
    <th>Второй спрайт сохраняет свою скорость?</th>
    <th>Описание</th>
  </tr>
  <tr>
    <td><a href="sprites.html#spriteOverlap">spriteOverlap</a></td>
    <td>Да.</td>
    <td>Да.</td>
    <td>Спрайты проходят друг через друга, функция просто сообщает вам о факте касания.</td>
  </tr>
  <tr>
    <td><a href="sprites.html#spriteCollide">spriteCollide</a></td>
    <td>Нет.</td>
    <td>Нет.</td>
    <td>Спрайты отталкиваются друг от друга — обычное столкновение двух объектов</td>
  </tr>
  <tr>
    <td><a href="sprites.html#spriteBounceOff">spriteBounceOff</a></td>
    <td>Нет.</td>
    <td>Да.</td>
    <td>Первый спрайт отталкивается от второго, второй же продолжает своё движение так, словно ничего не было.</td>
  </tr>
  <tr>
    <td><a href="sprites.html#spritePush">spritePush</a></td>
    <td>Да.</td>
    <td>Нет.</td>
    <td>Первый спрайт движется так будто и не было столкновения, второй же отталкивается от первого и меняет свою скорость и направление движения.</td>
  </tr>
  <tr>
    <td><a href="sprites.html#spriteCollideEx">spriteCollideEx</a></td>
    <td>Задаётся параметрами функции.</td>
    <td>Задаётся параметрами функции.</td>
    <td>Это универсальная функция, которая вмещает в себя возможности предыдущих четырёх функций.</td>
  </tr>
</table>


<p>Также указанные функции (кроме <a href="sprites.html#spriteOverlap">spriteOverlap</a>) имеют параметр <i>bounciness</i> — это показатель энергии столкновения.</p>

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

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

<p>Параметр <i>bounciness</i> есть и у каждого спрайта (<a href="sprites.html#spriteSetBounciness">spriteSetBounciness</a>). При расчёте параметры  <i>bounciness</i> от обоих спрайтов и параметр <i>bounciness</i> из функции перемножаются и получается окончательное значение <i>bounciness</i> для расчётов.</p>

<p>Таким образом запустив, например, функцию <a href="sprites.html#spritePush">spritePush</a> для двух ваших спрайтов вы тем самым инициируете расчёт физического взаимодействия межу ними. И кроме того вы одновременно с этим указываете какую роль в физической модели занимает ваш объект. Например для <a href="sprites.html#spritePush">spritePush</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);</h3>

<p>Создаёт спрайт с центром в указанной точке. См. также <a href="sprites.html#createSpriteEx">createSpriteEx</a>.</p>

<h4>Параметры:</h4>

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

<h3 id="createSpriteEx">Sprite createSpriteEx(double x, double y, double width, double height);</h3>

<p>Создаёт спрайт заданного размера с центром в указанной точке. См. также <a href="sprites.html#createSprite">createSprite</a>.</p>

<h4>Параметры:</h4>

<p><i>x</i>, <i>y</i> — координаты центра нового спрайта;<br />
<i>width</i> — ширина нового спрайта;<br />
<i>height</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="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>

<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="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="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="spriteGetRotationSpeed">double spriteGetRotationSpeed(Sprite sprite);</h3>
<h3 id="spriteSetRotationSpeed">void spriteSetRotationSpeed(Sprite sprite, double rotationSpeed);</h3>

<p>Получить (Get) или задать (Set) скорость вращения спрайта. Да, спрайт имеет ещё и скорость вращения. Вы можете её задать в градусах в секунду и спрайт будет вращаться сам.  См. также <i>spriteSet</i><i>Rotation</i>.</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="spriteGetTag">int spriteGetTag(Sprite sprite);</h3>
<h3 id="spriteSetTag">void spriteSetTag(Sprite sprite, int tag);</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, double bounciness);</h3>

<p>Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новые скорости и позиции для указанных спрайтов и возвращает <i>TRUE</i>. В противном случае возвращает <i>FALSE</i>. См. описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>

<h4>Параметры:</h4>

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

<h3 id="spriteBounceOff">int spriteBounceOff(Sprite sprite, Sprite other, double bounciness);</h3>

<p>Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новую скорость и позицию для спрайта <i>sprite</i> (спрайт <i>other</i> не меняет своих параметров) и возвращает <i>TRUE</i>. В противном случае возвращает <i>FALSE</i>. См. описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>

<h4>Параметры:</h4>

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

<h3 id="spritePush">int spritePush(Sprite sprite, Sprite other, double bounciness);</h3>

<p>Определяет есть ли столкновение между двумя спрайтами и, если есть, то рассчитывает новую скорость и позицию для спрайта <i>other</i> (спрайт <i>sprite</i> не меняет своих параметров) и возвращает <i>TRUE</i>. В противном случае возвращает <i>FALSE</i>. См. описание физической модели в разделе <a href="sprites.html" />«Спрайты»</a>.</p>

<h4>Параметры:</h4>

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

<h3 id="spriteCollideEx">int spriteCollideEx(Sprite a, Sprite b, int keepVelocityA, int keepVelocityB, double bounciness);</h3>

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

<h4>Параметры:</h4>

<p><i>bounciess</i> — показатель энергии столкновения;<br />
<i>keepVelocityA</i> — если <i>TRUE</i> то спрайт <i>a</i> не меняет своих параметров и продолжает движение, так будто столкновения не было;<br />
<i>keepVelocity</i><i>B</i> — если <i>TRUE</i> то спрайт <i>b</i> не меняет своих параметров и продолжает движение, так будто столкновения не было.</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="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>xOffset,  yOffset — смещение центра физического тела относительно центра спрайта;<br />
radius — радиус круга, если меньше 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="spriteSetAnimation">void spriteSetAnimation(Sprite sprite, const char *path);</h3>

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

<h4>Параметры:</h4>

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

<h3 id="spriteSetNoAnimation">void spriteSetNoAnimation(Sprite sprite);</h3>

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

<h3 id="spritePlay">void spritePlay(Sprite sprite);</h3>

<p>Включить воспроизведение анимации для спрайта. При каждом вызове функции перерисовки окна будет переключаться кадр. Частоту перерисовки окна, а следовательно и частоту кадров для анимации спрайтов, можно задать функцией <a href="common.html#worldSetFrameRate">worldSetFrameRate</a>. См. также <i>spriteP</i><i>ause</i>.</p>

<h3 id="spritePause">void spritePause(Sprite sprite);</h3>

<p>Остановить анимацию спрайта. См. также <a href="sprites.html#spritePlay">spritePlay</a>.</p>

<h3 id="spriteNextFrame">void spriteNextFrame(Sprite sprite);</h3>

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

<h3 id="spriteSetFrame">void spriteSetFrame(Sprite sprite, int frame);</h3>

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

<h4>Параметры:</h4>

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

<h3 id="spriteSetShapeColor">void spriteSetShapeColor(Sprite sprite, const char *color);</h3>

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

<h4>Параметры:</h4>

<p><i>color</i> — текстовое наименование цвета, см. раздел <a href="drawing.html" />«Рисование»</a>.</p>

<h3 id="spriteSetTintColor">void spriteSetTintColor(Sprite sprite, const char *color);</h3>

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

<h4>Параметры:</h4>

<p><i>color</i> — текстовое наименование цвета, см. раздел <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="mouseIsOver">int mouseIsOver(Sprite sprite);</h3>

<p>Функция возвращает <i>TRUE</i> (число 1) если указатель мыши находится над указанным спрайтом, иначе возвращает <i>FALSE</i> (число 0). См. также раздел <a href="sprites.html" />«Спрайты»</a>.</p>

<h3 id="mousePressedOver">int mousePressedOver(Sprite sprite);</h3>

<p>Функция возвращает <i>TRUE</i> (число 1) если любая кнопка мыши нажата (и удерживается) в то время как указатель мыши находится над указанным спрайтом, иначе возвращает <i>FALSE</i> (число 0). См. также раздел <a href="sprites.html" />«Спрайты»</a>.</p>

<h3 id="worldGetSpriteCount">int worldGetSpriteCount();</h3>

<p>Возвращает количество спрайтов существующих в программе в данный момент. См. также <a href="sprites.html#worldGetSprite">worldGetSprite</a>.</p>

<h3 id="worldGetSprite">Sprite worldGetSprite(int i);</h3>

<p>Возвращает спрайт по указанному номеру. См. также <a href="sprites.html#worldGetSpriteCount">worldGetSpriteCount</a>.</p>

<h3 id="drawSprites">void drawSprites();</h3>

<p>Вывести все спрайты на экран.</p>

</div>
</body>
</html>