Answer the question
In order to leave comments, you need to log in
How to automate duplicate rows in excel?
I work with an invoice in excel in sheet 1 invoice for a client in sheet 2 invoice for a store.
in sheet 1 and sheet 2 there are lines "Full name" "Delivery address" "Product name" "Article", these lines are filled in manually with the same information. how to automate the filling of these lines into sheet 2 from sheet 1 ?
Answer the question
In order to leave comments, you need to log in
What is it, in setInterval they pushed the connection of the keydown handler? Clever. No setInterval is needed here.
The keydown handler itself looks too complicated - why make the same function call in four different places? First you change the coordinates, and at the very end, you pull the redraw.
The size of the pictures - and if you decide to change? Or sealed somewhere? Make a constant.
In terms of drawing, it's probably easiest to tile the canvas with a background image and then draw the character.
How it all might look:
const
canvas = document.querySelector('#canvas'),
ctx = canvas.getContext('2d');
let
pickX = 0,
pickY = 0;
const TILE_SIDE = 32;
const ground = new Image();
ground.src = 'Ground.png';
const pick = new Image()
pick.src = 'Pick.png';
document.addEventListener('keydown', function(e) {
switch (e.keyCode) {
case 87: pickY -= TILE_SIDE; break;
case 65: pickX -= TILE_SIDE; break;
case 83: pickY += TILE_SIDE; break;
case 68: pickX += TILE_SIDE; break;
default: return;
}
draw();
});
function draw() {
for (let x = 0; x < canvas.width; x += TILE_SIDE) {
for (let y = 0; y < canvas.height; y += TILE_SIDE) {
ctx.drawImage(ground, x, y);
}
}
ctx.drawImage(pick, pickX, pickY);
}
draw();
What is wrong with the js code?it's wrong from the very first line...
// тут очевидно было пропущено объявление переменной куда сохраняем полученный из DOM canvas
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
// вангую, что тут не объявленные переменные, и их нужно объявить
var x = 0;
var y = 0;
var x1 = 0;
var y1 = 0;
var g = 4;
var b = 7;
// тут норм, но все же стоит включить себе линтер
// ибо порядок в коде == порядок в голове
var ground1 = new Image();
ground1.src = "Ground.png";
var pick1 = new Image();
pick1.src = "Pick.png";
// а вот в функции draw началась полная дичь...
function draw() {
ctx.clearRect(0,0,316,632); // очистку перенес внутрь функции отрисовки
// тут я вырезал addEventListener - ибо добавлять нового подписчика на каждой отрисовке - дичь полнейшая
// пристрелите того, кто Вас этому научил, так Вы сделаете этот мир лучше
if(g < b) {
ctx.drawImage(ground1, x, y);
x+=32;
if(x-32 > 290){
x = 0;
y+=32;
}
if(y-32 > 578){
y = 0;
x = 0;
}
}
// я так думаю эту картинку надо рисовать после фона
ctx.drawImage(pick1, x1, y1);
requestAnimationFrame(draw); //зациклим анимацию
}
// анимировать что-то по таймеру плохая затея, есть более подходящие инструменты
requestAnimationFrame(draw);
// подписку на событие клавиатуры вынес из отрисовки
// а саму отрисовку выкинул из обработчика
// его дело переменные пересчитывать, а рисовать будет draw
document.addEventListener("keydown", function pick(e) {
if(e.keyCode == 87){
y1-=32;
}
if(e.keyCode == 65){
x1-=32;
}
if(e.keyCode == 83){
y1+=32;
}
if(e.keyCode == 68){
x1+=32;
}
});
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question