Скопируйте область плитки на холсте javascript

У меня есть холст, отображающий карту тайлов. При прокрутке, а не обновлении всего списка листов, я хочу выбрать полезную часть карты листов, которую я могу использовать повторно, и скопировать ее на другой холст.

Например, если карта тайлов имела 5 плиток в поперечнике:

0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8

И я хотел переместить плитку вправо (х) 1... Я мог бы скопировать плитки с 1 по 4, так как они будут использованы в следующем кадре. Поэтому я бы скопировал:

1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8

Кажется, у меня возникла проблема с выбором математики для этого.

На данный момент у меня есть следующий код:

// Calculate from and to for x and y
// Change formula if positive or negative movement
    // movX / movY = amount to move across x or y
    // (i.e. movX = 1 (right) or movX = -1 (left)
    // tileXFrom / tileYFrom = tile to start copy from
    // tileXTo / tileYTo = tile to finish copying at
if(movX > 0)
{
    tileXFrom = origX + movX;
    tileXTo = tileXFrom + (tilesCountX - movX);
}
else
{
    tileXFrom = origX;
    tileXTo = tileXFrom + (tilesCountX + movX);
}

if(movY > 0)
{
    tileYFrom = origY + movY;
    tileYTo = tileYFrom + (tilesCountY - movY);
}
else
{
    tileYFrom = origY;
    tileYTo = tileYFrom + (tilesCountY + movY);
}

Эти расчеты работают нормально, но есть ли лучший способ сделать это? Мне интересно, есть ли способ обойти положительное / отрицательное выражение if.

Часть, в которой я сейчас застрял - это то, что нужно сделать, чтобы получить реальные координаты x, y для каждого.

Поэтому мне нужно преобразовать плитку 1, 0 в позицию на экране x, y, чтобы начать копирование оттуда.

Если это все имеет смысл?!

ура

1 ответ

Вы можете использовать троичные операторы для сокращения кода, но это не изменит функциональность:

tileXFrom = (movX > 0) ? origX + movX : origX;
tileXTo   = (movX > 0) ? tileXFrom + (tilesCountX - movX) : tileXFrom + (tilesCountX + movX);
tileYFrom = (movY > 0) ? origY + movY : origY;
tileYTo   = (movY > 0) ? tileYFrom + (tilesCountY - movY) : tileYFrom + (tilesCountY + movY);
Другие вопросы по тегам