首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中使用"WASD“的运动控制

在JavaScript中使用"WASD“的运动控制
EN

Stack Overflow用户
提问于 2022-02-13 23:58:52
回答 2查看 579关注 0票数 0

我现在正在做一个游戏,现在的动作真的很不稳定,因为当你按下一个按钮。“哇”。它将从‘顶端’的位置,给它上升的效果。

我本来希望用“this.y.x”和“this.y.y”,但我对此不太了解。

这是我目前的代码:

代码语言:javascript
复制
window.addEventListener('keydown', (e) =>{
switch(e.key){
        case 'a':
        player.style.left = parseInt(player.style.left) - movePlayer + 'px';
        break;
        case 'd':
        player.style.left = parseInt(player.style.left) + movePlayer + 'px';
        break;
        case 'w':
        player.style.top = parseInt(player.style.top) - movePlayer + 'px';
        break;
        case 's':
        player.style.top = parseInt(player.style.top) + movePlayer + 'px';
        break;
         }
   });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-14 00:35:08

平滑

代码语言:javascript
复制
<div id="box" style="border: 2px solid black; width: 200px; height: 200px">
    <div id="sprite" style="left: 0; bottom: 0"></div>
</div>
<button>Increase Speed</button>

<style>
    #sprite {
        width: 25px;
        height: 25px;
        background: red;
        position: relative;
        transition: 0.1s linear;
    }
</style>

<script>
    const box = document.querySelector('#box');
    const sprite = document.querySelector('#sprite');
    const button = document.querySelector('button');
    let speed = 5;

    const toNum = (pxVal) => {
        return parseInt(pxVal, 10);
    };

    const handleMovement = (e) => {
        let left = toNum(sprite.style.left);
        const bottom = toNum(sprite.style.bottom);

        switch (e.key) {
            case 'a':
                if (left <= 0) return (sprite.style.left = 0);
                sprite.style.left = left - speed + 'px';
                break;
            case 'd':
                if (left >= 175) return (sprite.style.left = 175);
                sprite.style.left = left + speed + 'px';
                break;
            case 'w':
                if (bottom >= 0) return (sprite.style.bottom = 0);
                sprite.style.bottom = bottom + speed + 'px';
                break;
            case 's':
                if (bottom <= -175) return (sprite.style.bottom = -175);
                sprite.style.bottom = bottom - speed + 'px';
                break;
        }
    };

    window.addEventListener('keydown', handleMovement);

    button.addEventListener('click', () => (speed += 5));
</script>

票数 1
EN

Stack Overflow用户

发布于 2022-02-14 00:26:05

通过使用window.getComputedStyle.getPropertyValue来尝试

如果您认为有必要的话,仍然可以用player.style.leftplayer.style.top替换它,但是我强烈建议您使用window.getComputedStyle.getPropertyValue,因为这始终是稳定的方法。

检查更多的这里

代码语言:javascript
复制
let player = document.getElementById('player')
let movePlayer = 10
window.addEventListener('keydown', (e) =>{
let leftpos = parseInt(window.getComputedStyle(player).getPropertyValue("left"))
let toppos = parseInt(window.getComputedStyle(player).getPropertyValue("top"))
switch(e.key){
        case 'a':
        player.style.left = leftpos - movePlayer + 'px';
        break;
        case 'd':
        player.style.left =leftpos + movePlayer + 'px';
        break;
        case 'w':
        player.style.top = toppos - movePlayer + 'px';
        break;
        case 's':
        player.style.top =toppos + movePlayer + 'px';
        break;
         }
   });
代码语言:javascript
复制
#player{
width:100px;
height:100px;
background-color:black;
position:absolute;
}
代码语言:javascript
复制
<div id='player'><div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71105913

复制
相关文章

相似问题

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