Я привел ваш пример к следующему:
http://jsfiddle.net/sPm3b/6/
И он работает очень быстро в Firefox и Chrome.
Итак, мы знаем, что проблема заключается вв изображениях.
Вам необходимо оптимизировать способ их создания и загрузки.Прямо сейчас каждый clear()
создает новое изображение и ждет его загрузки!Это изображение должно быть создано только один раз в вашем loadGame()
, а затем снова и снова использоваться.
Точно такая же сделка с letterImg
в DrawRain()
.Переместите создание в loadGame()
Это, вероятно, решит проблему.
РЕДАКТИРОВАТЬ:
как это:
Вверху добавьте:
var letterImg = new Image();
var bgImg = new Image();
Тогда
function loadGame()
{
canvas = document.getElementById("gameCanvas");
context = canvas.getContext("2d");
canvas.width = canvasWidth;
canvas.height = canvasHeight;
bgImg.src = "images/bg.png";
letterImg.src = "images/raindrop.gif";
// optional: wait for them to load here
GameLoop();
}
Тогда drawRain, например, будет выглядеть так:
var DrawRain = function()
{
for (i = 0; i < 10; i++)
{
thisXPos = rain[i][0];
thisYPos = rain[i][1];
context.drawImage(letterImg, thisXPosX, thisYPos); // letterImg was already constructed, no need to make it again
}
};