<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>Во время работы программы вы можете узнавать положение мыши и состояние клавиш. Координаты указателя мыши можно получить функциями <a href="input.html#mouseX">mouseX</a> и <a href="input.html#mouseY">mouseY</a>. С помощью функций <a href="input.html#mouseScrolledX">mouseScrolledX</a>, <a href="input.html#mouseScrolledY">mouseScrolledY</a> вы можете узнать количество «щелчков» прокрутки колёсика мыши совершённое со времени предыдущего кадра. Узнать состояние клавиш клавиатуры и кнопок мыши можно функциями <a href="input.html#keyDown">keyDown</a> и <a href="input.html#mouseDown">mouseDown</a> соответственно.</p>
<p>Для указания клавиши нужно написать её текстовое наименование, например: <i>"</i><i>a</i><i>", "</i><i>1</i><i>", "left"</i>, <i>"right"</i>, <i>"up"</i>, <i>"down"</i>, <i>"return"</i> (для Enter), <i>"escape"</i> и и.д.</p>
<p>Названия клавиш взяты из библиотеки <i>SDL</i>, их полный список вы можете посмотреть в документации к библиотеке <i>SDL</i>:<br />
<a href="https://wiki.libsdl.org/SDL_Keycode" target="blank">https://wiki.libsdl.org/SDL_Keycode</a></p>
<p>Вы также можете использовать несколько групповых наименований: <i>"</i><i>a</i><i>ny shift</i><i>"</i><i>, </i><i>"</i><i>a</i><i>ny ctrl</i><i>"</i><i>, </i><i>"</i><i>a</i><i>ny alt</i><i>"</i><i>, </i><i>"</i><i>a</i><i>ny gui</i><i>"</i> — обозначающих нажатие любой из парных клавиш (как левой так и правой). Группы <i>"</i><i>a</i><i>ny /</i><i>"</i>, <i>"</i><i>a</i><i>ny *</i><i>"</i>, <i>"</i><i>a</i><i>ny -</i><i>"</i>, <i>"</i><i>a</i><i>ny +</i><i>"</i>, <i>"</i><i>a</i><i>ny return</i><i>"</i>, <i>"</i><i>a</i><i>ny 0</i><i>"</i>, <i>"</i><i>a</i><i>ny 1"…</i> - отвечают за клавиши имеющие пару на дополнительной цифровой клавиатуре.</p>
<p>Наименований для кнопок мыши всего три: <i>"</i><i>left</i><i>"</i>, <i>"</i><i>middle</i><i>"</i> и <i>"</i><i>right</i><i>"</i>.</p>
<p>Кроме этого существуют функции для определения момента нажатия и отпускания клавиш и кнопок. На тот случай когда некоторые действия нужно выполнить только один раз в момент нажатия (или отпускания) клавиши. Смотрите функции <a href="input.html#keyWentDown">keyWentDown</a>, <a href="input.html#keyWentUp">keyWentUp</a>, <a href="input.html#mouseWentDown">mouseWentDown</a>, <a href="input.html#mouseWentUp">mouseWentUp</a>.</p>
<p>Также вы можете получить полный список нажатых, отпущенных или удерживаемых клавиш и кнопок при помощи функций <a href="input.html#keyEventGetCount">keyEventGetCount</a> и <a href="input.html#keyEventGet">keyEventGet</a>.</p>
<p>Например, если вы не знаете наименования какой-либо клавиши, вы можете выводить имена нажимаемых клавиш в терминал при помощи такой программы:</p>
<pre>
void draw() {
…
int count = keyEventGetCount(KEYEVENT_KEY_WENTDOWN);
for(int i = 0; i < count; ++i) {
printf( "pressed key: %s\n",
keyEventGet(KEYEVENT_KEY_WENTDOWN, i) );
}
…
}
</pre>
<h2>Функции:</h2>
<h3 id="keyDown">int keyDown(const char *code);</h3>
<p>Функция возвращает <i>TRUE</i> (число 1) если указанная клавиша в нажата (и удерживается) в данный момент и <i>FALSE</i> (число 0) если клавиша отпущена.</p>
<h4>Параметры:</h4>
<p><i>code</i> — текстовое наименование клавиши.</p>
<h3 id="keyWentDown">int keyWentDown(const char *code);</h3>
<p>Функция возвращает <i>TRUE</i> (число 1) если указанная клавиша стала нажатой в момент времени между предыдущим и текущим кадром. В последующих кадрах, даже если клавиша остаётся нажатой, функция возвращает <i>FALSE</i> (число 0).</p>
<p><b>Важно: </b>Примерно через секунду после нажатия и удержания клавиши, <a href="input.html#keyWentDown">keyWentDown</a> всё таки сработает ещё раз — так будто клавиша была повторно нажата. Другими словами поведение функции такое же как и у текстового редактора: если удерживать клавишу некоторое время редактор повторяет печать символа несколько раз.</p>
<h4>Параметры:</h4>
<p><i>code</i> — текстовое наименование клавиши.</p>
<h3 id="keyWentUp">int keyWentUp(const char *code);</h3>
<p>Функция возвращает <i>TRUE</i> (число 1) если указанная клавиша перестала быть нажатой в момент времени между предыдущим и текущим кадром. Во всех других случаях возвращает <i>FALSE</i> (число 0).</p>
<h4>Параметры:</h4>
<p><i>code</i> — текстовое наименование клавиши.</p>
<h3 id="mouseDown">int mouseDown(const char *code);</h3>
<p>Функция возвращает <i>TRUE</i> (число 1) если указанная кнопка мыши в нажата (и удерживается) в данный момент и <i>FALSE</i> (число 0) если кнопка отпущена.</p>
<h4>Параметры:</h4>
<p><i>code</i> — текстовое наименование кнопки мыши.</p>
<h3 id="mouseWentDown">int mouseWentDown(const char *code);</h3>
<p>Функция возвращает <i>TRUE</i> (число 1) если указанная кнопка мыши стала нажатой в момент времени между предыдущим и текущим кадром. Во всех последующих кадрах, даже если кнопка остаётся нажатой, функция возвращает <i>FALSE</i> (число 0).</p>
<h4>Параметры:</h4>
<p><i>code</i> — текстовое наименование кнопки мыши.</p>
<h3 id="mouseWentUp">int mouseWentUp(const char *code);</h3>
<p>Функция возвращает <i>TRUE</i> (число 1) если указанная кнопка мыши перестала быть нажатой в момент времени между предыдущим и текущим кадром. Во всех других случаях возвращает <i>FALSE</i> (число 0).</p>
<h4>Параметры:</h4>
<p><i>code</i> — текстовое наименование кнопки мыши.</p>
<h3 id="mouseScrolledX">int mouseScrolledX();</h3>
<p>Возвращает количество «щелчков» колёсика мыши для горизонтальной прокрутки прошедшее с предыдущего кадра. Может быть отрицательным при обратной прокрутке. См. также <a href="input.html#mouseScrolledY">mouseScrolledY</a>.</p>
<h3 id="mouseScrolledY">int mouseScrolledY();</h3>
<p>Возвращает количество «щелчков» колёсика мыши для вертикальной прокрутки прошедшее с предыдущего кадра. Может быть отрицательным при обратной прокрутке. См. также <a href="input.html#mouseScrolledX">mouseScrolledX</a>.</p>
<h3 id="mouseDidMove">int mouseDidMove();</h3>
<p>Функция возвращает <i>TRUE</i> (число 1) если с момента отрисовки предыдущего кадра положение мыши изменилось, и возвращает <i>FALSE</i> (число 0) ели мышь оставалась неподвижной.</p>
<h3 id="mouseX">double mouseX();</h3>
<p>Возвращает координату X указателя мыши. Координаты считаются относительно верхнего левого угла окна. См. также: <a href="input.html#mouseY">mouseY</a>, <a href="input.html#transformedMouseX">transformedMouseX</a>.</p>
<h3 id="mouseY">double mouseY();</h3>
<p>Возвращает координату Y указателя мыши. Координаты считаются относительно верхнего левого угла окна. См. также: <a href="input.html#mouseX">mouseX</a>, <a href="input.html#transformedMouseY">transformedMouseY</a>.</p>
<h3 id="transformedMouseX">double transformedMouseX();</h3>
<p>Возвращает координату X указателя мыши в системе координат рисования с учётом применённых трансформаций. См. также <a href="input.html#transformedMouseY">transformedMouseY</a>, <a href="input.html#mouseX">mouseX</a>, <a href="drawing.html#translate">translate</a>, <a href="drawing.html#rotate">rotate</a>, <a href="drawing.html#zoom">zoom</a>.</p>
<h3 id="transformedMouseY">double transformedMouseY();</h3>
<p>Возвращает координату Y указателя мыши в системе координат рисования с учётом применённых трансформаций. См. также <a href="input.html#transformedMouseX">transformedMouseX</a>, <a href="input.html#mouseY">mouseY</a>, <a href="drawing.html#translate">translate</a>, <a href="drawing.html#rotate">rotate</a>, <a href="drawing.html#zoom">zoom</a>.</p>
<h3 id="keyEventGetCount">int keyEventGetCount(KeyEvent mode);</h3>
<p>Возвращает количество зарегистрированных на данном кадре клавиш (или кнопок мыши), соответствующих одному из перечисленных ниже типу событий:</p>
<table>
<tr>
<th>Тип</th>
<th>Описание</th>
</tr>
<tr>
<td><i>KEYEVENT_KEY_DOWN</i></td>
<td>удерживаемые в данный момент клавиши, см. keyDown</td>
</tr>
<tr>
<td><i>KEYEVENT_KEY_WENTDOWN</i></td>
<td>клавиши, которые только что стали нажатыми, см. keyWentDown</td>
</tr>
<tr>
<td><i>KEYEVENT_KEY_WENTUP</i></td>
<td>клавиши, которые были только что отпущены, см. keyWentUp</td>
</tr>
<tr>
<td><i>KEYEVENT_MOUSE_DOWN</i></td>
<td>кнопки мыши, которые в данный момент нажаты, см. mouseDown</td>
</tr>
<tr>
<td><i>KEYEVENT_MOUSE_WENTDOWN</i></td>
<td>кнопки мыши, которые только что стали нажатыми, см. mouseWentDown</td>
</tr>
<tr>
<td>KEYEVENT_MOUSE_WENTUP</td>
<td>кнопки мыши, которые были только что отпущены, см. mouseWentUp</td>
</tr>
</table>
<h4>Параметры:</h4>
<p><i>mode</i> — тип событий, см. выше.</p>
<h3 id="keyEventGet">const char* keyEventGet(KeyEvent mode, int i);</h3>
<p>Возвращает наименования клавиши или кнопки мыши из списка событий указанного типа, по указанному номеру. Элементы в списке событий отсортированы по времени возникновения события. То есть клавиши идут в том порядке в котором они были нажаты (или отпущены). См. также <a href="input.html#keyEventGetCount">keyEventGetCount</a>.</p>
<h4>Параметры:</h4>
<p><i>mode</i> — тип событий, список типов смотрите в описании функции <a href="input.html#keyEventGetCount">keyEventGetCount</a>;<br />
<i>i</i> — порядковой номер клавиши или кнопки в списке для указанного типа, элементы </p>
</div>
</body>
</html>