[Day27]用Canvas打造自己的游乐场-labyrinth 键盘控制角色

今天要来加入玩家角色,以及用键盘来控制角色

// 玩家
var player_x;
var player_y;

resetPlayer = () => {
    player_x = 660;
    player_y = 440;
}

这边要先定义一下按按键的事件

const KEY_LEFT_ARROW = 37;
const KEY_UP_ARROW = 38;
const KEY_RIGHT_ARROW = 39;
const KEY_DOWN_ARROW = 40;
var keyLeft = false;
var keyRight = false;
var keyTop = false;
var keyDown = false;


initInput = () => {
    document.addEventListener("keydown", keyPressed);
    document.addEventListener("keyup", keyReleased);
}

keyPressed = (evt) => {
    setKeyState(evt.keyCode, true);
    evt.preventDefault();
}

keyReleased = (evt) => {
    setKeyState(evt.keyCode, false);
}

setKeyState = (key, to) => {
    if (key == KEY_LEFT_ARROW) {
        keyLeft = to;
    }
    if (key == KEY_RIGHT_ARROW) {
        keyRight = to;
    }
    if (key == KEY_UP_ARROW) {
        keyTop = to;
    }
    if (key == KEY_DOWN_ARROW) {
        keyDown = to;
    }
}

然後持续监听事件

window.onload = () => {
    canvas = document.getElementById('playground');
    canvasContext = canvas.getContext('2d');

    initInput();

    //一秒更新几次画面
    var timesPerSec = 30;
    setInterval(drawAll, 1000 / timesPerSec);

    resetPlayer();
}

监听事件後就可以移动玩家角色了

playerMove = () => {
    var next_x = player_x;
    var next_y = player_y;

    if (keyLeft) {
        next_x -= MOVE_SPEED;
    }
    if (keyRight) {
        next_x += MOVE_SPEED;
    }
    if (keyTop) {
        next_y -= MOVE_SPEED;
    }
    if (keyDown) {
        next_y += MOVE_SPEED;
    }

    if (checkMapBrick(next_x, next_y) == false) {
        player_x = next_x;
        player_y = next_y;
    }
}

记得加入到move中

// 负责处理动作
move = () => {
    map_x = player_x - canvas.width / 2;
    map_y = player_y - canvas.height / 2;

    playerMove();
}

OK 那明天就来做个收尾吧


<<:  第 28 天 - RxGesture

>>:  Day29

铁人赛 Day1 -- 天哪~ 新手村的我到底该不该先学PHP !!

(以下有说错的,在劳烦各位大大告诉我,感谢各位学长姐) 其实一开始我在想说我的SQL资料库要用哪个语...

Day 25 - 模板

Outline: Templates The standard library <vector...

Day6 跟着官方文件学习Laravel-DB设定

今天要设定DB,我们用docker来装DB,首先我们先装docker brew install do...

Day27 slot

slot「插槽」就是将子原件上开个位置,并将外层元件放置在子元件位置上,在复杂的结构中适合使用 插槽...

[DAY-06] 开始减少控制 废除差旅和费用规定

规则和政策总是无法照顾到所有情况 现实生活有太多细微的差异 政策再怎麽缜密也追不上 花公司的钱 就...