Загрузка изображений один раз
Во-первых, не загружайте изображение каждый раз, когда вы его визуализируете. image.src = "filenameORUrl"
загружает изображение.
Загрузите изображения один раз, затем выберите, какое вы хотите визуализировать.
Пример создания загрузочного изображения
const running = new Image; // create
const normal = new Image;
running.src = "Running.png"; //load
normal.src = "normal.png";
Анимируйте
Для анимации изображения добавьте анимационные изображения в массив. Установите переменную, которая определяет, сколько кадров должно появиться каждое изображение, а затем разделите frameNum на это значение и напишите его, чтобы получить индекс изображения.
Пример анимации изображения
Примечание что в (frameNo / runAnimFrames | 0)
| 0
(побитовое ИЛИ 0) обрезает результат. Так же, как Math.floor(frameNo / runAnimFrames)
. Следует использовать ИЛИ ноль только для положительных чисел, меньших 31 ** 2 - 1
. Пример добавляет последовательность анимации в массив runAnim
и внутри основного цикла рендеринга отображает анимацию с отображением каждого кадра анимации для 30 кадров runAnimFrames
(полсекунды). Уменьшите число, чтобы ускорить анимацию, увеличьте, чтобы замедлить.
Вы можете добавить столько кадров, сколько вам нужно, в массив анимации
const runAnim = [running, normal]; // add animation sequence to arr
const runAnimFrames = 30; // number of frames to display each image in animation
// Inside main render loop
if(key === 39) {
const plyImg = runAnim[(frameNo / runAnimFrames | 0) % runAnim.length];
ctx.drawImage(plyImg, player.x, player.y, player.w, player.h);
} else {
ctx.drawImage(normal, player.x, player.y, player.w, player.h);
}