首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gamepad :不触发按钮事件

Gamepad :不触发按钮事件
EN

Stack Overflow用户
提问于 2017-06-25 04:13:38
回答 1查看 1.7K关注 0票数 1

我有一个蓝牙控制器,我用这个Gamepad测试器测试了所有的按钮数:http://html5gamepad.com/,所以我很确定按钮的值是正确的。然而,似乎没有什么触发,游戏垫显示是“连接”,只是按钮事件不工作。以下是代码:

代码语言:javascript
复制
function gameLoop() {
  if (navigator.webkitGetGamepads) {
    var wgp = navigator.webkitGetGamepads()[0];

    if (wgp.buttons[12] == 1 || wgp.buttons[4] == 1) {
      console.log('move');
    }
};

gameLoop();

我哪里出问题了?我使用Chrome,所以我有webkit前缀。游戏垫测试器会不会给我看错按钮了?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-20 19:34:22

也有类似的问题。检查gamepad.js/all.js.cofee上的代码时强调,我们需要在每个更新周期从navigator检索游戏垫(它们不会自动更新),确保您的gameLoop()被反复调用。例如,在window.setInterval(gameLoop, 100)window.requestAnimationFrame(gameLoop)

参考:

代码语言:javascript
复制
import * as React from 'react';

interface SampleComponentState {}
class SampleComponent extends React.Component<React.CSSProperties, SampleComponentState>{

    private gamepadUpdateToken: number | null
    constructor(props?: React.CSSProperties){
        super(props)
    }

    private handleGamepad() {
        const gamepads: Gamepad[] = navigator.getGamepads ? 
            navigator.getGamepads() : 
            ((navigator as any).webkitGetGamepads ? (navigator as any).webkitGetGamepads() : [])
        if (gamepads.length == 0){ return }

        gamepads[0].buttons.forEach((button, index) => {
            if (button.pressed){
                console.log(`Pressed button ${index}`)
            }
        })

        gamepads[0].axes.forEach((axe, index) => {
            if (axe != 0){
                console.log(`Axe ${index} moved: ${axe}`)
            }
        })
    }

    componentDidMount(){
        this.gamepadUpdateToken = window.setInterval(this.handleGamepad, 100)
        window.addEventListener("gamepadconnected", (event: any) => {
            const newGamapad: Gamepad = event.gamepad
            console.log(newGamapad)
        })
    }

    componentWillUnmount() {
        window.removeEventListener("gamepadconnected")
        if (this.gamepadUpdateToken != null){
            window.clearInterval(this.gamepadUpdateToken)
        }
    }

    render(){
        return (
            <div>
            </div>
        )
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44743130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档