Показать сообщение отдельно
  #1 (permalink)  
Старый 22.05.2012, 15:39
Профессор
Отправить личное сообщение для розовый слоник Посмотреть профиль Найти все сообщения от розовый слоник
 
Регистрация: 17.10.2009
Сообщений: 258

Скорость рендера в canvas
Все приветы.
Для отрисовки картинок создаю теги img и храню все данные об элементе в одном массиве. Ускорит ли работу если хранить это в теге канваса, или можно как то по лучше сохранить картинку что бы потом ее можно было быстро использовать в канвасе.

для тех кому нужен код:

функция перевода объекта анимации с записыванием в массив
function createNewEventObject(nameObject, nameEvent, Event) {
		
		var elem = arrayObject[nameObject][nameEvent];
		
		//Запись параметров перемещения объекта
		for (var o in Event) {
			
			if (typeof Event[o] == 'object' && Event[o] != null) {
				
				elem[o] = new Object();
				
				//Если значение является объектом тогда проходимся циклом по нему
				for (var a in Event[o]) { 
					
					if (typeof Event[o][a] == 'string' && Event[o][a].indexOf('src') != -1) {
						
						var img = new Image();		// Замена на img так как canvas не работает с урами
						img.src = Event[o][a];
						elem[o][a] = img;
						
					} else if (typeof Event[o][a] == 'object') {
							
						//создаем дополнительное вложение
						elem[o][a] = new Object();
						
						for (var i in Event[o][a]) {
							
							//Снова делаем проверку на то нужно ли создавать img
							if (Event[o][a][i].indexOf('src') != -1) {
								
								var img = new Image();		// Замена на img так как canvas не работает с урами
								img.src = Event[o][a][i];
								elem[o][a][i] = img;
								
							} else {
							
								elem[o][a][i] = Event[o][a][i];
								
							}
							
						}
						
					} else {
						
						elem[o][a] = Event[o][a];
						
					}
					
				}
				
			} else {
			
				elem[o] = Event[o];
				
			}
			
		}
		
	}


ну а руссую на canvas вот так
ctxMan.drawImage(
                directions,     				 	//Объект Image анимации 
                Math.round(elemEvent.fw * step), 	//Берем текущий кадр, ширина кадра * шаг 
                0,                               	//Кадры идут один за другим, тут 0
                elemEvent.w,                     	//Вырез в ширину объекта
                elemEvent.h,                     	//И в высоту
                elemPosition.x+shiftX,              //Размещаем по горизонтали на холсте
                elemPosition.y+shiftY,              //И по вертикали
                elemEvent.w,                     	//Ширина как у кадра
                elemEvent.h                      	//Ну и высота
            );

Последний раз редактировалось розовый слоник, 22.05.2012 в 15:41.
Ответить с цитированием