javascript - 数组练习javascript的同时循环

标签 javascript arrays canvas keydown simultaneous

我想按键触发 block 的移动,然后用另一个按键,添加另一个移动 block 。如果我再次按下,则会出现另一个移动 block 。就像现在一样,按下按键会停止第一个 block 的移动。我想让所有的积木同时移动。这是代码。它也可以在 jsfiddle http://jsfiddle.net/7eUEE/ 上找到

谢谢!

var canvas = document.getElementById("canvas"); 
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var ctx = canvas.getContext("2d");
var w = canvas.width;
var h = canvas.height;
window.addEventListener("keydown", addnew, true);
window.addEventListener("keydown", move, true);
var list = [];
var id = 0;
var color = 'blue';
var x = 0;
var y = 0;

window.onkeydown = function(s){
    s.preventDefault();
    if(!s){
        s = window.event;
    }

    var keycode;
    if(s.which){
        keycode = s.which;
    }else{
        keycode = s.keyCode;
    }

}
function box(id, color, x ,y){
    box.id = id;
    box.color = color;
    box.x = x;
    box.y = y;
}   

function addnew(e){
    e.preventDefault();
    if(!e){
        e = window.event;
    }                   

    //space
    if(e.keyCode == 32){
        list[id] = new box(id, color, x, y);
        id++;
        y = y + 100;
        box.y = y;
        box.color = 'red';
        console.log(box.y);
    }
}

list[0] = box(id, color, x ,y);

function move(e){
    e.preventDefault();
    if(!e){
        e = window.event;
    }                   

    //right
    if(e.keyCode == 39){
        list[id];
        setInterval(loopdraw);
    }
}

var loopdraw = function draw(){
    box.x = box.x + 1;
    console.log(box.x);
    ctx.beginPath();
    ctx.fillStyle = box.color;
    ctx.fillRect(box.x, box.y, 50, 50);
    ctx.closePath();
}

最佳答案

您的 Box 对象不像对象,因为您以 3 种方式使用它们:

  • 类:list[id] = new box(id, color, x, y);
  • 函数:list[0] = box(id, color, x ,y);
  • 对象:box.y = y;, box.color = 'red';

list 部分是正确的:保留一组(移动的)框。循环部分不是,因为您不使用列表。您只需“循环”1 个框。

我已经更新了 fiddle :http://jsfiddle.net/rudiedirkx/7eUEE/1/并且我已将 box 类重命名为 Box,因为可能存在名为 boxBox 对象。

重要部分:

// Create initial box
list[id++] = new Box(id, color, x ,y);

// Create more boxes
list[id++] = new Box(id, 'red', x, y);

// Loop through existing boxes animation
function loopdraw() {
  list.forEach(function(box) {
    // Draw

关于javascript - 数组练习javascript的同时循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306084/

相关文章:

Java - 查找多个数组中的重复条目

java - 如何知道我们应该添加的最少数字以获得完整数组

fetch_array 中的 PHP MySQL 数组

javascript - 使用 DOM 或 Canvas 平移和缩放超大图像?

javascript - PDF 预加载的 CORB 问题

javascript - 带有输出百分比的jquery自定义字符串比较函数

javascript - Grunt Task Runner 连接文件

javascript - Liferay 6 在停靠栏外创建 'Add Page' 链接

css - 为什么当我重新加载页面时我的内容会发生变化?

javascript - Canvas globalCompositeOperation 模式是否应该从 drawImage 工作?