vault backup: 2025-04-19 00:31:03
This commit is contained in:
@@ -109,8 +109,83 @@ while (1) {
|
||||
|
||||
---
|
||||
|
||||
## **8. Полезные ссылки**
|
||||
- [PSX Controller Protocol](http://problemkaputt.de/psx-spx.htm#controllersandmemorycards)
|
||||
- [PsyQ SDK Pad Docs](http://psx.arthus.net/sdk/PsyQ/DOCS/PADZ.HTM)
|
||||
# Функция `ChangeClearPad` в библиотеке PsyQ для PlayStation 1
|
||||
|
||||
Это основа для работы с любыми контроллерами PS1 — от классического геймпада до танцевальных ковриков! 🎮
|
||||
Функция `ChangeClearPad` относится к работе с контроллерами (геймпадами) PlayStation и используется для управления поведением буфера ввода.
|
||||
|
||||
## Назначение функции
|
||||
|
||||
`ChangeClearPad` изменяет режим очистки буфера данных контроллера. Она определяет, как система будет обрабатывать ввод с геймпада между кадрами:
|
||||
|
||||
1. **Автоматическая очистка буфера** (по умолчанию) - система автоматически очищает данные о предыдущем состоянии кнопок
|
||||
2. **Ручное управление буфером** - позволяет программисту самому решать, когда очищать буфер ввода
|
||||
|
||||
## Синтаксис
|
||||
|
||||
```c
|
||||
void ChangeClearPad(int mode);
|
||||
```
|
||||
|
||||
где `mode` может принимать значения:
|
||||
- `0` - ручной режим (очистка буфера только при вызове `ClearPad()`)
|
||||
- `1` - автоматический режим (очистка при каждом VSync)
|
||||
|
||||
## Практическое использование
|
||||
|
||||
```c
|
||||
#include <libpad.h>
|
||||
|
||||
int main() {
|
||||
// Инициализация контроллера
|
||||
PadInit(0);
|
||||
|
||||
// Переключение в ручной режим очистки буфера
|
||||
ChangeClearPad(0);
|
||||
|
||||
while(1) {
|
||||
// Чтение состояния контроллера
|
||||
PadRead(0);
|
||||
|
||||
// В ручном режиме нужно самостоятельно очищать буфер
|
||||
if(need_to_clear) {
|
||||
ClearPad(0);
|
||||
}
|
||||
|
||||
// Автоматическая очистка происходить не будет
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Типичные сценарии использования
|
||||
|
||||
1. **Фиксация коротких нажатий**:
|
||||
```c
|
||||
ChangeClearPad(0); // Ручной режим
|
||||
if(PadRead(0) {
|
||||
if((pad_status & PAD_CROSS) && !(old_pad_status & PAD_CROSS)) {
|
||||
// Обнаружено нажатие Cross
|
||||
}
|
||||
old_pad_status = pad_status;
|
||||
ClearPad(0); // Очищаем буфер вручную
|
||||
}
|
||||
```
|
||||
|
||||
2. **Комбинации кнопок** - когда нужно отслеживать состояние нескольких кнопок одновременно
|
||||
|
||||
3. **Специальные игровые механики** - где важно точное время нажатия/отпускания кнопок
|
||||
|
||||
## Важные нюансы
|
||||
|
||||
1. По умолчанию в PsyQ используется автоматический режим (`ChangeClearPad(1)`)
|
||||
|
||||
2. В ручном режиме вы должны самостоятельно вызывать `ClearPad()` для очистки буфера
|
||||
|
||||
3. Функция влияет на работу `PadRead()` - в автоматическом режиме она сама очищает предыдущее состояние
|
||||
|
||||
4. Для большинства игр достаточно стандартного автоматического режима
|
||||
|
||||
5. Функция работает с обоими портами контроллера (0 и 1)
|
||||
|
||||
## Совместимость
|
||||
|
||||
`ChangeClearPad` является частью библиотеки `libpad.h` в PsyQ SDK и доступна во всех версиях. Аналогичная функциональность присутствует и в официальном Sony SDK для PS1.
|
||||
Reference in New Issue
Block a user