vault backup: 2025-04-19 01:51:11
This commit is contained in:
@@ -186,6 +186,78 @@ int main() {
|
||||
|
||||
5. Функция работает с обоими портами контроллера (0 и 1)
|
||||
|
||||
## Совместимость
|
||||
-----
|
||||
|
||||
`ChangeClearPad` является частью библиотеки `libpad.h` в PsyQ SDK и доступна во всех версиях. Аналогичная функциональность присутствует и в официальном Sony SDK для PS1.
|
||||
# Функция `PadChkVsync` в библиотеке PsyQ для PlayStation 1
|
||||
|
||||
Функция `PadChkVsync` используется для проверки состояния геймпада (контроллера) с синхронизацией по вертикальному гашению (VSync). Это важная функция для обработки ввода в играх на PS1.
|
||||
|
||||
## Основное назначение
|
||||
|
||||
`PadChkVsync` выполняет две ключевые задачи:
|
||||
1. Проверяет состояние подключенных контроллеров
|
||||
2. Синхронизирует чтение состояния с вертикальной синхронизацией (VSync)
|
||||
|
||||
## Синтаксис
|
||||
|
||||
```c
|
||||
int PadChkVsync(void);
|
||||
```
|
||||
|
||||
## Возвращаемое значение
|
||||
|
||||
Функция возвращает битовую маску, указывающую на состояние подключения контроллеров:
|
||||
- Бит 0: Состояние порта 1 (0 - контроллер подключен, 1 - не подключен)
|
||||
- Бит 1: Состояние порта 2
|
||||
- Бит 2: Состояние мемори-карты в порту 1
|
||||
- Бит 3: Состояние мемори-карты в порту 2
|
||||
|
||||
## Особенности работы
|
||||
|
||||
1. **Синхронизация с VSync** - чтение состояния происходит во время вертикального гашения, что предотвращает "разрывы" изображения
|
||||
2. **Определение подключенных устройств** - позволяет определить, какие контроллеры/мемори-карты подключены
|
||||
3. **Работа в паре с другими функциями Pad** - обычно используется вместе с `PadRead()`
|
||||
|
||||
## Пример использования
|
||||
|
||||
```c
|
||||
#include <libpad.h>
|
||||
|
||||
int main() {
|
||||
PadInit(0); // Инициализация системы контроллеров
|
||||
|
||||
while(1) {
|
||||
// Проверка состояния подключения
|
||||
int connected = PadChkVsync();
|
||||
|
||||
if (!(connected & 1)) { // Если контроллер в порту 1 подключен
|
||||
u_long pad = PadRead(0); // Чтение состояния
|
||||
|
||||
if (pad & PAD_UP) {
|
||||
// Обработка нажатия UP
|
||||
}
|
||||
// Другие проверки кнопок...
|
||||
}
|
||||
|
||||
VSync(0); // Ожидание следующего VBlank
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
## Типичный сценарий использования
|
||||
|
||||
1. В начале кадра вызывается `PadChkVsync()` для проверки подключенных устройств
|
||||
2. Если контроллер подключен, вызывается `PadRead()` для получения состояния кнопок
|
||||
3. Состояние кнопок обрабатывается в игровой логике
|
||||
4. Цикл повторяется после `VSync(0)`
|
||||
|
||||
## Важные нюансы
|
||||
|
||||
1. Функция не возвращает состояние кнопок - только информацию о подключении
|
||||
2. Для фактического чтения кнопок нужно использовать `PadRead()`
|
||||
3. Рекомендуется вызывать эту функцию один раз за кадр
|
||||
4. В отличие от `PadRead()`, `PadChkVsync` не очищает буфер ввода
|
||||
|
||||
Функция `PadChkVsync` особенно полезна в играх, где важно точно определять момент подключения/отключения контроллеров во время gameplay, например, в multiplayer-играх с возможностью "hot-plug" контроллеров.
|
||||
Reference in New Issue
Block a user