vueuse 中文文档

VueUse useGamepad 游戏手柄

VueUse useGamepad 游戏手柄,为Gamepad API提供响应式绑定。

代码示例

由于Gamepad API的工作原理,你必须在它被检测到之前使用Gamepad与页面进行交互。

<script setup>
import { computed } from 'vue'
import { useGamepad } from '@vueuse/core'

const { isSupported, gamepads } = useGamepad()
const gamepad = computed(() => gamepads.find(g => g.mapping === 'standard'))
</script>
<template>
  <span>
    {{ gamepad.id }}
  <span>
</template>

Gamepad Updates

目前,手柄API没有事件支持来更新手柄的状态。为了更新手柄状态,requestAnimationFrame用于轮询手柄的变化。您可以通过使用useGamepad提供的暂停和恢复函数来控制这个轮询

import { useGamepad } from '@vueuse/core'

const { pause, resume, gamepads } = useGamepad()

pause()

// gamepads object will not update

resume()

// gamepads object will update on user input

连接和断开事件

onConnected和onDisconnected事件将在手柄连接或断开时触发。

const { gamepads, onConnected, onDisconnected } = useGamepad()

onConnected((index) => {
  console.log(`${gamepads.value[index].id} connected`)
})

onDisconnected((index) => {
  console.log(`${index} disconnected`)
})

Vibration 振动

使用前检查 Gamepad Haptics API兼容性。

<script setup>
import { mapGamepadToXbox360Controller } from '@vueuse/core'


const controller = mapGamepadToXbox360Controller(gamepad)
</script>


<template>
  <span>{{ controller.buttons.a.pressed }}</span>
  <span>{{ controller.buttons.b.pressed }}</span>
  <span>{{ controller.buttons.x.pressed }}</span>
  <span>{{ controller.buttons.y.pressed }}</span>
</template>

Mappings

为了让Gamepad API更容易使用,我们提供了映射,将控制器映射到控制器按钮布局。

<script setup>
import { mapGamepadToXbox360Controller } from '@vueuse/core'

const controller = mapGamepadToXbox360Controller(gamepad)
</script>
<template>
  <span>{{ controller.buttons.a.pressed }}</span>
  <span>{{ controller.buttons.b.pressed }}</span>
  <span>{{ controller.buttons.x.pressed }}</span>
  <span>{{ controller.buttons.y.pressed }}</span>
</template>

源码:https://github.com/vueuse/vueuse/blob/main/packages/core/useGamepad/index.ts 

Catalog
vueuse 入门 State 状态 Elements 元素 Browser 浏览器 useBluetooth 蓝牙函数 useBreakpoints 网页网格断点 useBroadcastChannel 跨网页通讯 useBrowserLocation 响应式location useClipboard 粘贴复制 useColorMode 皮肤颜色切换 useCssVar 修改css变量 useEventListener 事件监听 useEyeDropper 取色器 useFavicon 设置浏览器窗口图标 useFileDialog 文件选择器 useFileSystemAccess 操作本地文件 useFullscreen 全屏模式 useGamepad 游戏手柄 useImage 图片 useMediaControls 视频音频控制 useMediaQuery 媒体查询 useMemory 响应式内存信息 useObjectUrl 响应式对象URL usePerformanceObserver 性能指标 usePermission 判断 api 权限 usePreferredColorScheme 获取系统主题 usePreferredContrast 色彩对比度 usePreferredDark 黑暗主题 usePreferredLanguages 用户系统语言 useScreenOrientation 屏幕方向API useScreenSafeArea 屏幕安全区域 useScriptTag 动态加载js文件 useShare 分享功能 useStyleTag 动态注入CSS useTextareaAutosize textarea自适应高度 useUrlSearchParams 获取设置URL参数 useTextDirection 文字方向 useTitle 修改网页标题 useVibrate 手机振动功能 useWakeLock 防止屏幕变黑或锁屏 useWebNotification 显示桌面通知 useWebWorker 创建多线程任务 useWebWorkerFn 多线程函数 Sensors 感应监测