покрути мышь кругами, увидишь что огонь разбивается на шаблонные элементы, соответственно можно отрисовать такой шаблонный элемент и далее отрисовывать множество его копий (можно даже дивами, благо браузеры понимают альфа канал)
Там достаточно сложный процесс отрисовки — прозрачность, если не делать это через OpenGL/D3D то будет медленно. Как будут ускорять так сразу очень сложные эффекты будут доступны.
Ну и как я писал ниже — нужна встроенная библиотека по работе с векторами.
Пара комментариев:
Если на маленьком экране прокрутить страницу вниз, текстуры летят не туда. Вообще для вычисления углов есть функция Math.atan2(da, db).
Такой большой канвас для сцены не нужен. С небольшими канвасами порядка 400*400 уже можно делать игрушки аркадного типа с фиксированным фреймрейтом порядка 30.
Если интересует что-то большее, советую присмотреться к технологии WebGL, которая поддерживается в последних версиях Firefox и Chrome.
Ну WebGL уже давно интересует, но это пока в моём TODO.
Что на счёт Math.atan — углы тут не нужны, тут нужны нормализованные вектора. :) Было бы хорошо если бы в math на уровне C/C++ были бы записаны все функции по работе с векторами (pow, dot3 и проч.). Да и SSE оптимизацию можно было бы туда впихнуть. Тогда игры уже достаточно серьёзные можно было бы писать но тест показал — проблема скорости не в математике, а в отрисовке.
ParticleSystem на Canvas/HTML5/Javascript