vault backup: 2025-04-19 00:31:03

This commit is contained in:
sShemet
2025-04-19 00:31:03 +05:00
parent ca00c6bcd7
commit 80029c6982
2 changed files with 83 additions and 8 deletions

View File

@@ -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.