不要为两个玩家玩的工作控件

发布于 2025-02-11 23:29:29 字数 1180 浏览 1 评论 0原文

// methods for key
 setControlsButton(){
    var _this = this;
    window.onkeydown = function(e) {
        if (e.keyCode === 65) {
            _this.x -= _this.velX;
            } else if (e.keyCode === 68) {
            _this.x += _this.velX;
            } else if (e.keyCode === 87) {
            _this.y -= _this.velY;
            } else if (e.keyCode === 83) {
            _this.y += _this.velY;
        }
    }
}

setControlsArrow(){
    var _this = this;
    window.onkeydown = function(e) {
        if (e.keyCode === 37) {
            _this.x -= _this.velX;
            } else if (e.keyCode === 39) {
            _this.x += _this.velX;
            } else if (e.keyCode === 38d) {
            _this.y -= _this.velY;
            } else if (e.keyCode === 40) {
            _this.y += _this.velY;
        }
    }
}

方法调用

player1.draw();
player1.checkBounds();
player1.collisionDetect();
player1.setControlsButton();

player2.draw();
player2.checkBounds();
player2.collisionDetect();
player2.setControlsArrow();
// code

我想控制两个播放器:箭头键和“ wasd”。但是只有最后一个称为方法的作品,即 setControlsarrow()。请帮助,如何为Vanila JS的两个球员建立控件?

// methods for key
 setControlsButton(){
    var _this = this;
    window.onkeydown = function(e) {
        if (e.keyCode === 65) {
            _this.x -= _this.velX;
            } else if (e.keyCode === 68) {
            _this.x += _this.velX;
            } else if (e.keyCode === 87) {
            _this.y -= _this.velY;
            } else if (e.keyCode === 83) {
            _this.y += _this.velY;
        }
    }
}

setControlsArrow(){
    var _this = this;
    window.onkeydown = function(e) {
        if (e.keyCode === 37) {
            _this.x -= _this.velX;
            } else if (e.keyCode === 39) {
            _this.x += _this.velX;
            } else if (e.keyCode === 38d) {
            _this.y -= _this.velY;
            } else if (e.keyCode === 40) {
            _this.y += _this.velY;
        }
    }
}

method call

player1.draw();
player1.checkBounds();
player1.collisionDetect();
player1.setControlsButton();

player2.draw();
player2.checkBounds();
player2.collisionDetect();
player2.setControlsArrow();
// code

I want to control two players: arrow keys and 'wasd'. But only the last called method works, i.e. setControlsArrow(). Please help, how to make controls for two player in vanila js?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

撩起发的微风 2025-02-18 23:29:30

通过使用window.onkeydown,您正在覆盖所有其他键入 window> window对象上的事件侦听器。因此,当您调用第二种方法时,您将删除在第一个方法上设置的侦听器。

您应该使用window.addeventListener('键down',function(e){...});而不是。

By using window.onkeydown, you're overriding all other keydown event listeners on the windowobject. So when you call the second method, you delete the listener you set on the first one.

You should use window.addEventListener('keydown', function(e){...}); instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文